Assembly NASM linux X86输入参数

Assembly NASM linux X86输入参数,assembly,nasm,Assembly,Nasm,我需要做一个NASM linux X86应用程序,在从linux控制台调用时读取一些输入参数,例如/myapp arg1 arg2 arg3。我已经阅读并实现了这个示例,但当我执行应用程序并通过控制台传递一些参数时,什么都没有发生,总是转到NoArgs代码块 这是我的密码: VAR_MAX_ARGV equ 4; sys_exit equ 1 sys_read equ 3 sys_write equ 4 stdin equ 0 std

我需要做一个NASM linux X86应用程序,在从linux控制台调用时读取一些输入参数,例如/myapp arg1 arg2 arg3。我已经阅读并实现了这个示例,但当我执行应用程序并通过控制台传递一些参数时,什么都没有发生,总是转到NoArgs代码块

这是我的密码:

VAR_MAX_ARGV equ 4;

sys_exit    equ     1
sys_read    equ     3
sys_write   equ     4
stdin       equ     0
stdout      equ     1
stderr      equ     3


SECTION .data  ;initialized data
szErrMsg    db      "Too many arguments.  The max number of args is 4", 10
ERRLEN      equ     $-szErrMsg
szLineFeed  db      10


SECTION .text   ;assembly code
extern printf

global _start
_start: 
    nop ;   
    push ebp
    mov ebp, esp

    ;push welcome_msg; 
    ;call printf

    cmp     dword [ebp + 4], 1
    je      NoArgs

    cmp     dword [ebp + 4], VAR_MAX_ARGV        ; check total args entered
    ja      TooManyArgs  

    ; push DWORD [i] DWORD directiva de tamanio de memoria
    jmp     finish


NoArgs:
   ; No args entered,
   ; start program without args here
    jmp     finish


TooManyArgs:
    mov     eax, sys_write
    mov     ebx, stdout
    mov     ecx, szErrMsg
    mov     edx, ERRLEN
    int     80H

finish:
    mov     esp, ebp
    pop     ebp

    mov     eax, sys_exit
    xor     ebx, ebx
    int     80H

SECTION .bss ;unitialized data
有什么不对劲


PD:该应用程序运行在英特尔Core i7上的Ubuntu14.04 X86上,你能给我你执行的命令行吗?你在运行哪个O.S?debian stable。我做了:
nasm-f elf32 test.asm&&gcc-m32-nostlib test.o&&./a.out 1 2 3 4
并打印了“参数太多”。请在控制台上使用较少的dan 3参数。我只是尝试了一下,但问题仍然存在。我不确定你的问题是什么,只有不到3个参数,你跳到
finish
,然后退出程序。