如何movl $ 0x41,%ecx

时间:2012-07-17 01:21:04

标签: assembly x86 gas

我用Gnu管理'Hello World'了!

那么,接下来的事情是打印1到10对吗? (也许在红宝石中)

目前,我很乐意打印A紧随其后的B.这就是我所拥有的。

.section .text
  .globl _start

_start:
  # Print A
  movl  $4,%eax
  pushl $0x41
  movl  %esp,%ecx        # Would rather movl $0x41,%ecx
  movl  $1,%ebx
  movl  $1,%edx
  int   $0x80

  # Closely followed by B
  movl  $4,%eax
  incl  (%esp)           # Rather incl(%ecx) here
  movl  %esp,%ecx
  movl  $1,%ebx
  movl  $1,%edx
  int   $0x80

  movl  $1,%eax
  movl  $0,%ebx
  int   $0x80

它确实有效,但我的问题是,为什么我不能

  movl  $0x41,%ecx

首先,然后

  incl (%ecx)

过了一会儿?

1 个答案:

答案 0 :(得分:0)

对于sys_write,%ecx想要指向一个或多个字符驻留在内存中的位置,而不是“be”要打印的字符。 “incb”可能比“incl”更正确,因为你只增加一个字节 - “(%esp)”或“(%ecx)”应该起作用,因为它们指向同一个地方。请注意,您正在递增内存的“内容”,而不是指向内存的指针。

最佳, 弗兰克