我正在尝试使用 NASM 在 Q Emulator 中打印字符串。我的代码如下:
mov bx,HELLO
mov ah, 0x0e
int 0x10
HELLO:
db 'Hello', 0
jmp $
times 510-($-$$) db 0
dw 0xaa55
但是,当我编译这段代码时,我得到的输出是
UU
谁能告诉我为什么会这样?以及如何获取所需的字符串作为输出?
提前致谢。
好吧,这就是你问题的答案
为了加载字符串,您必须将其移至si(并不是真的想深入,但只是这样做)。接下来为了将字符加载到寄存器 AL 使用lodsb。接下来,我们必须打印它,所以使用int 10h mov ah, 0Eh。 Int 10h 处理视频,ah 告诉 BIOS 打印 al(又名 lodsb)中的任何内容。接下来,我们必须有一个结束加载字符,这样我们就不会永远循环。我个人使用0x00但是你使用 0。 0x00 在我的情况下要好得多,因为你不仅可以使用 0,0x00 不会打印任何内容,所以你为什么需要它呢?
好的,我们已经完成了所有工作,下面是代码:
mov si, message ;The message location *you can change this*
call print ;CALL tells the pc to jump back here when done
print:
mov ah, 0Eh ;Set function
.run:
lodsb ;Get the char
; cmp al, 0x00 ;I would use this but ya know u dont so use:
cmp al, 0 ;0 has a HEX code of 0x48 so its not 0x00
je .done ;Jump to done if ending code is found
int 10h ;Else print
jmp .run ; and jump back to .run
.done:
ret ;Return
message db 'Hello, world', 0 ;IF you use 0x00
;message db 'Hello, world', 0x00
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)