鱼C论坛

 找回密码
 立即注册
查看: 1949|回复: 17

9章 实验9 问题

[复制链接]
发表于 2013-2-28 17:35:05 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
本帖最后由 sh11va 于 2013-3-10 11:09 编辑

题目要求:编程显示绿色黑底字符串"welcome to masm!"
这是我编的代码,编译没错,运行起来什么都没出现。
assume cs:code,ds:data
data segment
db 77,02,65,02,6c,02,63,02,6f,02,6d,02,65,02,20,02,74,02,6f,02,6d,02,61,02,73,02,6d,02,21,02
data ends

code segment
                 
start:mov ax,data
          mov ds,ax
          mov ax,0b800h
          mov es,ax
          
          mov bx,0
          
s:       mov al,[bx]
         mov es:[bx],al
         inc bx
loop s

         mov ax,4c00h
         int 21h
code ends
end start


想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2013-2-28 18:14:12 | 显示全部楼层
你第3行有问题啊

77,02,65,02,6c…… 一下2进制、一下16进制,你想表达什么?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2013-2-28 18:25:55 | 显示全部楼层
本帖最后由 L]V[G 于 2013-2-28 18:29 编辑

这个程序存在很多逻辑上的错误
1  定义data段的时候,出错了,我不明白你想定义的是什么?不是“welcome to masm!”的ascll码,还有,在定义16进制的数
    据的时候,如果是字母开头,要在前面加上零,如 0f7H

2 s循环没有设置循环的次数,即cx的值

3 没有把颜色设置到指定的内存空间里

4 不是我吹毛求疵,写的代码看起来别扭,建议你多看看书本的例子,多模仿牛人的代码风格

下面奉上我修改过的程序:

assume cs:code,ds:data

data segment
  db "Welcome to masm!"
data ends

code segment
start:
                mov ax,data
                mov ds,ax
               
                mov ax,0b800h
                mov es,ax
               
                mov si,0
                mov di,0
                mov cx,16
               
        s:  mov al,ds:[si]
            mov es:[di],al
               
                mov al,2
                mov es:[di+1],al
               
                inc si
                add di,2
                loop s

                mov ax,4c00h
                int 21h
code ends

end start

PS:在编译和链接后,即masm 和obj之后,要在黑窗口输入指令cls ,这是清屏的指令,然后在执行程序,不然的话,程序显示的字符串会被刷掉

有错不要怕,开始的时候错得越多越好,要耐心修改,以后就不会错了!!不要气馁,加油!!!没耐心的人学不好编程
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2013-2-28 18:34:39 | 显示全部楼层
再给你2个我做实验九的程序答案,一共花了 5天,做完以后,很有成就
第一个:

assume cs:code,ds:data ;2013年2月8日 21:30:37
                       ;目的:实验9,一列一列的赋值
data segment
    db'welcome to masm!'
data ends

code segment
start:
       mov ax,data
           mov es,ax
           
           mov ax,0b800h
           mov ds,ax
           
           mov bx,720h
           mov si,0
           mov di,0
           mov cx,16
        s0:mov ax,es:[si]
           mov [bx].0h[di],ax    ;赋值到第12行
           mov [bx].0a0h[di],ax  ;赋值到第13行
           mov [bx].140h[di],ax  ;赋值到第14行
           
           mov ax,2h
           mov [bx].1h[di],ax    ;12行颜色为绿色
           
           mov ax,24h
           mov [bx].0a1h[di],ax  ;13行颜色为绿底红色
           
           mov ax,71h
           mov [bx].141h[di],ax  ;14行颜色为白底蓝色
           
           inc si
           add di,2
           loop s0
           
           mov ax,4c00h
           int 21h
code ends

end start

;总结:80*25,本程序中间位置(第一页)为 第12,13,14行,第64列到95列
;     行内存分别为:6e0h,780h,820h,列内存为40h-5fh,
;     这样就可以的出第一个内存单元地址:720h




第二个:
assume cs:code,ds:data,ss:stack   ;2013年2月9日 21:40:26
                                  ;目的:实验9,使用外循环和内循环,压栈cx的方法
                                  ; 一行一行地赋值
data segment
    db 'welcome to masm!'
        db 02h,024h,071h
data ends


stack segment
    db 15 dup (0)
stack ends


code segment
start:
                mov ax,data
                mov ds,ax

                mov ax,stack
                mov ss,ax
                mov sp,16

                mov ax,0872h ;算出屏幕第12行中间的显存的段起始位置放入ax中
               
                mov si,0
                mov di,0   
                mov bx,0
                mov cx,0
s0:                push cx
                push ax
                push bx

                mov es,ax
s1:                mov al,[bx+si]   ;此循环实现偶地址中存放字符
                mov es:[di],al
                inc si
                add di,2
                loop s1

                mov si,0
                mov di,0
s2:                mov al,16[bx+si]   ;此循环实现奇地址中存放字符的颜色属性
                mov es:1[di],al
                inc si
                add di,2
                loop s2

                pop cx
                pop ax
                add ax,0a0h       ;相加后,ax变为下一行的地址
                loop s0
        
        mov ax,4c00h
        int 21h
code ends

end start               
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2013-2-28 19:14:09 | 显示全部楼层
我也想知道为什么我的程序什么都显示不了...
assume cs:code,ds:data,ss:stack
data segment
        db 'welcome to masm!'
        db 2h,24h,71h
data ends

stack segment
        db 16 dup(0)
stack ends

code segment
        start:        mov ax,data
                        mov ds,ax
                        mov ax,stack
                        mov ss,ax
                        mov sp,10h
                       
                        mov ax,0b72h
                        mov bx,0
                        mov cx,3
                       
                s:        push cx
                        push ax
                        push bx
                       
                        mov si,0
                        mov di,0
                        mov es,ax
                        pop bx
                       
                        mov cx,10h
                s1:        mov al,ds:[si]
                        mov es:[di],al
                        inc si
                        inc di
                        mov al,ds:10h[bx]
                        mov es:[di],al
                        inc di
                        loop s1
                       
                        inc bx
                       
                        pop ax
                        add ax,0ah
                        pop cx
                        loop s
                       
                        mov ax,4c00h
                        int 21h
                       
code ends
end start
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
 楼主| 发表于 2013-3-7 11:28:58 | 显示全部楼层
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
 楼主| 发表于 2013-3-7 11:29:35 | 显示全部楼层
L]V[G 发表于 2013-2-28 18:34
再给你2个我做实验九的程序答案,一共花了 5天,做完以后,很有成就
第一个:

多谢大神解答,我也准备深入的重写一下。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
 楼主| 发表于 2013-3-7 11:59:47 | 显示全部楼层
L]V[G 发表于 2013-2-28 18:25
这个程序存在很多逻辑上的错误,
1  定义data段的时候,出错了,我不明白你想定义的是什么?不是“welcome ...

我改过之后还是不行,然后复制了你的程序,惊悚的发现我的电脑运行你的程序也没反应,我打了cls了。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2013-3-7 13:16:42 | 显示全部楼层
sh11va 发表于 2013-3-7 11:59
我改过之后还是不行,然后复制了你的程序,惊悚的发现我的电脑运行你的程序也没反应,我打了cls了。

1.png 我执行之后是这个结果啊!!有问题?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2013-3-7 13:21:59 | 显示全部楼层
用这个实验一下,是在屏幕中间显示的,不用cls也不会刷掉。
assume cs:code,ds:data

data segment
  db "Welcome to masm!" 
data ends

code segment
start:
                mov ax,data
                mov ds,ax
                
                mov ax,0b800h
                mov es,ax
                
                mov si,0
                mov di,160*12 + 30*2
                mov cx,16
                
        s:  mov al,ds:[si]
            mov es:[di],al
                
                mov al,2
                mov es:[di+1],al
                
                inc si
                add di,2
                loop s

                mov ax,4c00h
                int 21h
code ends

end start 

这个是结果
2.png
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2013-3-7 14:17:04 | 显示全部楼层
L]V[G 发表于 2013-3-7 13:21
用这个实验一下,是在屏幕中间显示的,不用cls也不会刷掉。

我也是显示不了,复制的你的代码也不行
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
 楼主| 发表于 2013-3-7 18:48:19 | 显示全部楼层
L]V[G 发表于 2013-3-7 13:21
用这个实验一下,是在屏幕中间显示的,不用cls也不会刷掉。

还是不行。。。 1.PNG
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2013-3-7 19:17:07 | 显示全部楼层
sh11va 发表于 2013-3-7 18:48
还是不行。。。

亲,你win7的,下个dbox试一下!!http://bbs.fishc.com/forum.php?m ... %3D11%26typeid%3D11
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2013-3-8 01:59:51 | 显示全部楼层
你这个 根本不和要求啊~哥们   
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2013-3-8 02:13:13 | 显示全部楼层
题目是 在屏幕’ 中间‘ 显示 3行~每行一个颜色~你可到好 给人家简化成1行不说~还没在中间
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2013-3-8 02:16:56 | 显示全部楼层
L]V[G 发表于 2013-3-7 13:21
用这个实验一下,是在屏幕中间显示的,不用cls也不会刷掉。

分别用 3中颜色显示3行~你简化成1行了~~那这题就没意义了吧
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2013-3-8 06:25:37 | 显示全部楼层
本帖最后由 wxhnr 于 2013-3-8 06:26 编辑

纯新手想知道这些程序在什么系统中编写和运行?WIN7行不行?编辑和编译分别用的哪一个?多谢
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
 楼主| 发表于 2013-3-10 09:39:24 | 显示全部楼层
小小小小鱼 发表于 2013-3-8 02:16
分别用 3中颜色显示3行~你简化成1行了~~那这题就没意义了吧

我是想先运行一行成功再写三行的。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-11-18 00:34

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表