|
主题 : : 关于转移指令loop [已解决] |
回复[ 7次 ]
点击[ 312次 ] | |
|
|
|
|
[帖 主]
[ 发表时间:2011-12-02 15:59 ]
[引用]
[回复]
[ top ] | |
荣誉值:1
信誉值:4
注册日期:2011-11-28 20:29 |
大家想过没有,如果cx是负数,是不是会陷入死循环?
王爽老师的书没有深入的讲解数学运算的东西,在看9.8节 检测点9.2的时候我想了这个问题。
其实应该不会陷入死循环,因为溢出的话又会回到起点。
希望王爽老师可以添加相关内容 | | |
|
|
|
|
[第1楼]
[ 回复时间:2011-12-02 16:08 ]
[引用]
[回复]
[ top ] | |
荣誉值:405
信誉值:0
注册日期:2008-01-19 14:51 |
负数在计算机中是以补码形式存在的,计算机会把它当成正数运算的。所以,不存在楼主说的问题。另外,给楼主提个建议,以我们现在的这种认识,什么是什么都还不清楚,我们是没有资格对王爽老师提什么希望的哦!希望楼主把自己的问题认真解决完,不要自己需要什么就给别人提什么希望,要清楚,楼主现在的水平是没有话语权的。 | | |
|
|
|
|
[第2楼]
[ 回复时间:2011-12-02 17:08 ]
[引用]
[回复]
[ top ] | |
荣誉值:1
信誉值:4
注册日期:2011-11-28 20:29 |
回复:[第1楼]
------------------
你并没有明白我的意思。实际上计算机还是会把它当做负数。如果计算机把它当作正数计算,岂不是与我们的逻辑想
违背?
在高级语言里,死循环是存在的,汇编也不例外。
当其实不是真正的死循环。
比如这个程序:
assume cs:code
code segment
start:mov ax,0
mov cx,-1
s:inc ax
loop s
mov ax,4c00h
int 21h
code ends
end start
用ax计算循环的次数,最终结果是:
AX=FFFF BX=0000 CX=0000 DX=0000 SP=0000 BP=0000 SI=0000 DI=0000
DS=0B43 ES=0B43 SS=0B53 CS=0B53 IP=0009 NV UP EI NG NZ NA PE NC
0B53:0009 B8004C MOV AX,4C00
说明最终是跳出了,因为溢出后它又恢复正常了。
再说明一点,我并没有说王爽老师的书在这一章有什么错误,我只是希望王爽老师补充点内容而已。 | | |
|
|
|
|
[第3楼]
[ 回复时间:2011-12-02 17:21 ]
[引用]
[回复]
[ top ] | |
荣誉值:118
信誉值:0
注册日期:2011-07-07 22:59 |
首先,你也知道溢出,但是你这个实验理过溢出吗?
mov cx,0
s:inc ax
loop s
如果这个样子,会循环65536次,在第32768发生溢出,说明后面的结果是不准确的,但是你没理,那就是当做无符号数来计算.直到又为0.只是说,计算机在运算时,是做两种运算,一种是有符号数,一种是无符号数.如果你是认为做的是有符号数,就根据of等进行判断,如果是无符号数你就根据cf,af等符号位来判断.也就是说什么数在计算机那是没有区别的,区别的是你的心. | | |
|
|
|
|
[第4楼]
[ 回复时间:2011-12-02 23:51 ]
[引用]
[回复]
[ top ] | |
荣誉值:405
信誉值:0
注册日期:2008-01-19 14:51 |
是进位了,不是溢出。我们可以不考虑正数还是负数,计算机执行loop指令的时候进行的是减一运算,如果减到零就终止循环。从这个上面去理解。 | | |
|
|
|
|
[第5楼]
[ 回复时间:2011-12-03 14:17 ]
[引用]
[回复]
[ top ] | |
荣誉值:1
信誉值:4
注册日期:2011-11-28 20:29 |
回复:[第4楼]
------------------
我又仔细看了一下,实际上是溢出了。
cx的变化
-1 ---> -32768 循环次数: 32767次
-32768 ---> 32767 此处溢出,循环次数: 1次
32767 --->0 循环次数: 32767次
总共计循环次数:32767+1+32767=65535次
我们将ax看作无符号整数:65535=FFFFh
所以说,在这个程序中,溢出是存在的。
“说明最终是跳出了,因为溢出后它又恢复正常了。”这句话的后半句是说,溢出后,在cx为正整数的情况下,loop才是正常的。 | | |
|
|
|
|
[第6楼]
[ 回复时间:2011-12-03 14:37 ]
[引用]
[回复]
[ top ] | |
荣誉值:405
信誉值:0
注册日期:2008-01-19 14:51 |
不明白楼上的意思。既然是无符号运算跟溢出都没有关系。根本就不用考虑是否溢出。 | | |
|
|
|
|
[第7楼]
[ 回复时间:2011-12-09 12:38 ]
[引用]
[回复]
[ top ] | |
荣誉值:1
信誉值:4
注册日期:2011-11-28 20:29 |
此贴由 贴主 于 [ 2011-12-09 12:38 ] 结贴。 结贴原因:问题已解决 | | |