如何从控制台程序集中读取参数

时间:2019-04-29 15:15:00

标签: linux gcc assembly

我正在尝试从Assembly中的控制台读取参数,我已经读取了许多参数,但是无法读取下一行。

我试图做:

pop     ebp
mov     [opcion], ebp
push    opcion
call    printf

但是什么都不给我。 当我尝试时:

pop     ebp
mov     [opcion], ebp
mov     eax, opcion
call    print

它告诉我:�ĉ

这是我在其中读取参数数量并试图打印用户发送给程序的参数的代码。

SECTION     .bss
n1:     resb    255
opcion:         resb    255
SECTION     .text
global main
main:
    call    clear
    pop     ebp
    pop     ebp         ;Number of parameters
    mov     ecx, ebp
    cmp     ecx, 2
    jl  interseccionCasos
    je  primerCaso
    call    quit
primerCaso:
    pop     ebp
    mov     [opcion], ebp
    push    opcion
    call    printf
    call    quit
    ret

应用程序的名称为rpn,因此当我使用5作为参数(如“ ./rpn 2”)运行代码时,输​​出应为2,或者如果我发送诸如“ ./rpn”的参数“ 5 + 28” 5 + 28“'输出应为” 5 + 28“

我正在使用gcc编译器。

1 个答案:

答案 0 :(得分:1)

main的第二个参数是“ argv”,它是指向字符串的指针数组的地址。您正在使用第二个参数,就好像它本身是一个字符串一样。

要解决此问题,请在primerCaso中放入:

pop ebp 
mov ebp, [ebp+4]
push ebp 
call printf