使用shr但仅在我使用shift for count 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
答案 0 :(得分:3)
在8086上,SHR指令可以使用shr al,1
向右移动一个位置,或者可以使用shr al,cl
移位多个位置。因此,如果您想要向右移动两个位置,您可以写两个移位指令:
shr al,1
shr al,1
或者你将值2放入cl并转移:
mov cl,2
shr al,cl
后来的英特尔处理器(我不记得是否是80286或80386)添加了shr al,x
,其中x
可以是1以外的数字。
如果您在编译时遇到该错误(即汇编程序发出错误),那么它会告诉您该指令对您选择为其生成代码的处理器无效。
如果你在运行时获得了非法指令,那是因为汇编程序为后来的处理器(例如80386)生成了代码,但是你在8086上运行代码,这不支持该指令
答案 1 :(得分:0)
有些装配工接受:
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