2

命令に関する章であるアセンブリ言語に関する本を読みました。指示の mov を実行していることは理解できますが、結果を確認して表示する方法がわかりません。こんにちは世界を書きました。

.global _start
.data
some_var:
    .long 0x000721
.text
_start:
mov  $1, %rax         # system call 1 is write
mov  $1, %rdi         # file handle 1 is stdout
#  mov  $message, %rsi  # address of string to output
mov $0x1, %rsi
mov  $2, %rdx # number of bytes
syscall               # invoke operating system to do the write
                    # exit(0)
mov  $60, %rax        # system call 60 is exit
xor  %rdi, %rdi       # we want return code 0
syscall               # invoke operating system to exit
message:
.ascii  "Hello, Universe)\n"

しかし、なぜそれが機能しないのですか。メモリとレジスタの値を確認するにはどうすればよいですか?

os: Linux (デビアン). インテル 64 ビット

4

1 に答える 1

1

値ではなく、のアドレスが必要rsiです。それがで動作する理由です

mov  $message, %rsi

しかし、ではありません

mov $0x1, %rsi

数値を出力する場合は、最初に数値をASCII文字列に変換するルーチンが必要です(基本的には、の単純なバージョンを作成する必要がありますprintf)。

于 2013-03-23T15:07:51.990 に答える