关于标志寄存器OF,debug调试是NV ,是不是已经溢出了,应该是OV
assume cs:codecode segment
start: mov ax,0
mov ax,0ffffh
add ax,88h
mov ax,4c00h
int 21h
code ends
endstart of 只管有符号的数的运算是否会超过那个数的范围, 所以mov ax,0ffffh 相当于 ax = -1, add ax,88h情况下,ax = 87h, 而NV表示没有溢出,所以结果是对的,NV表示没有溢出。
cpu怎么知道寄存器ax=-1如何让CPU把寄存器ax相当于ax=ffffh 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:24 编辑
对于CPU来说,它只是一堆数据。 关键在于人怎么看,标志位是人们观察数据的工具,of 只管有符号的数的运算,而cf只管无符号的。在观察of时,数据就是有符号的,在观察cf时,数据就是无符号的。一定要记住,数据就是数据,它的意义主要取决于人怎么看。 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:26 编辑
在有符号的情况下,整数范围为-32768~32767,最高位为符号位;无符号整数范围为0~65535,最高位仍为数值位。
所以在有符号的情况下,ax=65535 是不可能的。 3-3 发表于 2017-11-14 21:23
在有符号的情况下,整数范围为-32768~32767,最高位为符号位;无符号整数范围为0~65535,最高位仍为数值位 ...
怎样定义MOV ax,0ffffh为无符号 3-3 发表于 2017-11-14 20:23
对于CPU来说,它只是一堆数据。 关键在于人怎么看,标志位是人们观察数据的工具,of 只管有符号的数的运算 ...
它只是一堆数据,关键在于你怎么对待它。 LoveFish- 发表于 2017-11-14 21:44
怎样定义MOV ax,0ffffh为无符号
在8086cpu通用寄存器ax默认都是有符号的吗?可不可以定义通用寄存器ax为无符号FFFFh 相当于 ax=65535而不是ax=-1 不可以的,这是设计之初就定好的。
页:
[1]