首页 > 解决方案 > 在程序集中解析命令行参数

问题描述

它是一个 16 位 x86 代码。我已经存储了每个命令,例如“hi”命令

cmd_hi db 'hi', 0

然后我得到输入字符串使用

    mov di, sp        ; get input
    call get_string
    jcxz loop_start   ; blank line? 

并将其与存储的命令进行比较

mov si, sp
mov di, cmd_hi    ; "hi" command
call strcmp
je .greetme

使用 strcmp 循环

strcmp:
.loop_start:
    mov al, [si]       ; grab a byte from SI
    cmp al, [di]       ; are SI and DI equal?
    jne .done          ; no, we're done.

    test al, al        ; zero?
    jz .done           ; yes, we're done.

    inc di             ; increment DI
    inc si             ; increment SI
    jmp .loop_start    ; loop!

.done:   
    ret

但现在我想向我的函数添加独立参数,例如 2 个整数

cmd> hi 1 2

以这种方式解析参数的最佳方法是什么?

标签: assemblycommand-line-argumentsdosx86-16

解决方案


通常,如果是 .com 文件(我不确定 .exe,但我记得它是一样的),您在加载程序的内存段中有两个命令行参数副本。.com 在 0x100h 处加载,命令行参数应在代码段的 0 到 0x100h 之间找到。


推荐阅读