100531319 发表于 2011-10-19 19:20:24

关于loop循环 结果不正确!不知道怎么回事!希望大神指导!!



从1+到100 =5050对不对! 但我调试出来等于 8080不知道哪里错了!希望 指导下我!!

assume cs:code
code segment
    mov ax, 1            
mov dx, 0
mov cx, 100h               ;循环次数100次
s:add dx, ax                  ;从1加起
    inc ax                           ;ax=ax+1
loop s                               ;循环

code ends
end

程序调试后 结果



风扫地 发表于 2011-10-19 19:31:20

本帖最后由 风扫地 于 2011-10-19 19:31 编辑


mov cx,100H



100H这是16进制的。。。

100531319 发表于 2011-10-19 19:46:15

风扫地 发表于 2011-10-19 19:31 static/image/common/back.gif
100H这是16进制的。。。

我不加 H 的话cx=64    那怎么循环100次?

assume cs:code
code segment
    mov ax, 1
mov dx, 0
mov cx, 100
s:add dx, ax
    inc ax
loop s

mov ax,4c00h
int 21h
code ends
end


看图:



tsembrace 发表于 2011-10-19 20:10:21

简单的数学你弄不懂?
100次,十进制就是100,16进制就是64H。
你要么用mov cx,64h
要么mov cx,100
没那么纠结吧~

风扫地 发表于 2011-10-19 20:16:35

楼主是对进制的知识不了解吗?建议看看小甲鱼老师关于进制的视频。
http://www.fishc.com/a/shipin/qita/623.html

jackfong 发表于 2011-10-19 20:56:48

不懂:lol:lol:lol:lol:lol 还没开始学 汇编

lailai421 发表于 2011-10-19 23:03:40

楼主你的程序设置循环的时候mov cx,100H这的地方错了哦,应该是mov cx,100或mov cx,64H(因为十进制100=十六进制的64H)如果你设成了100H的话结果就会成8080了哈

100531319 发表于 2011-10-20 10:44:32

风扫地 发表于 2011-10-19 20:16 static/image/common/back.gif
楼主是对进制的知识不了解吗?建议看看小甲鱼老师关于进制的视频。
http://www.fishc.com/a/shipin/qita/6 ...

能问下吗? 通用寄存器不都是以十六进制表示的? 那cx应该为100 才能表示循环100次啊,为什么要以十进制的100来表示啊!我想不通啊{:5_94:}{:5_94:}{:5_99:}

tsembrace 发表于 2011-10-20 11:01:36

100531319 发表于 2011-10-20 10:44 static/image/common/back.gif
能问下吗? 通用寄存器不都是以十六进制表示的? 那cx应该为100 才能表示循环100次啊,为什么要以十进制的 ...

你说的“通用寄存器不都是以十六进制表示的?”,这个只是你看到的“debug"程序选择的进制显示方式,在计算机内部,永远只能表示0和1。但你在编程的时候要让编译器可以正确理解你的本意。所以你在写代码时候得有说明,如果用16进制表示的话数值后面要加“H”,十进制的话就不用加。

100531319 发表于 2011-10-20 19:18:12

tsembrace 发表于 2011-10-20 11:01 static/image/common/back.gif
你说的“通用寄存器不都是以十六进制表示的?”,这个只是你看到的“debug"程序选择的进制显示方式,在计 ...

那么我可不可以理解为 凡是在程序中循环的次数都以十进制表示的, 除非有说明要十六进制表示,才要在后面加H呢!是不是这样?{:5_92:}

tsembrace 发表于 2011-10-20 19:58:00

我也不知道该怎么说你才能明白了。。。我啥时候说循环次数必须以十进制表示了。。你的本意需要循环几次你就表示几次啊,随便你用哪种进制表示法,但编译器不知道你选用的是哪种进制,所以你得注明。你这里要100(十进制)次,那你就mov cx,100(这里是用了十进制),你也可以用16进制mov cx,64H(用‘H“注明表示16进制,这样编译器才晓得你本意的准确数值。)

100531319 发表于 2011-10-20 20:13:31

tsembrace 发表于 2011-10-20 19:58 static/image/common/back.gif
我也不知道该怎么说你才能明白了。。。我啥时候说循环次数必须以十进制表示了。。你的本意需要循环几次你就 ...

受教了 ,有种茅舍顿开的感觉! 谢谢 {:5_109:}

yang7516 发表于 2011-10-20 21:05:27

就是,可以用10进制,不用加H,也可以用16进制,后面加H

100531319 发表于 2011-10-21 15:13:09

yang7516 发表于 2011-10-20 21:05 static/image/common/back.gif
就是,可以用10进制,不用加H,也可以用16进制,后面加H

{:5_109:}    我已经明白了! 3Q {:5_110:}

ever.g 发表于 2011-10-21 18:13:50

:loveliness:看了下 LZ果然还是应该去补补进制

掌心的呵护 发表于 2011-10-21 18:51:33

基础得再牢固点。。。

cyht33 发表于 2011-10-22 14:23:00

100H是16进制数,转换成10进制是256,也就是说你这个程序循环了256次。
不加H的话,10进制的100转换成16进制就是64,在debug中默认都是16进制。

100531319 发表于 2011-10-22 19:56:52

恩 谢谢 大家的 指点!我会努力的 {:5_109:}
页: [1]
查看完整版本: 关于loop循环 结果不正确!不知道怎么回事!希望大神指导!!