如何在汇编语言的宏中设置表达式



我正试图定义一个计算表达式的宏:

−(2𝑋+4𝑌)/X

我最初将第一个数字的值存储到eax中,然后将eax加在一起以获得乘2
不过从那以后,我觉得我把乘四以及除法和否定都搞砸了。shr eax, 1是基于我为更好地划分而做的一些阅读,但我可能用错了。如有任何帮助,我们将不胜感激。

addMultiply MACRO num1, num2
mov eax, num1
add eax, eax
add eax, num2
mov ebx, 2
xor eax, ebx
shr eax, 1
ENDM

是的,shr eax, N是将无符号eax除以2N的更好方法,sar eax, N是将有符号eax除以2N的更好方法,但需要除以num1中的一个公共整数X。没有idiv你是逃不掉的。

addMultiply MACRO X, Y 
mov eax, Y          ; EAX=Y
mov ecx, X          ; ECX=X
lea eax,[ecx+2*eax] ; EAX=X+2*Y
sal eax, 1          ; EAX=2X+4Y 
cdq                 ; EDX:EAX=2X+4Y
idiv ecx            ; EAX=(2X+4Y)/X; EDX=remainder            
neg eax             ; EAX=-(2X+4Y)/X
ENDM

最新更新