LoveFish- 发表于 2017-11-14 17:47:34

关于标志寄存器OF,debug调试是NV ,是不是已经溢出了,应该是OV

assume        cs:code

code         segment
start:        mov ax,0
                mov ax,0ffffh
                add ax,88h
                mov ax,4c00h
                int 21h
code        ends
endstart

3-3 发表于 2017-11-14 18:32:09

of 只管有符号的数的运算是否会超过那个数的范围, 所以mov ax,0ffffh 相当于 ax = -1, add ax,88h情况下,ax = 87h, 而NV表示没有溢出,所以结果是对的,NV表示没有溢出。

LoveFish- 发表于 2017-11-14 20:03:51

cpu怎么知道寄存器ax=-1如何让CPU把寄存器ax相当于ax=ffffh

LoveFish- 发表于 2017-11-14 20:12:22

3-3 发表于 2017-11-14 18:32
of 只管有符号的数的运算是否会超过那个数的范围, 所以mov ax,0ffffh 相当于 ax = -1, add ax,88h情况 ...


cpu怎么知道寄存器ax=-1如何让CPU把寄存器ax相当于ax=ffffh

3-3 发表于 2017-11-14 20:23:19

本帖最后由 3-3 于 2017-11-14 20:24 编辑

对于CPU来说,它只是一堆数据。 关键在于人怎么看,标志位是人们观察数据的工具,of 只管有符号的数的运算,而cf只管无符号的。在观察of时,数据就是有符号的,在观察cf时,数据就是无符号的。一定要记住,数据就是数据,它的意义主要取决于人怎么看。

LoveFish- 发表于 2017-11-14 21:14:33

3-3 发表于 2017-11-14 20:23
对于CPU来说,它只是一堆数据。 关键在于人怎么看,标志位是人们观察数据的工具,of 只管有符号的数的运算 ...

assume      cs:code

code         segment
start:      mov ax,0
                mov ax,0ffffh
                add ax,88h
                mov ax,4c00h
                int 21h
code      ends
endstart
怎么改动下程序,使得ax=65535然后执行add ax,88h标志位of 变成OV非常感谢

3-3 发表于 2017-11-14 21:23:44

本帖最后由 3-3 于 2017-11-14 21:26 编辑

在有符号的情况下,整数范围为-32768~32767,最高位为符号位;无符号整数范围为0~65535,最高位仍为数值位。
所以在有符号的情况下,ax=65535 是不可能的。

LoveFish- 发表于 2017-11-14 21:44:58

3-3 发表于 2017-11-14 21:23
在有符号的情况下,整数范围为-32768~32767,最高位为符号位;无符号整数范围为0~65535,最高位仍为数值位 ...

怎样定义MOV ax,0ffffh为无符号

3-3 发表于 2017-11-14 21:51:44

3-3 发表于 2017-11-14 20:23
对于CPU来说,它只是一堆数据。 关键在于人怎么看,标志位是人们观察数据的工具,of 只管有符号的数的运算 ...

它只是一堆数据,关键在于你怎么对待它。

LoveFish- 发表于 2017-11-14 21:51:48

LoveFish- 发表于 2017-11-14 21:44
怎样定义MOV ax,0ffffh为无符号

在8086cpu通用寄存器ax默认都是有符号的吗?可不可以定义通用寄存器ax为无符号FFFFh 相当于 ax=65535而不是ax=-1

3-3 发表于 2017-11-14 21:54:26

不可以的,这是设计之初就定好的。
页: [1]
查看完整版本: 关于标志寄存器OF,debug调试是NV ,是不是已经溢出了,应该是OV