Assembly Nasm错误:操作码和操作数的组合无效
在我学习NASM的过程中,我试图创建一个非常简单的程序,进行除法并输出结果 按规定,一切都会好起来的。我将15除以3,它应该自动存储在AX寄存器中,然后移到ecx进行输出 然而,当我试图编译时,我得到了错误Assembly Nasm错误:操作码和操作数的组合无效,assembly,x86,nasm,cpu-registers,integer-division,Assembly,X86,Nasm,Cpu Registers,Integer Division,在我学习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行有什么问题吗 这是我
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
我经常看到这样的表单:
div3,15
这不是任何有效的INTEL mneumonic
将15除以3:
xor edx, edx
mov eax, 15
mov ecx, 3
div ecx
对于第二个错误,不能将16位寄存器移动到32位寄存器中。您需要使用以下选项之一:
xor ecx, ecx
mov cx, ax
或:
你能把32位寄存器移到16位吗?你能把1加仑的水放在1/2加仑的水罐里吗?有些。。。这就是我在挠头思考为什么不能将16位寄存器放入32位寄存器时使用的逻辑
movzx ecx, ax