1

很抱歉打扰我的导师。最近几天我发布了一些问题。他们已经伸出手来帮助我。通过在 x86 机器上的 Ubuntu11.04 中通过 NASM 工作,最近我发现了另一个工作混乱。它是“我如何打印 8 位值”?假设我的代码片段如下所示:

    section .data
         var db "string"
    section .text
         global main
    main:
         nop
         xor ebx,ebx

         mov dl,byte[var+ebx]
         mov al, dl  ; setting to AL the ASCII character to write
         mov bh, 0   ; setting the page number to 0 (all in the same page)
         mov bl, 7   ; setting to bl the foreground pixel color
         mov ah, 0xE ; INT10 E sub mode --> Write Text in Teletype Mode
         int 10      ; "calling" to the interrupt.

         nop

现在,我只想打印 dl。上面的代码使用了@Shmil The Cat 的提示。它会引发分段错误。我们如何解决这个问题?

先感谢您。

4

1 回答 1

1

在 linux 上,您可以使用 putchar:

        global main
        extern putchar

        section .data
        var db "string"

        section .text
main:
         mov ebx, 0  ; index
         mov dl, [var + ebx]
         push edx
         call putchar
         add esp, 4
         ret

要调用一个需要 char 的函数,您需要推送一个完整的单词。该函数将使用最低有效字节。

于 2013-03-15T11:16:10.770 回答