有人可以帮我解决这个使用算术运算用汇编语言编写的表达式吗?
Can somebody help me out with this expression written in assembly using arithmetic operations?
表达式:EAX = 7*EAX - 2*EBX - EBX/8
我的代码:
start:
mov EAX,9
mov EDX ,7
mul EDX ; EAX<-EAX*EDX
mov EDX,EAX ; EDX<-EAX*EDX<=>(7*9)
mov EBX,8
mov EAX,2
mul EBX; EAX<- EAX*EBX (2*8)
mov ECX,EAX
sub EDX,ECX; <=>7*EAX-2*EBX (7*9-2*8)
mov EAX,EBX
div EBX ; EAX <=> 8/8
sub EDX,EAX; <=> 7*9-2*8-8/8
push 0
call exit
end start
EAX = 7*EAX - 2*EBX - EBX/8
并不是因为表达式包含乘法 (*) 或除法 (/),所以您的解决方案应该使用这些运算。
- 对于
7*EAX
你可以使用更简单的 imul eax, 7
.
- 您可以简单地减去
EBX
两次,而不是加倍 EBX
。
- 要计算
EBX
的八分之一,您只需将其值向右移动 3 次即可。
imul eax, 7
sub eax, ebx
sub eax, ebx
shr ebx, 3
sub eax, ebx
表达式:EAX = 7*EAX - 2*EBX - EBX/8
我的代码:
start:
mov EAX,9
mov EDX ,7
mul EDX ; EAX<-EAX*EDX
mov EDX,EAX ; EDX<-EAX*EDX<=>(7*9)
mov EBX,8
mov EAX,2
mul EBX; EAX<- EAX*EBX (2*8)
mov ECX,EAX
sub EDX,ECX; <=>7*EAX-2*EBX (7*9-2*8)
mov EAX,EBX
div EBX ; EAX <=> 8/8
sub EDX,EAX; <=> 7*9-2*8-8/8
push 0
call exit
end start
EAX = 7*EAX - 2*EBX - EBX/8
并不是因为表达式包含乘法 (*) 或除法 (/),所以您的解决方案应该使用这些运算。
- 对于
7*EAX
你可以使用更简单的imul eax, 7
. - 您可以简单地减去
EBX
两次,而不是加倍EBX
。 - 要计算
EBX
的八分之一,您只需将其值向右移动 3 次即可。
imul eax, 7
sub eax, ebx
sub eax, ebx
shr ebx, 3
sub eax, ebx