在我学习NASM的过程中,我试图创建一个非常简单的程序来进行除法并输出结果。
通过书籍,一切都应该运行良好。我将15除以3,它应该自动存储在AX寄存器中,然后我转移到ecx输出。
然而,当我尝试编译时,我收到了错误
nums.asm:6: error: invalid combination of opcode and operands
nums.asm:7: error: invalid combination of opcode and operands
有人知道第6和第7行有什么问题吗?
这是我的代码:
segment .text
global main
main:
div 3, 15
mov ecx, ax
mov ebx,1 ; arg1, where to write, screen
mov eax,4 ; write sysout command to int 80 hex
int 0x80 ; interrupt 80 hex, call kernel
exit: mov eax, 1
xor ebx, ebx
int 0x80
答案 0 :(得分:12)
我经常看到这种形式:div 3, 15
这不是任何有效的INTEL mneumonic!
将15除以3:
xor edx, edx
mov eax, 15
mov ecx, 3
div ecx
对于第二个错误,您不能将16位寄存器移动到32位寄存器中。您需要使用以下之一:
xor ecx, ecx
mov cx, ax
或者:
movzx ecx, ax