나는 다음과 같은 프로그램을 컴파일하려고 : 그래서,잘못된 명령 접미사
demo.s: Assembler messages:
demo.s:7: Error: invalid instruction suffix for `mov'
:이 오류 메시지가
.globl _start
.section .text
_start: movw $-23, %ax
movl $-1, %ebx # -1 = $0xffffffff
movw %ax, %ebx
movl $1, %eax
movl $0, %ebx
int $0x80
을
movw %ax, %ebx
을하지만 것은 내가 일을 완전히 잘못하고있는 무슨을 생각하지 않는 것이 플러스 그 일에 사용되는 예제 다음 proglem의 뿌리는 여기있다 전자 서 나는 현재 읽고있다 : 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' - 그게 책에 나온 것과 정확히 같습니다. –
그 책에 대한 에라타 (Errata) 섹션에서 판단 할 때, 나는 그 책의 출처에 대해 약간 조심 스러울 것입니다. 단지 설명이 끝나면 디버거에서 예상대로 정확하게 작동하는 책없이 자신 만의 소스를 작성할 수 있습니다 (모든 레지스터, 메모리 및 플래그 변경에주의하십시오).기본적으로 ASM 개발자를위한 표준 책은 하나뿐입니다. 지침 참조 가이드. 그 밖의 모든 것은 자전거의 도우미 바퀴와 같으며 일정 수준 이상이 될 때까지 매우 도움이됩니다. 그러면 부담입니다. 다음 유용한 ASM 서적은 대상 플랫폼의 세부 아키텍처 또는 수학 이론 서적입니다. – Ped7g