INT%ebx出了什么问题?

时间:2012-01-12 01:42:31

标签: assembly x86

我这个汇编代码:

INT %ebx

GCC在尝试组装时给我一个错误:

INT ERROR:mismatch operand type for 'int'.

这是否意味着指令INT的操作数必须是INT $0X80之类的常量?

2 个答案:

答案 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-MINT有三种变体:

 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.

就是这样 - 没有人接受寄存器参数。