У меня есть старый код сборки в 16 бит, и я хочу «перевести» его в новый 32-разрядный код для NASM.Сборка: определение слова в 32 бит (Intel + NASM)
В старом 16 битном коде слова определяются как:
dseg segment para public 'data'
i word ?
j word ?
Теперь я хотел бы определить «я» & «J» в новом 32 битном коде.
SECTION .data
Это, как я определяю .data раздел, и я верю, что это правильный путь, но я хотел бы получить некоторую помощь со словом вещи.
'1' - значение определенного слова. Расположение назначается ему ассемблером + компоновщик + загрузчик ОС. 'j' - это метка, указывающая на первый байт словаря' 2'. Не уверен, что означает «переменная», не имеет смысла в nasm. Также продолжайте использовать двоеточия даже для этих меток перед данными, например 'j: dw 2'. Это не позволит вам ударить некоторые двусмысленные ошибки синтаксического анализа, например, сделать «цикл db 1» («loop» - инструкция x86, запутанная nasm. «Loop: db 1' будет правильно скомпилирована как метка) – Ped7g
@ Ped7g Спасибо за информацию, я отредактирую ответ. Обязательно используйте эти советы в коде. –
Использование имен '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' ''' '' '' так же плохой стиль, Кроме того, в зависимости от того, как вы переносите этот код из 16-разрядного, вы можете определить 32-разрядные значения DWORD (с 'dd'), чтобы вы могли хранить 32-битный регистр там. Если вы знаете, что ваши значения по-прежнему будут соответствовать 16 бит, вы можете использовать 16-разрядные магазины и ноль или увеличивать знаковые нагрузки, такие как «movzx eax», [i] ' –