在装配中移动字符

时间:2012-11-14 00:21:46

标签: assembly

好的,所以我需要向后打印一个字符串。如果ebx是指向字符串数组开头的指针,为什么我不能只添加一个指向数组中的下一个字节,这是字符串中的第二个字符?

PROMPT:
.ascii "Enter the string to evaluate \0"
FMT_STR:
.ascii "%s\0"
FMT_INT:
.ascii "%d\0"
FMT_CHR:
.ascii "%c\0"

.globl _main
_main:
    pushl %ebp                # save old frame ptr
movl  %esp,%ebp           # set new frame ptr & save local var space

//create local variable space
subl $100,%esp

pushl $PROMPT
call _printf

leal -4(%ebp),%ebx

pushl %ebx
call _gets

call _rprint

leave
ret

_rprint:

pushl %ebp
movl %esp,%ebp

pushl -1(%ebx)
pushl $FMT_CHR
call _printf

leave
ret

编辑:我重读了我的笔记并意识到我需要增加8才能转到字符串中的下一个字符。

1 个答案:

答案 0 :(得分:1)

可以添加一个转到第二个字符。但要向后处理角色,你会:

  • 找到字符串的结尾
  • 处理角色
  • 备份一个字符
  • 如果它不在缓冲区之前,请转到第二步