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

问题描述 投票:0回答:1

我正在尝试从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或者如果我发送参数“5 + 28”,如'./rpn“5 + 28 “'输出应为”5 + 28“

我正在使用gcc编译器。

linux gcc assembly
1个回答
1
投票

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

为了解决这个问题,在primerCaso中,放入:

pop ebp 
mov ebp, [ebp+4]
push ebp 
call printf
© www.soinside.com 2019 - 2024. All rights reserved.