鱼C论坛

 找回密码
 立即注册
查看: 1745|回复: 3

代码是不是有错很疑惑,求解救!

[复制链接]
发表于 2012-7-28 13:38:12 | 显示全部楼层 |阅读模式
1鱼币
本帖最后由 destiny 于 2012-7-28 13:52 编辑

利用棧把 0123H,0456H,0789H,0abcH,0defH,0fedH,0cbaH,0987H实现逆序存放。

code segment
        dw 0123H,0456H,0789,0abcH,0defH,0fedH,0cbaH,0987H
        dw 0,0,0,0,0,0,0,0
  start: mov ax,cs
           mov ss,ax
           mov bx,0
            mov,cx,8
        s:push cs:[bx]
          add bx,2
          loop s

          mov bx,0
          mov cx,8
       s0:pop cs:[bx]
          add bx,2
          loop s0

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

我疑惑的就是CX应该是7,而甲鱼老实写的是8,CX为0程序才会停止循环,如果是8的话,不是多了一次循环,如果是我错了 请告诉我错在哪里 详细一点。

最佳答案

查看完整内容

是8没错哦,因为是先减1再判断是否为0,如果为0,即使减过了也不执行 你可能有两种可能性的误会:1.以为先循环再减2.以为即使为0,但是减过了应该再循环一次 CX=8,首先不减循环一次,CX=7,二次,CX=6,三次,CX=5,四次,CX=4,五次,CX=3,六次,CX=2,七次 CX=1,八次,最后一次CX=CX-1=1-1=0,虽然减过,但值为0则不循环 注意一点,此问题既然我们探讨过了,不必再探讨第二遍,以后只要知道,我们要改多少个数据,循环就设 ...
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2012-7-28 13:38:13 | 显示全部楼层
本帖最后由 メ㊣逆ご帅☆ 于 2012-7-28 14:03 编辑

是8没错哦,因为是先减1再判断是否为0,如果为0,即使减过了也不执行
你可能有两种可能性的误会:1.以为先循环再减2.以为即使为0,但是减过了应该再循环一次
CX=8,首先不减循环一次,CX=7,二次,CX=6,三次,CX=5,四次,CX=4,五次,CX=3,六次,CX=2,七次
CX=1,八次,最后一次CX=CX-1=1-1=0,虽然减过,但值为0则不循环



注意一点,此问题既然我们探讨过了,不必再探讨第二遍,以后只要知道,我们要改多少个数据,循环就设多少个就行
要高效率做事,知道的东西没必要知道第二遍
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2012-7-28 14:20:32 | 显示全部楼层

还有一个就是 我们在设置棧段sp时候,在偏移指针时候是该用10进制数 还是16进制数,还是说都可以!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2012-7-28 14:23:44 | 显示全部楼层
都可以,不过看你习惯楼
不过有一点,你代码里搞的是十进制数,DEBUG里会转换显示其16进制的数,你得换位思考下
十六进制和十进制本质相同,可以互相转换,完全不影响
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2024-11-20 11:33

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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