gpt4 book ai didi

assembly - 如何用汇编语言打印字符串

转载 作者:行者123 更新时间:2023-12-03 17:05:36 25 4
gpt4 key购买 nike

我正在尝试使用 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 ;消息位置*你可以改变这个*
call print ;CALL 告诉电脑完成后跳回这里

打印:
mov ah, 0Eh ;设置函数

。跑:
lodsb ;获取字符
; cmp al, 0x00 ;我会用这个,但你知道你不这么用:
cmp al, 0 ;0 的十六进制代码为 0x48 所以它不是 0x00
je .done ;如果找到结束代码则跳转到done
int 10h ;否则打印
jmp .run ;并跳回 .run

。完毕:
ret ;返回

message db 'Hello, world', 0 ;如果你使用 0x00
;消息数据库'你好,世界',0x00

关于assembly - 如何用汇编语言打印字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40143596/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com