Когда я пытаюсь собрать следующую программу:недействительный суффикс инструкции для `мов» (MOVW% ай% EBX)
.globl _start
.section .text
_start: movw $-23, %ax
movl $-1, %ebx # -1 = $0xffffffff
movw %ax, %ebx
movl $1, %eax
movl $0, %ebx
int $0x80
Я получаю сообщение об ошибке:
demo.s: Assembler messages:
demo.s:7: Error: invalid instruction suffix for `mov'
Таким образом, корень proglem лежит здесь:
movw %ax, %ebx
Но дело в том, что я не думаю, что я делаю это совершенно неправильно, плюс это пример, используемый в го e book Я сейчас читаю: Professional Assembly Language by Richard Blum (2005)
'movw% ax,% ebx' не имеет смысла. Это «переместить ** 16 бит ** регистр AX в ** 32 бит ** регистр EBX». Как бы Вы это сделали? Нулевое расширение ('movzwl% ax,% ebx')? Расширение знака ('movswl% ax,% ebx')? Вы уверены, что автор не намеревался «movw% ax,% bx'? Я не могу сказать из использования в источнике. –
'movw% ax,% ebx' - это точно так, как оно представлено в книге. –
Судя по разделу «Исправление» для этой книги, я бы немного осторожно относился к источникам. Просто убедитесь, что для каждой объясняемой вещи вы можете написать свой собственный источник без книги, который работает в отладчике точно так, как ожидалось (следите за изменениями всех регистров, памяти и флагов).И в основном есть только одна каноническая книга для разработчиков ASM. Справочное руководство по инструкциям. Все остальное походит на вспомогательные колеса на велосипеде, чрезвычайно полезно, пока вы не перейдете на определенный уровень, тогда это бремя. Следующая полезная книга ASM - это либо подробная архитектура целевой платформы, либо книги математической теории. – Ped7g