装配中的换档问题
Shifting Division issue in assembly
使用 shr 但仅在我使用 shift 计数 1 时才工作,因为它不工作。 . . .只有除以 2 是可行的,但当超过时,事情就不顺利了。
这是例如代码:
.model small
.stack 100h
.data
num db 8
.code
main proc
mov ax , @data
mov ds , ax
mov al , num
shr al , 2 ; this instruction is giving the error
mov dl ,al
add dl , 48
mov ah ,2
int 21h
mov ax , 4c00h
int 21h
main endp
end main
一些汇编程序接受:
shr ax, 4
其他汇编器需要使用 CL :
mov cl, 4
shr ax, cl
同时测试 SHR 是否需要 8 位或 16 位寄存器:
shr al, cl ;<==== THIS MIGHT BE REJECTED.
shr ax, cl
这取决于您使用的汇编器。接下来的两个链接帮助:
http://people.sju.edu/~ggrevera/arch/references/MASM61PROGUIDE.pdf
在8086上,SHR指令可以shr al,1
右移一位,也可以shr al,cl
右移多位。所以如果你想右移两个地方,你要么写两个移位指令:
shr al,1
shr al,1
或者您将值 2 放入 cl 并移位:
mov cl,2
shr al,cl
后来的 Intel 处理器(我不记得是 80286 还是 80386)添加了 shr al,x
,其中 x
可以是 1 以外的数字。
如果您在编译时遇到该错误(即汇编程序发出错误),则表明该指令对于您选择为其生成代码的处理器无效。
如果您在运行时收到非法指令,那是因为汇编程序为后来的处理器(例如 80386)生成代码,但您 运行 8086 上的代码,不支持该指令。
使用 shr 但仅在我使用 shift 计数 1 时才工作,因为它不工作。 . . .只有除以 2 是可行的,但当超过时,事情就不顺利了。 这是例如代码:
.model small
.stack 100h
.data
num db 8
.code
main proc
mov ax , @data
mov ds , ax
mov al , num
shr al , 2 ; this instruction is giving the error
mov dl ,al
add dl , 48
mov ah ,2
int 21h
mov ax , 4c00h
int 21h
main endp
end main
一些汇编程序接受:
shr ax, 4
其他汇编器需要使用 CL :
mov cl, 4
shr ax, cl
同时测试 SHR 是否需要 8 位或 16 位寄存器:
shr al, cl ;<==== THIS MIGHT BE REJECTED.
shr ax, cl
这取决于您使用的汇编器。接下来的两个链接帮助:
http://people.sju.edu/~ggrevera/arch/references/MASM61PROGUIDE.pdf
在8086上,SHR指令可以shr al,1
右移一位,也可以shr al,cl
右移多位。所以如果你想右移两个地方,你要么写两个移位指令:
shr al,1
shr al,1
或者您将值 2 放入 cl 并移位:
mov cl,2
shr al,cl
后来的 Intel 处理器(我不记得是 80286 还是 80386)添加了 shr al,x
,其中 x
可以是 1 以外的数字。
如果您在编译时遇到该错误(即汇编程序发出错误),则表明该指令对于您选择为其生成代码的处理器无效。
如果您在运行时收到非法指令,那是因为汇编程序为后来的处理器(例如 80386)生成代码,但您 运行 8086 上的代码,不支持该指令。