x86程序集(GAS语法)打印没有.data的字符

时间:2017-09-14 20:09:03

标签: assembly x86-64 gas

我正在尝试用汇编语言打印出一个字符。程序编译并运行时没有错误,但它不会打印任何内容到stdout

代码

.section .text
 .global _start

_start:

  # push char
  push $0x41 # letter "A"

  # print char
  mov $1, %rdx # arg 3: length
  mov %rsp, %rcx # arg 2: src
  mov $1, %rbx # arg 1: file handle (stdout)
  mov $4, %rax # sys_write
  int $0x80 # call kernal

  # sys exit
  mov $1, %rax
  mov $0, %rbx
  int $0x80

如果我将%rsp替换为$letter并包含以下内容:

.section .data
  letter: .byte 0x41

然后代码按预期工作。但我想使用堆栈,因为我计划扩展此程序以从堆栈中打印可变长度(以null结尾)的字符串,而不是来自.data的设置字符串。

我最终希望能够简单地回显用户对stdout的输入,并且推送到堆栈似乎是最好的方式,但我还不能让这一点工作,所以我想知道这是什么我做错了。

0 个答案:

没有答案