2013-03-13 5 views
0

У меня возникла проблема с написанием программы программы .com. Я знаю, он помещен в es: 2ch, когда es указывает на начало psp. Вот мой код:Написание программы программы .com

org 100h 
    mov cx,256 
    mov ah,2 


    xor si, si ; si = 0 
    mov si,[es:si] ; si = begining of the psp 
    sub si, 2ch ; adding 2ch offset to si 
    mov si, [si] ; making si point to com environement 



loop1: ; output chars until '0' 
    mov dl, [si] 
    inc si  
    cmp dl, '0' 
    je end_of_program   
    int 21h 

loop loop1 



end_of_program: 
    mov ah, 0 
    int 16h 

    mov ah, 4ch 
    int 21h 

выход:

R♥˙{ T♥ |  `♦­☺Ç☻ ▼ ţ☺ IT 
♦☻ NLł☻ PO┬☺ NO×☻ CFÓ☻ SV┤☻ SU╩☻ LA▲♥ DV4♥ RU÷☻ BRJ♥ 
HUĘ♥ ISż♥ PLď♥ ROŕ♥ SL ♦ YU▬♦ TRB♦ ETn♦ JPX♦ USä♦ 

ответ

0

Смотрите Program_Segment_Prefix запись в Википедии.

Адрес сегмента PSP передается в регистре DS при выполнении программы.
...
В качестве альтернативы, в программах .COM, загруженных со смещением 100h, можно напрямую обратиться к PSP, просто используя смещения, перечисленные выше. Смещение 000h указывает на начало PSP, 0FFh указывает на конец и т. Д.

Таким образом, вы можете, например, прочитайте команду, которая была использована для запуска вашей программы со смещения 81h и далее.

2

Насколько я помню, «среда» на PSP: 2Ch - это адрес сегмента. В то время как мы не можем загрузить segreg с непосредственным или зарегистрируйтесь, мы можем загрузить один из памяти ...

mov ds, [2Ch] 

Затем сделайте свой цикл, начиная от смещения 0. Это будет печатать только первый из переменных окружения. Когда этот цикл завершается, проверьте еще один 0. Если нет, запустите свой цикл еще раз (возможно, захотите выбросить CR/LF). Когда вы дойдете до двойного нуля, появится другое слово (?), А затем название программы. Конечно, на данный момент мы потеряли ds ... но cs и es по-прежнему указывают на нашу оригинальную PSP, поэтому ее можно легко восстановить, если необходимо ...

+0

так что мой выход OK? это первая переменная и должна ли она выглядеть так? – Patryk

Смежные вопросы