Результат сохранения значения больше 8 бит в 8-битном регистре - PullRequest
0 голосов
/ 04 июля 2019

Я хотел бы знать, что происходит, когда вы пытаетесь сохранить слишком большое значение для 8-битного регистра в 8-битном регистре.

Что происходит с старшими 8 битами?Эти данные потеряны или, например, они переместились в bx?Инструкция MOV заботится, или она просто сохранит 00ffh в al?

Пример:

xor bl,bl
add bl,0fffh
mov al,bl

1 Ответ

2 голосов
/ 05 июля 2019

Усечение до add bl, 0xff происходит во время сборки. (Или вы получаете ошибку во время сборки, если используете NASM -Werror=number-overflow или -Werror)

x86 Машинный код имеетнет кодировок с непосредственными значениями шире размера операнда;это было бы излишним и пустой тратой пространства.например, add r/m8, imm16 не существует, только imm8.См. https://www.felixcloutier.com/x86/add для доступных кодировок.

Если вы хотите думать о нем как о расширении знака до 32-битного, а затем обрезании до ширины назначения, это хорошо, потому что это не меняетрезультат.Но такая умственная гимнастика, вероятно, не помогает.

Размер операнда инструкции установлен в 8 битов регистром назначения, являющимся 8-битным регистром в источнике asm.Таким образом, ассемблер выберет 8-битный код операции add.Таким образом, когда ЦП декодирует его, размер операнда задается кодом операции, а не непосредственными данными или результатом добавления.

Заботится ли инструкция mov или она просто сохранит 00ffhв результате?

Я вижу, как вы представляете, что add может расширяться и влиять на ЧД, но я не понимаю, как это может любой смысл.

Это отдельная инструкция.

Это язык ассемблера;каждая инструкция собирается отдельно и (логически) выполняется отдельно в программном порядке, что оказывает указанное влияние на архитектурное состояние машины.

(Реальные процессоры x86 выполняют параллельное / неупорядоченное выполнение, но отслеживаютвсего, чтобы поддерживать иллюзию, что инструкции выполняются по порядку по одному. Это аппаратный эквивалент правила C / C ++ «как будто».)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...