w270061449 发表于 2016-8-30 09:44:50

一个小问题 一个例子的答案 我怎么感觉溢出了啊 麻烦大神看下

mov al,98h
add al,al

课本例子 答案是al=30h cf=1

但是 98h 的二进制是 1001 1000b 也就是-104的补码

*******************************************************************************************
这里有点小疑问麻烦大神解决下 应为最高位是1 计算机应该是按照有符号数运算的对么???
********************************************************************************************
然后 add al,al   也就是 -104-104 =-208超出al范围
我这么理解对么 ? 麻烦高手指点下


38299676 发表于 2016-8-30 21:45:17

98H+98H=130H AL寄存器只能保存后2位 所以 AL=30 ,在计算的时候产生进位 cF被CPU放置为1,假如入、2个数相加 没有产生进位 CF会被CPU放置为0,就这么简单

w270061449 发表于 2016-8-31 08:46:52

38299676 发表于 2016-8-30 21:45
98H+98H=130H AL寄存器只能保存后2位 所以 AL=30 ,在计算的时候产生进位 cF被CPU放置为1,假如入、2个数相 ...

那就有问题了 如果你吧130H 转换下 则超出了AL的最大范围溢出不就是按照这个计算的么

38299676 发表于 2016-8-31 19:37:22

w270061449 发表于 2016-8-31 08:46
那就有问题了 如果你吧130H 转换下 则超出了AL的最大范围溢出不就是按照这个计算的么

你是 add al,al 好不 这是一个8位的数的的加减法,相当于在8位机器上的计算。
要想直接得到正确结果 ADD ah,ah得到的值就是130H,也许我讲的不很明白 大致意思就这样。
页: [1]
查看完整版本: 一个小问题 一个例子的答案 我怎么感觉溢出了啊 麻烦大神看下