【发布时间】: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