а)A[2]
ничего, кроме байта информации, и как таковой, вы должны переместить его в байт длиной регистра. Вы можете переместить его в младший байт регистра EAX
, написание MOV AL, [A+2]
. (*) Проверьте конфигурацию регистра EAX
here. Итак, что будет делать ваш код вместо этого? Ну, он предназначен для перемещения 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 бит.
Другие ответы для меня верны.
есть вопрос? у вас есть ответы уже там – Einacio
Ответы для A, C и E выглядят некорректно для меня. Пожалуйста, объясните свои рассуждения. – Michael
Первая часть - вопрос. Я сомневаюсь в моем ответе. Они правильные? – ngoche