Как читать аргументы командной строки на ассемблере? - PullRequest
0 голосов
/ 17 октября 2018

Я использую ассемблер TASM и не могу найти способ сохранить аргументы командной строки или даже вывести их.Я пытался сделать int 21h, а dx=0081h и ah=09h.Он ничего не делает, хотя я читал, что это способ сделать это.

Я добавил код того, что, по моему мнению, должно работать, чтобы скопировать и отобразить вводимый мной аргумент:

mov dx, 81h
mov ah, 09h
int 21h

1 Ответ

0 голосов
/ 17 октября 2018

Командная строка находится в Префикс сегмента программы (PSP) и находится в позиции 81h.В позиции 80h вы найдете длину строки.Эта строка всегда заканчивается 0Dh, а не $ (обратите внимание на это, если вы хотите использовать int 21h/ah=09h).

При запуске программы .exe сегмент регистрируется DS иES указывают на эту PSP.Это причина, по которой вам нужно загружать DS в начале программы с сегментом DATA (mov ax, @data; mov ds, ax).Давайте пропустим это:

MODEL small
.STACK 100h

.CODE

main PROC

    ; http://www.ctyme.com/intr/rb-2791.htm
    mov ah, 40h         ; DOS 2+ - WRITE - WRITE TO FILE OR DEVICE
    mov bx, 1           ; File handle = STDOUT
    xor ch, ch
    mov cl, ds:[0080h]  ; CX: number of bytes to write
    mov dx, 81h         ; DS:DX -> data to write (command line)
    int 21h             ; Call MSDOS

    ; http://www.ctyme.com/intr/rb-2974.htm
    mov ax, 4C00h       ; AH=4Ch, AL=00h -> exit (0)
    int 21h             ; Call MSDOS
main ENDP

END main
...