| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1522 人关注过本帖
标题:为什么最后一次没有循环?CX=1的时候直接跳出循环了
取消只看楼主 加入收藏
chaoc
Rank: 1
等 级:新手上路
帖 子:46
专家分:0
注 册:2012-10-20
结帖率:71.43%
收藏
已结贴  问题点数:20 回复次数:3 
为什么最后一次没有循环?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就跳转了。这是为什么呢?
图片附件: 游客没有浏览图片的权限,请 登录注册

搜索更多相关主题的帖子: color 
2012-10-21 19:08
chaoc
Rank: 1
等 级:新手上路
帖 子:46
专家分:0
注 册:2012-10-20
收藏
得分:0 
回复 5楼 有容就大
谢谢回答,看来我操之过急了。我再回去看看
2012-10-21 20:54
chaoc
Rank: 1
等 级:新手上路
帖 子:46
专家分:0
注 册:2012-10-20
收藏
得分:0 
回复 2楼 zklhp
我一直在检查jcxz,原来是loops的问题。
2012-10-21 20:56
chaoc
Rank: 1
等 级:新手上路
帖 子:46
专家分:0
注 册:2012-10-20
收藏
得分:0 
回复 8楼 有容就大
谢谢!两位版主大大。果然很热心啊!

顺便问一下,有什么好的8086的汇编编辑器推荐吗?代码没高亮显示,有点不习惯。我按照网上的教程配置了UE编辑器,可是不成功。也许是没破解。
2012-10-21 21:07
快速回复:为什么最后一次没有循环?CX=1的时候直接跳出循环了
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.017532 second(s), 11 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved