为什么最后一次没有循环?CX=1的时候直接跳出循环了
程序代码:
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
这是王爽老师书上的 实验10第3题 数值显示的一部分,把数字以十进制形式的字符串写到data区。比如数字1234,就把字符串‘4321’写到data区域。以后颠倒前后顺序即可。
对每个要处理的数字,只需要循环除以10,提取商和余数,把余数加上30H,就可以转换成对应的字符。当商为0时循环结束。
我的这个问题是,最后一位余数没有处理,比如1234,只能在data区域写入432。我用debug跟踪的时候发现,CX=1的时候,jcxz就跳转了。这是为什么呢?