Я запутался по этому поводу арифметические операторы - PullRequest
0 голосов
/ 22 сентября 2019

Я пытался выполнить эту арифметическую операцию в сборке, но каждый раз получал неправильный ответ, не уверен, как именно я должен это делать

Эти вопросы из учебника, и я делаюесть ответы, но я пытаюсь понять, как получить этот ответ

Ссылка содержит изображение с вопросом и мою работу, как показано ниже

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 голосов
/ 22 сентября 2019

У вас есть базовые знания языка ассемблера?

В первой таблице отображаются адреса / регистры памяти и их начальные значения.

Если мы посмотрим на первую инструкцию, кажется, что он берет значение из регистра rcx и записывает его в адрес памяти, указанный регистром rax.

, поэтому сначала вы можете спросить себя, каково значение rax,теперь это значение должно быть адресом памяти, где я предполагаю записать значение, которое находится в регистре rcx.

всякий раз, когда на регистр ссылается (), то есть (%rax), это означает, что значение регистрадолжен восприниматься как адрес памяти, а действующее значение - это значение в этом адресе памяти (также называемое разыменованием).

...