2010-05-28 35 views
2

我試圖將我的簡單程序從Intel語法轉換爲AT & T(用GAS進行編譯)。我已經成功地轉換了我的應用程序的一大部分,但我仍然遇到了int(中斷)的錯誤。我的功能是這樣的:GAS上的中斷

printf: 
    mov $0x0e, %ah 
    mov $0x07, %bl 

    nextchar: 
     lodsb 
     or %al, %al 
     jz return 
     int 10 
     jmp nextchar 

    return: 
     ret 

msg db "Welcome To Track!", 0Ah 

但是,當我編譯它,我得到這個:

hello.S: Assembler messages:
hello.S:13: Error: operand size mismatch for int'
hello.S:19: Error: no such instruction:
msg db "Hello, World!",0Ah'

我需要做什麼?

+0

在我的孩子閱讀標題的方式,你可能沒有打算:) – 2010-05-28 17:44:18

回答

6

GAS中,常數需要$。更改該行:

int $10 

和您的郵件應該是:

msg: .byte "Welcome to Track!", 0x0a 

甚至更​​好:

msg: .asciiz "Welcome to Track!\n" 
+0

現在我得到的是這樣的:'hello.S:19:錯誤:不好的表達 - hello.S:19:錯誤:垃圾在行尾,第一個無法識別的字符是H' – 2010-05-28 18:21:29

+0

@Nathan,你沒有寫我放下的東西然後。你在該行的末尾留下了'h'。 'h'不是十六進制數字,所以它試圖解析它。 – 2010-05-28 18:25:56

+0

@Carl:當然我知道了,它是這樣的:'msg:.byte'歡迎來到Track!「,0x0A',但我得到了那個錯誤! **:(** – 2010-05-28 18:29:02

0

另外,如果32位編譯器,你可能需要」 .code16" 之前中斷和「。code32」後...