2012-11-14 2 views
0

좋아, 그래서 문자열을 뒤로 인쇄해야합니다. 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을 늘려야한다는 것을 깨달았습니다.

+0

메모 또는 귀하의 메모가 잘못되었습니다. –

+0

저는 ascii가 문자 당 1 바이트이기 때문에 생각했던 교수님이 틀렸다고 생각합니다. –

답변

1

두 번째 문자로 이동하려면 하나를 더하십시오. 그러나 거꾸로 문자를 처리하기 위해, 당신은 것입니다 :

  • 문자열
  • 과정
  • 다시 한 문자가 버퍼 전에없는 경우
  • 까지 문자의 끝을 찾아 두 번째로 이동 단계
+0

나는 그것을 고쳤다. 나는 앞으로를 통해 일할 수 있도록 문자를 호출하는 재귀를 사용하려고합니다. 원본 게시물을 확인하고 편집 해 보겠습니다. –

관련 문제