在AT& T组件中将消息写入屏幕

时间:2009-11-05 16:22:42

标签: assembly

我正在尝试编写自己的引导加载程序,而且我在写入屏幕时遇到问题。我找到了使用中断的例子:

; ---------------------------------------------------------
; Main program
; ---------------------------------------------------------

        mov si, msg             ; Print message
        call putstr

hang:   jmp hang                ; Hang!



; ---------------------------------------------------------
; Functions and variables used by our bootstrap
; ----------------------------------------------------------

msg     db 'Hello Cyberspace!', 0

; Print a 0-terminated string on the screen
putstr:
        lodsb                   ; AL = [DS:SI]
        or al,al                ; Set zero flag if al=0
        jz .done                ; Jump to .done if zero flag is set
        mov ah,0x0E             ; Video function 0Eh
        mov bx,0x0007           ; Color
        int 0x10
        jmp putstr              ; Load characters until AL=0
.done:
        retn

然而,这是英特尔汇编格式。当我试图转换为AT& T时,自己的操作码很容易翻转,但我无法弄清楚如何声明信息。

因为它是我不能使用行

msg db "my string",0
那是英特尔。但是,如果我尝试将其转换为类似于AT& T的代码,例如

msg .byte "test"

我无法组装它。我尝试用linux“as”和“nasm”组装

有谁知道我如何在AT& T格式汇编中声明一个字符串?

2 个答案:

答案 0 :(得分:1)

尝试:

msg: .asciz "test"

还有.ascii,因为没有空终止符。

答案 1 :(得分:0)

您使用的是什么版本的nasm?在我的带有nasm 2.03.01的linux机器上你的例子(带有'msg db'我的字符串“,0')组装得很好。

另外,根据nasm doc,似乎'db'是正确的用法。