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

Linux 如何从控制台程序集读取参数,linux,gcc,assembly,Linux,Gcc,Assembly,我正在尝试从汇编中的控制台读取参数,我已经读取了参数的数量,但无法读取下一行 我试着做: pop ebp mov [opcion], ebp push opcion call printf 但什么也不给我看。 当我尝试时: pop ebp mov [opcion], ebp mov eax, opcion call print 它告诉我:�ĉ� 这是我读取参数数量的代码,我试图打印用户发送给程序的参数 SECTION .bss

我正在尝试从汇编中的控制台读取参数,我已经读取了参数的数量,但无法读取下一行

我试着做:

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编译器。

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

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

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

注意,我不建议像printf格式那样直接使用参数。使用“%s\n”作为格式,并将字符串作为第二个参数传递给printf。执行此操作时,会显示一个错误,显示为rpn。asm:31:错误:逗号、冒号、装饰符或我尝试使用的操作数后的行尾:
pop ebp push dword[ebp+4]请致电printf
,但不显示任何内容。请使用链接将任何其他信息和您的更改添加到原始问题中。例如,将您尝试的代码和遇到的错误显示在彼此旁边。