[ Pobierz całość w formacie PDF ]

Uruchamianie innych programów
Czasem zdarza się, że z poziomu naszego własnego programu musimy uruchomić jakiś inny program lub
polecenie systemowe. Służy do tego funkcja systemowa AH=4B przerwania DOS-a 21h. Jej argumenty to
kolejno:
" w AL - typ uruchomienia. Najczęściej AL=0, czyli załaduj i uruchom
" w ES:BX - adres struktury dotyczącej środowiska uruchamianego programu. Pola struktury to
kolejno:
f& (WORD) segment zawierający zmienne środowiska. Można wpisać 0 (wtedy będzie
skopiowany nasz segment środowiska).
f& (DWORD) adres linii poleceń uruchamianego programu
f& (DWORD) adres pierwszego File Control Block (FCB) uruchamianego programu
(nieużywane)
f& (DWORD) adres drugiego FCB uruchamianego programu (nieużywane)
" w DS:DX - adres nazwy uruchamianego programu
Po więcej szczegółów odsyłam do listy przerwań Ralfa Brown'a (RBIL)
Spróbujmy teraz napisać jakiś prosty przykład - uruchomienie samego NASMa (powinien się wyświetlić błąd,
że nie podano plików wejściowych). Program jest w składni NASM.
(przeskocz przykładowy program)
; Program uruchamiajÄ…cy inny program.
;
; Autor: Bogdan D.
; kontakt: bogdandr (at) op (dot) pl
;
; nasm -O999 -o exec_dos.com -f bin exec_dos.asm
section .text
org 100h
start:
mov ax, cs
mov es, ax ; będziemy zmieniać rozmiar segmentu kodu
mov bx, koniec ; BX = rozmiar segmentu kodu
shr bx, 4 ; BX /= 16 - rozmiar w paragrafach
inc bx ; żeby nie obciąć naszego programu
mov ah, 4ah ; funkcja zmiany rozmiaru
int 21h
; zwolnienie miejsca na Å‚adowany program
mov [kom_ln+2], cs ; uzupełniamy pola potrzebnych struktur
mov [fcb1+2], cs
mov [fcb2+2], cs
mov [sssp], sp ; zachowujemy nasz stos
mov [sssp+2], ss
mov ax, 4b00h ; funkcja uruchomienia programu
mov dx, program ; adres nazwy programu
mov bx, srod ; adres struktury środowiska
int 21h ; uruchamiamy
cli ; przywracamy nasz stos
Bogdan Drozdowski 237
Bogdan Drozdowski Język asembler dla każdego 2007-11-12
mov sp, [sssp]
mov ss, [sssp+2]
sti
mov ax, 4c00h
int 21h
sssp dd 0 ; miejsce na SS i SP
; linia poleceń uruchamianego programu
linia_kom db 0, " ", 0dh
; File Control Block - juz nieużywana przez DOS
; struktura, tu ustawiona na jakieś bezpieczne domyślne wartości
; (zgodnie z książką Art of Assembler)
fcb db 3," ",0,0,0,0,0
; nazwa programu do uruchomienia
program db "nasm.exe", 0
; struktura środowiska
srod dw 0 ; segment środowiska. Nasz własny
; jest pod DS:[2ch]
kom_ln dw linia_kom, 0 ; offset i segment linii poleceń
fcb1 dw fcb, 0 ; offset i segment pierwszego FCB
fcb2 dw fcb, 0 ; offset i segment drugiego FCB
koniec:
Spis treści off-line (Alt+1)
Spis treści on-line (Alt+2)
Ułatwienia dla niepełnosprawnych (Alt+0)
238 Bogdan Drozdowski
2007-11-12 Język asembler dla każdego Bogdan Drozdowski
Skankody i kody ASCII klawiszy
Informacje te pochodzą z Ralf Brown's Interrupt List oraz ze znakomitej książki Art of Assembly Language
Programming (wersja dla DOS-a) autorstwa Randalla Hyde'a. Książkę można za darmo ściągnąć z Webstera
(przeskocz skankody)
Skankody (scan codes) wysyłane przez klawiaturę
Klawisz Naciśnięcie Zwolnienie Kl Nac Zwol Kl Nac Zwol Kl Nac Zwol
Esc 01 81 ] } 1B 9B . > 34 B4 END 4F CF
1 ! 02 82 ENTER 1C 9C / ? 35 B5 DÓA 50 D0
2 @ 03 83 Ctrl 1D 9D PShift 36 B6 PGDN 51 D1
3 # 04 84 A 1E 9E * (num) 37 B7 INS 52 D2
4 $ 05 85 S 1F 9F alt 38 B8 DEL 53 D3
5 % 06 86 D 20 A0 spacja 39 B9 SysRq 54 D4
6 ^ 07 87 F 21 A1 CAPS 3A BA / (num) E0 35 B5
7 & 08 88 G 22 A2 F1 3B BB enter (num) E0 1C 9C
8 * 09 89 H 23 A3 F2 3C BC F11 57 D7
9 ( 0A 8A J 24 A4 F3 3D BD F12 58 D8
0 ) 0B 8B K 25 A5 F4 3E BE LWin 5B DB
- _ 0C 8C L 26 A6 F5 3F BF PWin 5C DC
+ = 0D 8D ; : 27 A7 F6 40 C0 Menu 5D DD
BkSp 0E 8E  " 28 A8 F7 41 C1 ins (num) E0 52 D2
Tab 0F 8F ~ ` 29 A9 F8 42 C2 del (num) E0 53 D3
Q 10 90 LShift 2A AA F9 43 C3 home (num) E0 47 C7
W 11 91 \ | 2B AB F10 44 C4 end (num) E0 4F CF
E 12 92 Z 2C AC NUM 45 C5 pgup (num) E0 49 C9
R 13 93 X 2D AD SCRLCK 46 C6 pgdn (num) E0 51 D1
T 14 94 C 2E AE HOME 47 47 lewo (num) E0 4B CB
Y 15 95 V 2F AF GÓRA 48 C8 prawo (num) E0 4D CD
U 16 96 B 30 B0 PGUP 49 C9 góra (num) E0 48 C8
I 17 97 N 31 B1 - (num) 4A CA dół (num) E0 50 D0
O 18 98 M 32 B2 5 (num) 4C CC Palt E0 38 B8
P 19 99 LEWO 4B CB PRAWO 4D CD Pctrl E0 1D 9D
E1 1D 45
[ { 1A 9A ,
E1 9D C5
Na żółto, małymi literami i napisem num oznaczyłem klawisze znajdujące się (moim zdaniem) na klawiaturze
numerycznej.
Kody ASCII klawiszy z modyfikatorami
Bogdan Drozdowski 239
Bogdan Drozdowski Język asembler dla każdego 2007-11-12
kod z z z z z
Klawisz Skankod z Shift z Alt
ASCII Control NumLock CapsLock Shift+CapsLock Shift+NumLock
Esc 01 1B 1B 1B (brak) 1B 1B 1B 1B
1 ! 02 31 21 (brak) 7800 31 31 31 31
2 @ 03 32 40 0300 7900 32 32 32 32
3 # 04 33 23 (brak) 7A00 33 33 33 33
4 $ 05 34 24 (brak) 7B00 34 34 34 34
5 % 06 35 25 (brak) 7C00 35 35 35 35
6 ^ 07 36 5E 1E 7D00 36 36 36 36
7 & 08 37 26 (brak) 7E00 37 37 37 37
8 * 09 38 2a (brak) 7F00 38 38 38 38
9 ( 0A 39 28 (brak) 8000 39 39 39 39 [ Pobierz całość w formacie PDF ]

  • zanotowane.pl
  • doc.pisz.pl
  • pdf.pisz.pl
  • forum-gsm.htw.pl