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のみを印刷したいと思います。上記のコードは、@ ShmilTheCatのヒントを使用しています。そしてそれはセグメンテーション違反を引き起こします。どうすればこれを解決できますか?

前もって感謝します。

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

文字を期待する関数を呼び出すには、単語全体をプッシュします。関数は最下位バイトを使用します。

于 2013-03-15T11:16:10.770 に答える