我这个汇编代码:
INT %ebx
GCC在尝试组装时给我一个错误:
INT ERROR:mismatch operand type for 'int'.
这是否意味着指令INT
的操作数必须是INT $0X80
之类的常量?
答案 0 :(得分:6)
您的假设是正确的,INT的操作数必须是常量。根据{{3}}:
A.81 INT: Software Interrupt
INT imm8 ; CD ib [8086]
A.82 INT3, INT1, ICEBP, INT01: Breakpoints
INT1 ; F1 [P6]
ICEBP ; F1 [P6]
INT01 ; F1 [P6]
INT3 ; CC [8086]
A.83 INTO: Interrupt if Overflow
INTO ; CE [8086]
所以INT
采用8位立即值,而非中断变量实际上需要一个寄存器。
答案 1 :(得分:4)
是。如果您查看Intel Software Developers Manual, Volume 2A Instruction Set Reference, A-M,INT
有三种变体:
Opcode Instruction Description
CC INT 3 Interrupt 3—trap to debugger.
CD ib INT imm8 Interrupt vector number specified by immediate byte.
CE INTO Interrupt 4—if overflow flag is 1.
就是这样 - 没有人接受寄存器参数。