2

我读了关于汇编语言的书,关于指令的一章。我了解指令 mov 正在做什么,但我不明白如何检查并查看结果。我写了一个hello world。

.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"

但为什么它不起作用。如何查看内存和寄存器中的值?

操作系统:Linux(debian)。英特尔 64 位

4

1 回答 1

1

您需要一个地址rsi而不是一个值。这就是为什么它适用于

mov  $message, %rsi

但不与

mov $0x1, %rsi

如果要打印数字,首先需要一个例程将数字转换为 ASCII 字符串(基本上需要编写一个简单版本的printf)。

于 2013-03-23T15:07:51.990 回答