【发布时间】:2016-06-30 01:35:32
【问题描述】:
我有一个包含以下代码的汇编文件:
global _start
_start:
mov eax, -2
imul eax, c
mov ebx, eax
mov eax, 82
imul eax, d
sub ebx, eax
div 4
mov eax, 1
mov ebx, 0
int 0x80
section .data
a: db 10
c: db 3
d: db 2
我编译它:
nasm -f elf c1.asm
我收到一个错误:
c1.asm:15: 错误:操作码和操作数的组合无效
我的代码有什么问题,我该如何解决?
【问题讨论】:
-
第 15 行看起来像
div 4,并且根据指令集引用 DIV 不采用立即操作数。它需要一个内存操作数或一个寄存器。 -
要进行无符号整数除以 4,您根本不需要
div。只需向右逻辑移位 2 位:shr eax,2 -
下次您询问特定行的错误时,如何在源代码中向我们提供行号。或放置注释以识别该行。
标签: linux ubuntu assembly x86 nasm