我正在尝试编写自己的引导加载程序,而且我在写入屏幕时遇到问题。我找到了使用中断的例子:
; ---------------------------------------------------------
; 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格式汇编中声明一个字符串?
答案 0 :(得分:1)
尝试:
msg: .asciz "test"
还有.ascii,因为没有空终止符。
答案 1 :(得分:0)
您使用的是什么版本的nasm?在我的带有nasm 2.03.01的linux机器上你的例子(带有'msg db'我的字符串“,0')组装得很好。
另外,根据nasm doc,似乎'db'是正确的用法。