2015-08-10 4 views
0

Я изучаю язык ассемблера и не могу решить проблему самостоятельно.Дополнительная инструкция по добавлению

Предположим следующие значения сохраняются по указанным адресам памяти и регистров:

enter image description here

Теперь мы имеем команду:

ADDL %ecx, (%eax).

Для меня это среднее значение результата сохранения значений, хранящихся в% ecx, со значением, хранящимся в адресе памяти (% eax), в адресе памяти (%eax).

Правильный ответ для этого упражнения: Значение 0x100 и адрес назначения 0x100.

Я понимаю, что правый операнд - это адрес назначения, но как мы получили значение 0x100 при расчете %ecx + (%eax)?

+0

Эта инструкция выглядит как инструкция Intel с синтаксисом AT & T (это помогло бы определить, что в вопросе, потому что в противном случае операнды обратные!). Это означает, что 0x01 (значение ecx) добавляется к 0xFF, уже присутствующему по адресу 0x100. В чем проблема? – Damon

+0

@ Дамон, я все понимаю сейчас, спасибо! Моя проблема заключалась в том, что я пытался добавить 0x100 + 0x1 –

ответ

0

Во-первых, я ненавижу AT & T синтаксис, который есть у вас здесь ... это в стороне.

EAX содержит 0x100. 0x100 имеет значение 0xFF.

ECX содержит 0x1.

0x1 + 0xFF = 0x100. Все идет нормально.

Окончательный результат затем помещается в адрес, на который указывает EAX. Поэтому (0X100) == 0x100

Я думаю, что вы были в основном там.