我正试图定义一个计算表达式的宏:
−(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