2013-11-20 56 views
-1

我已经创建的变量:汇编语言 - 乘

Y sword 8 
Z sword 20 
T sword 68 
B sword ? 

而且我必须评估以下,B = 4T - (8 + Z)+ Y

我真的不熟悉如何做这个。有人能帮我理解吗?

+6

你在写什么CPU代码? –

+0

我不确定你的意思。我只是试图在使用Visual Studio的32位计算机上执行此操作。 –

+2

然后你最有可能瞄准x86。 –

回答

1

假设剑签署的16位数字:

movsx eax,sword ptr T 
movsx ebx,sword ptr Y 
shl eax,2   ; faster than imul 
movsx edx,sword Z 
add eax,ebx 
add edx,8 
sub eax,edx 
mov sword ptr B,ax 

然后优化了一点:

movsx eax,sword ptr T 
movsx ebx,sword ptr Y 
movsx edx,sword Z 
lea eax,[ebx+eax*4] ; less code than shr 
add edx,8 
sub eax,edx 
mov sword ptr B,ax  
+0

我真的不明白你做了什么。我是汇编语言新手,刚开始学习它。我给了一个任务来做这些计算: A = Z-Y + T B = 4T-(8 + Z)+ Y C1 = 4(T-8)+ Z + Y D = mod(T ,8) E = Y^2 + Z –

+3

@SameerAnand:堆栈溢出不是开始学习的好地方。 – Artur

+0

我将您在问题中给出的表达式转换成x86汇编指令,编译器会在编译时生成(差)编译器。 Visual C++可以为您生成汇编程序,但如果这是您的第一次尝试,您应该先阅读汇编语言。 –

-1

一个简单的方法来做到这一点的同时仍然学习大会的重要概念是用C/C++编写程序并让你的编译器输出程序集。从那里,研究语法,看看它是否有任何意义。这实际上是我学习x86汇编的方式...