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 ?