我对此算术运算符感到困惑

时间:2019-09-22 16:45:08

标签: assembly x86 att

我试图在汇编中执行此算术运算,但是每次都得到错误的答案,不确定我应该怎么做

这些问题来自一本教科书,我确实有答案,但是试图理解如何获得答案

The link contains the image which has question and my work as shown below

Address | value  ||   register value 
0x100      0xFF  ||    %rax     0x100
0x108      0xAB  ||    %rcx      0x1
0xll0      0x13  ||    %rdx      0x3
0x118      0xll  ||

|| lines are just to separate the two sides
Questions are 
Instruction                    Destination     Value
addq %rcx, (%rax)           :
subq %rdx,8(%rax)           :
imulq $16, (%ra,x,%rd.x,8)  :
incq 16 (%rax)              :
decq %rcx                   :
subq %rdx, %rax             :


Instruction                    Destination  Value
addq %rcx, (%rax)           :  0x100          ?
subq %rdx,8(%rax)           :  0x108          ?
imulq $16, (%ra,x,%rd.x,8)  :  0x118          ?
incq 16 (%rax)              :   ?             ?
decq %rcx                   :  %rcx          0x0
subq %rdx, %rax             :  %rax           ?

1 个答案:

答案 0 :(得分:0)

您有汇编语言的基础知识吗?

第一个表似乎具有内存地址/寄存器及其初始值。

如果我们看一下第一条指令,似乎它从rcx寄存器中取值并将其写入rax寄存器所指向的内存地址中。

所以首先您可能会问自己,rax的值是什么,现在该值假定是我要写入rcx寄存器中的值的内存地址。

每当用()(%rax)引用一个寄存器时,这意味着该寄存器的值应被视为一个内存地址,而起作用的值就是该内存地址中的值(也称为取消引用)。