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

2024-01-08

我正在尝试使用 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(使用前将#替换为@)

如何用汇编语言打印字符串 的相关文章

随机推荐