2014-12-15 6 views
-4

어셈블리에서 짧은 프로그램을 작성해야하지만 내 버전이 작동하지 않습니다. ASCII char을 출력하고, 그 다음에 atoi 함수로 정수 값으로 변경하고이 값을 출력한다. 중요한 것은 C : puts() 및 atoi()의 절차를 사용하는 것입니다.어셈블리에서 C의 절차

내가 뭘 잘못하고 있니? 분명히 설명해주십시오. gcc를 사용 중이고 intel_syntax 어셈블리에 쓰고 있습니다.

.intel_syntax noprefix 
    .text 
    .globl main 

main: 

    mov eax, offset msg 
    push eax 
    call puts 
    pop eax 

    push eax 
    call atoi 
    pop eax 

    push eax 
    call puts 
    pop eax 

    .data 
msg: 
    .asciz "a" 

atoi이 맥락에서 이해되지 않는다 사용하여 미리

+1

질문은 올바른 아키텍처를 태그해야한다. 또한, 어디서 붙어 있니? 여기에 쓰여 있듯이, 이것은 질문이 아닙니다. – ComputerDruid

+0

자세한 정보를 제공하십시오. 문제가 무엇입니까? 어떤 컴파일러/어셈블러를 사용하고 있습니까? 건축이란 무엇입니까? 어떤 OS를 사용하고 있습니까? 귀하의 문제에 따라, 그것은 많이 바뀔 수 있습니다. 추측은 피곤할 수 있습니다 ... – ElderBug

+0

나는 내 질문을 정정합니다. 나는 미안하지만 나는 회의에서 초보자입니다. –

답변

0

에 감사 :

그것은 내 코드입니다. 당신이 그것을 사용하기로되어 있습니까?

당신이 대신 printf 또는 비표준 itoa을 사용할 수 있습니다 (a에 대한 97 인) 대신 아스키 코드를 인쇄 할 가정.

한편, 반환 값은 atoi에서 pop eax으로 파괴됩니다. 또한 main 끝에 ret이 누락되었습니다. printf를 사용

샘플 코드는이 같은

main: 
    push offset msg 
    call puts 
    pop eax 

    movzx eax, byte ptr [msg] 
    push eax 
    push offset fmt 
    call printf 
    add esp, 8 # clean up stack 

    xor eax, eax # zero return value 
    ret   # return 
.data 
msg: 
    .asciz "a" 
fmt: 
    .asciz "%d\n" 
+0

예. atoi를 사용하고 puts 만 사용하도록되어있다. 내 작업의 다음 부분은 char '5'를 정수로 변환하고이어서 산술 연산을 수행하기 때문입니다. –