2014-11-04 89 views
1

我試圖把參數(這將總是是一個單一的數字),它從一個字符串轉換爲 一個int,並打印出來在屏幕上。傳遞參數,並打印出來

當我運行我的程序與

./test 3 

我得到一個非常大的負值...

這是我有:

SECTION .data 
str1: db "argument = %d",0,10 

SECTION .text 
global main 
extern printf 

main: 
    enter 0,0 
    pusha 

    mov eax, dword [ebp+12] 
    add eax, 4     
    mov bl,[eax]    ; put the one bit into bl 

    sub ebx, '0'    ; subtract null terminating string to convert to int 

    push ebx 
    push str1 
    call printf    ; print the string 
    add esp, 8    

    popa 
    leave 
    ret 

回答

1
xor ebx, ebx    ; Clear ebx to zero, so the following operation will not have random values in the higher part of ebx 
mov bl,[eax]    ; put the one bit into bl 
sub ebx, '0'    ; subtract null terminating string to convert to int 
+0

我增加了行'xor ebx,ebx',但仍然沒有給我正確的答案 – jean 2014-11-04 14:06:47

+0

你沒有提到你在哪個操作系統上。在Windows中,您必須調用「GetCommandLine」。你爲什麼認爲它會在[ebp + 12]?您是否使用調試器來檢查您是否真正閱讀了正確的值? http://www.network54.com/Forum/632471/message/1307235592/Getting+command+line+arguments+using+the+Win32+API – Devolus 2014-11-04 15:23:09