2013-10-08 2 views
1

Это простой вопрос, но я новичок в ассемблере. Может ли кто-нибудь ответить на них? Благодарю.нужна помощь на следующем языке ассемблера

A BYTE 0Ah,20,10,40 

B WORD 30,40,50,0Bh 

D DWORD A00,200,300,400,500,600 

а) Какая команда одна линия для перемещения A[2] в к EAX регистр

б) Что такое [A+2]?

c) Что такое [B+2]?

d) Что такое [D+4]?

e) Что такое [D-10]?

Ответы:

a) mov eax, A[2] 

b) [A+2] is third array position that is 10. 

c) [B+2] is zero 

d) [D+4] is 200 

e) [D-10] is byte 40 
+0

есть вопрос? у вас есть ответы уже там – Einacio

+0

Ответы для A, C и E выглядят некорректно для меня. Пожалуйста, объясните свои рассуждения. – Michael

+0

Первая часть - вопрос. Я сомневаюсь в моем ответе. Они правильные? – ngoche

ответ

1

а)A[2] ничего, кроме байта информации, и как таковой, вы должны переместить его в байт длиной регистра. Вы можете переместить его в младший байт регистра EAX, написание MOV AL, [A+2]. (*) Проверьте конфигурацию регистра EAXhere. Итак, что будет делать ваш код вместо этого? Ну, он предназначен для перемещения 4 байтов, начиная с [A+2] в регистре EAX, потому что 4 байта - это размер EAX.

c) Это зависит от размера файла Endianess. На большинстве ПК ваш ответ был бы неправильным, так как данные хранятся как 30 00, 40 00, ...., то есть самый старший бит находится справа (этот способ хранения данных - это то, что называется способом little-endian), но вы бы если ваша архитектура ЦП реализована по-крупному.

e) Если вы объявляете сегмент данных точным способом опубликования, то у вас будет [D-10] = [A+2] = 10. Причина в том, что данные в B заполняют 8 байт памяти, [A+3] - это девятый и [A+2] десятый байт, идущий назад.

(*) Обратите внимание, что, как сообщает Майкл в комментариях ниже, вы можете использовать movsx или movzx инструкции.

MOVSX EAX, [A+2] переместит [A+2] байт в EAX двойное слово, расширяющее знак числа.

MOVZX EAX, [A+2] будет перемещать [A+2] байт в EAX двойное слово, помещая все 0 в оставшиеся 24 бит.

Другие ответы для меня верны.

+2

a) начиная с 80386 есть 'movsx' и' movzx'. – Michael

+0

спасибо за это! Я отредактировал вопрос соответственно :) – doplumi

+0

чем вы очень много помогли. – ngoche

Смежные вопросы