【问题标题】:db, mov, string literalsdb、mov、字符串字面量
【发布时间】:2015-03-31 02:26:12
【问题描述】:

message: 中的以下指令是否正确?具体来说,因为“Hello, World”一共是12字节,但是右边的操作数有“10”。

我想知道这是否是一个错误。如果不是,为什么将 10 指定为正确的操作数?我从这里得到这个代码:(http://cs.lmu.edu/~ray/notes/x86assembly/)

另外,mov rdx,13 为什么指定 13 个字节而不是message 的实际大小?

    global _start

    section .text
_start:
    ; write(1, message, 13)
    mov     rax, 1            ; system call write is 1
    mov     rdi, 1            ; 1 is stdout
    mov     rsi, message      ; address of string
    mov     rdx, 13           ; number of bytes
    syscall           ; invoke operating system call

    ; exit(0)
    mov eax, 60       ; system call 60 is exit
    xor rdi, rdi      ; exit code 0
    syscall           ; invoke exit
message:
    db  "Hello, World", 10

【问题讨论】:

    标签: assembly nasm


    【解决方案1】:

    如果不是,为什么要指定 10 作为右操作数?

    10 是字符串后面的换行符。 ASCII 中的 10 是 LF(换行符),它是 Unix/Linux 系统上的换行符。 On other systems it's different.

    为什么它指定 13 个字节而不是消息的实际大小?

    13 字节是消息的大小(12 字节)加上换行符(1 字节)

    【讨论】:

      猜你喜欢
      • 2014-11-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-05-21
      • 2016-05-27
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多