Что не так с INT% ebx? - PullRequest
       10

Что не так с INT% ebx?

3 голосов
/ 12 января 2012

I этот код сборки:

INT %ebx

GCC выдает ошибку при попытке собрать его:

INT ERROR:mismatch operand type for 'int'.

Означает ли это, что операнд инструкции INT долженбыть константой вроде INT $0X80?

Ответы [ 2 ]

6 голосов
/ 12 января 2012

Ваше предположение верно, операнд INT должен быть константой. Согласно NASM x86 ссылка :

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-битное непосредственное значение, и ни один из вариантов прерываний фактически не принимает регистр.

4 голосов
/ 12 января 2012

Да. Если вы посмотрите на Руководство по разработке программного обеспечения Intel, том 2A Справочник по наборам инструкций, 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.

Вот и все - ни один из них не принимает параметры регистра.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...