2014-04-29 5 views
0

sprintf와 비슷한 기능을 쓰려고합니다. 나는 결과 문자열 (인자 % d)에 정수를 출력하기로되어 있습니다. 내 전략은 수를 10으로 나누고 나머지를 48 (ascii 오프셋) 추가 한 다음 스택에 밀어 넣고 지수가 0이 될 때까지 늘립니다. 그런 다음 스택에서 각 숫자를 팝하여 결과 문자열. 이것은 내 현재 코드 : %의 EDX가 (%의 ECX 그래서 제발 돈, 두 번째 매개 변수 문자열에 인덱스를 계산하기위한 목적으로 예약 된 '결과 문자열에서 문자 인덱스를 계산하는 데 사용됩니다어셈블리에서 부호없는 char *에 int를 쓰는 것

addint: 

    movl  $0,%edx 
    movl  $10,%ebx 
    div   %edi 

    addl  $48,%edx 

    pushl  %edx 
    incl  %esi 

    cmpl  $0,%eax 
    jz   addintprint 
    jmp   addint 


addintprint: 

    movl  tmpedx,%edx 
    incl  %ecx 
    jmp   addintfinish 


addintfinish: 

    cmpl  $0,%esi 
    jz   mainloop 

    decl  %esi 

    popl  %ebx 

    movl  addr,%eax 
    leal  (%edx,%eax,1),%eax 
    movb  %bl,(%eax) 

    incl  %edx 

    jmp   addintfinish 

필요한 경우가 아니면 사용), addr은 결과 문자열의 주소입니다.

지금 나는 어리석은 출력 (아스키 테이블의 L과 다른 임의성과 같은 글자에 두 배의 인수에서부터)에 이른다. 나는 올바른 방향으로 가고 있다고 생각하지만 현재 코드에서는 뭔가 잘못되었습니다. 어떤 도움이라도 대단히 감사합니다.

미리 감사드립니다.

답변

1

에 10을로드하고 나눗셈에서 edi을 사용합니다. 다른 문제가있을 수도 있습니다. 디버거를 사용하여 코드를 단계별로 실행하고 자신이 잘못되어가는 부분을 확인하십시오.