Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/assembly/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Assembly I';我对这个算术运算符感到困惑_Assembly_X86_Att - Fatal编程技术网

Assembly I';我对这个算术运算符感到困惑

Assembly I';我对这个算术运算符感到困惑,assembly,x86,att,Assembly,X86,Att,我试着在汇编中做这个算术运算,但每次我都得到了错误的答案,我不知道该怎么做 这些问题来自教科书,我确实有答案,但我试图理解如何得到答案 你有汇编语言的基本知识吗 第一个表似乎包含内存地址/寄存器及其初始值 如果我们查看第一条指令,它似乎从rcx寄存器中获取值,并将其写入rax寄存器所指向的内存地址 首先你可能会问自己,rax的值是多少,现在这个值假设是一个内存地址,我想在这里写入rcx寄存器中的值 每当寄存器被()引用时,即(%rax),这意味着寄存器的值应作为内存地址,而作用的值是该内存地址

我试着在汇编中做这个算术运算,但每次我都得到了错误的答案,我不知道该怎么做

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


你有汇编语言的基本知识吗

第一个表似乎包含内存地址/寄存器及其初始值

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

首先你可能会问自己,
rax
的值是多少,现在这个值假设是一个内存地址,我想在这里写入
rcx
寄存器中的值


每当寄存器被
()
引用时,即
(%rax)
,这意味着寄存器的值应作为内存地址,而作用的值是该内存地址中的值(也称为解引用)。

这是AT&T语法,因此源操作数是第一个。是,我明白这一点,但我对之后的步骤有点困惑。我们是否将0xFF与rcx值相加,即0x1。如果是,那么这就是我正在做的1111111->0xFF 0000 0001->%rcx 10000->结果?@1201程序,天哪,你是对的:O,编辑将rcx=0x1写入reg rax指向的内存地址,即0x100,那么现在0x100的val是0x1,那么现在当它问我addq操作的值时,我是写0x1还是写内存地址?我在上面所做的,是你想要我做的吗?
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           ?