鱼C论坛

 找回密码
 立即注册
查看: 1903|回复: 2

实验十第一题的一个问题

[复制链接]
发表于 2012-5-8 17:27:41 | 显示全部楼层 |阅读模式

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

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

x
assume cs:code,ds:data,ss:stack
data segment
db 'welcome to masm!',0
data ends
stack segment
dw 8 dup (0)
stack ends
code segment
start: mov dh, 8h     ;显示的行号
   mov dl, 3h     ;显示的列号
   mov cl, 2h     ;显示的颜色
   mov ax, data    ;将DATA定义数据段
   mov ds, ax
   mov ax, stack
   mov ss, ax
   mov sp, 16
   mov si, 0
   call show_str
   
   mov ax, 4c00h
   int 21h
   
show_str: mov ax, 0b800h
   mov es, ax
   
   mov al, 160     ;计算行偏移字节数
   sub dh, 1
   mul dh
   mov di, ax     ;将行偏移字数给DI
   
   mov al, 2     ;计算列偏移字节数
   mul dl
   sub ax, 2
   
   add di, ax     ;计算显存偏移地址
   mov bl, cl     ;显示的颜色给BL
   
   mov cl, [si]    ;将DATA的第一个字符给CL
   mov ch, 0     ;给CH一个零
   
  s: jcxz s1
   mov es:[di], cl
   mov es:[di+1], bl
   
   add di, 2
   inc si
   mov cl, [si]
   mov ch, 0
   
   jmp short s   此处若改为LOOP S后就乱码或者没有什么都不显示。LOOP 只是将CX减一,用DEBUG调试时发现CX的内空没有写入显存,这是为什么?我搞不明白,希望高手们能帮我解决疑问。我是个初学者,在这里感谢各位


code ends
end start
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2012-5-8 21:12:30 | 显示全部楼层
assume cs:code,ds:data,ss:stack
data segment
db 'welcome to masm!',0
data ends
stack segment
dw 8 dup (0)
stack ends
code segment
start:
   mov dh, 8h     ;显示的行号
   mov dl, 3h     ;显示的列号
   mov cl, 2h     ;显示的颜色
   mov ax, data    ;将DATA定义数据段
   mov ds, ax
   mov ax, stack
   mov ss, ax
   mov sp, 16
   mov si, 0
   call show_str
   
   mov ax, 4c00h
   int 21h
   
show_str: mov ax, 0b800h
   mov es, ax
   
   mov al, 160     ;计算行偏移字节数
   sub dh, 1
   mul dh
   mov di, ax     ;将行偏移字数给DI
   
   mov al, 2     ;计算列偏移字节数
   mul dl
   sub ax, 2
   
   add di, ax     ;计算显存偏移地址
   mov bl, cl     ;显示的颜色给BL
   
   mov cl, [si]    ;将DATA的第一个字符给CL
   mov ch, 0     ;给CH一个零
   
s: jcxz s1
   mov es:[di], cl
   mov es:[di+1], bl
   
   add di, 2
   inc si
   mov cl, [si]
   mov ch, 0
   
   jmp short s   ;loop会将cx减一,而cl又放字符 ,这会使你无法知道loop什么时候终止(我个人不建议用cl放字符)

s1:ret       ; 少了返回
code ends
end start
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
 楼主| 发表于 2012-5-9 09:56:03 | 显示全部楼层
非常感谢!我明白了,LOOP会先将CX减一,才跳转。若CX为零时,会使CX的值变为FFFF
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2024-11-20 04:50

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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