Разбор параметров командной строки в сборке - PullRequest
0 голосов
/ 12 января 2019

Это 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

Каков наилучший способ разбора аргументов таким образом?

1 Ответ

0 голосов
/ 28 февраля 2019

Обычно, в случае файла .com (я не уверен насчет .exe, но, насколько я помню, он был тем же), у вас есть две копии аргументов командной строки в сегменте памяти, в который загружается программа. .com загружается в 0x100h, а параметры командной строки должны находиться в диапазоне от 0 до 0x100h сегмента кода.

...