确定此(非常少)汇编程序代码的函数和输出

时间:2016-10-04 12:10:43

标签: function assembly x86

ax是一个注册表,shl表示我们向n值转移到左侧... z是一个内存地址,在开头它包含值4

mov ax, [z]
shl ax, 3
add ax, [z]
shl ax, 1
mov [q], ax

我想知道如何从此代码中读取函数?

因此,在第一行,我们将z中的内容放入注册ax,好吧。

然后我们将此值(4)向左移动3,因此基本上执行此操作:2^3 * z

我们add [z],现在我们2^3 * z + z = 9z

现在我们将9zshift带到1左侧,所以我们有9z * 2^1 = 18z

最后我们将注册ax并将其放入内存地址q,因此我们有:

q(z) = 18z

任务说z包含值4,所以在这种情况下输出将是

q(4) = 18*4= 72

我是否正确地做了一切,从解释到解决方案?请告诉我,因为我需要在考试中完成类似的任务。

1 个答案:

答案 0 :(得分:1)

  

所以在第一行我们将z中的内容放入注册ax,好吧。

不,您将值(地址)z的内存内容放入ax。 所以ax = 4,而非ax = z。汇编z相当于符号或地址,即。一些存储单元标签,如12340。

(“不” - 您可能正确理解它,我只是想强调在x86 intel语法中如何使用[]

在C = z中分配变量z的值,并获取您必须执行的地址&z。在汇编中,z本身就是地址,[z]是内容。 (至少在NASM语法中,MASM / TASM允许mov ax,z语法获取内容,并且你必须编写mov ax,offset z来获取地址,但我建议不要使用这种混合用法,其中自动获取变量,但访问内存槽寄存器需要括号[rx],IMO令人困惑)

休息没问题。