![]() |
#2
zklhp2012-10-21 19:44
|

assume cs:code,ds:data
data segment
db 32 dup(0)
data ends
code segment
start:
mov ax,data
mov ds,ax
mov si,0
mov ax,1266;1266处理结果应该是把‘6621’写到data区域的
mov bl,10
mov ch,0
s0:
div bl
add ah,30h
mov ds:[si],ah ;把余数转成相应字符写到data区域
mov ah,0
mov cl,al
jcxz ok ;这里不知为什么CX=1的时候就直接跳到mov ax,4c00h了
inc si
mov ah,0
loop s0
ok:
mov ax,4c00h;跳到这一步后 用D DS:0 8只能看到662,看来最后一位余数没有处理
int 21h
code ends
end start
data segment
db 32 dup(0)
data ends
code segment
start:
mov ax,data
mov ds,ax
mov si,0
mov ax,1266;1266处理结果应该是把‘6621’写到data区域的
mov bl,10
mov ch,0
s0:
div bl
add ah,30h
mov ds:[si],ah ;把余数转成相应字符写到data区域
mov ah,0
mov cl,al
jcxz ok ;这里不知为什么CX=1的时候就直接跳到mov ax,4c00h了
inc si
mov ah,0
loop s0
ok:
mov ax,4c00h;跳到这一步后 用D DS:0 8只能看到662,看来最后一位余数没有处理
int 21h
code ends
end start
这是王爽老师书上的 实验10第3题 数值显示的一部分,把数字以十进制形式的字符串写到data区。比如数字1234,就把字符串‘4321’写到data区域。以后颠倒前后顺序即可。
对每个要处理的数字,只需要循环除以10,提取商和余数,把余数加上30H,就可以转换成对应的字符。当商为0时循环结束。
我的这个问题是,最后一位余数没有处理,比如1234,只能在data区域写入432。我用debug跟踪的时候发现,CX=1的时候,jcxz就跳转了。这是为什么呢?
只有本站会员才能查看附件,请 登录