0

さて、文字列を逆方向に印刷する必要があります。ebxが文字列配列の先頭へのポインタである場合、文字列の2番目の文字である配列の次のバイトに移動するために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を増やす必要があることに気付きました。

4

1 に答える 1

1

2 番目の文字に移動するために 1 つ追加できます。ただし、文字を逆方向に処理するには、次のようにします。

  • 文字列の終わりを見つける
  • 文字を加工する
  • 1文字バックアップする
  • バッファの前でない場合は、2 番目のステップに進みます。
于 2012-11-14T00:40:14.317 に答える