【问题标题】:write message to screen in AT&T assembly在 AT&T 程序集中将消息写入屏幕
【发布时间】:2009-11-05 16:22:42
【问题描述】:

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

; ---------------------------------------------------------
; 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

但这是 Intel 汇编格式。当我尝试转换为 AT&T 时,操作码本身很容易翻转,但我不知道如何声明消息。

因为它是我不能使用该行

msg db "my string",0

因为那是英特尔。但如果我尝试将其转换为类似格式的 AT&T 代码,例如

msg .byte "test"

我无法组装它。我试过用 linux "as" 和 "nasm" 组装

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

【问题讨论】:

    标签: assembly


    【解决方案1】:

    试试:

    msg: .asciz "test"
    

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

    【讨论】:

      【解决方案2】:

      您使用的是哪个版本的 nasm?在我的带有 nasm 2.03.01 的 linux 机器上,你的示例(带有 'msg db "my string", 0')组装得很好。

      另外,根据 nasm 文档,“db”似乎是正确的用法。

      【讨论】:

        猜你喜欢
        • 2021-03-05
        • 1970-01-01
        • 2011-04-09
        • 2017-10-23
        • 1970-01-01
        • 2019-04-04
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多