Exemple de programare în asamblare - Blagin Constantine

Un exemplu simplu de procesare a mesajului de șoarece.
Pentru a gestiona mesajele mouse-ul în DOS`e trebuie să-și întrerupă 33h.

Conectare: ax = 0000h
Ieșire: ax = 0000h, în cazul în care un mouse sau un driver mouse-ul nu este instalat.






ax = 0ffffh, șofer și un set de mouse-ul.
Bx = numărul de butoane:
0002 sau 0ffffh - două
0,003 - trei
0000 - un alt număr

int 33h
Conectare: ax = 0001h

int 33h
Conectare: ax = 0002h


Setați o tratare a evenimentului:

Manipulatorul este înregistrat ca distal ax procedura de admisie - cuprinde o stare apel, bx - starea butoanelor, cx și dx - coordonate x și y ale cursorului, SI si di - contra ultimă mișcare pe orizontală și pe verticală, DS - mouse-ul de segment de date driver.

Com va face programul folosind TASM, compilatorului și linker opțiuni sunt:


bin \ TASM mouse.asm
bin \ TLINK / t / x mouse.obj

/ T - pentru a crea un tip de fișier .com

/ X - pentru a nu crea un fișier de hartă (hartă)

Arrays în Adunarea

Crearea unei matrice unidimensională în asamblare.

.modelul mic
.cod
org 100h
începe:
împinge cs
ds pop
; ---------------------------------------
mov cx, 99; buclă valoarea contor la comanda buclă
mov si, 0, primul indice de element, si este aceeași valoare și
ARR_loop:
mov matrice [si], si; array [0] = 0, array [1] = 1. array [n] = n
inc si
buclă ARR_loop; Ciclul
int 20h
; ---------------------------------------
array dw 99 DUP (?); matrice nu inițializat
Început sfârşit

Crearea unui tablou bidimensional în asamblare.







.modelul mic
.cod
org 100h
începe:
împinge cs
DS pop; segmentul de date într-un derapaj segment de cod
mov si, 0; pornire linie
mov bx, 0; coloană inițială
; ---------------------------------------
array_loop:
mov array [bx] [si], bx; Umple elementele curente ale indicelui coloanei matrice
si inc; Următorul element linie
cmp si, 10; Sfârșitul liniei?
JZ NextLine, dacă da, du-te la eticheta NextLine
JMP array_loop, în caz contrar, continuă să umple linia
NextLine:
mov si, 0; Nul index rând elementul
inc bx; Du-te la coloana următoare
cmp bx, 10; ultima coloană?
exit jz; dacă da, randament
JMP array_loop, în caz contrar, continuă să completeze linia următoare
ieșire:
; ---------------------------------------
int 20h; Out program de com
; ---------------------------------------
array dw 10 DUP (10 DUP (?))
Început sfârşit

Numerele de căutare într-o matrice bidimensională de asamblare.

.modelul mic
.cod
org 100h
începe:
împinge cs
DS pop; segmentul de date într-un derapaj segment de cod
mov si, 0
mov bx, 0
; Căutare ----------------------------------
array_find:
mov ax, array [bx] [si]
suna proverka
si inc; Următorul element linie
cmp si, 2; Sfârșitul liniei?
JZ NLine, dacă da, du-te la eticheta NextLine
JMP array_find, în caz contrar, continuă să umple linia
nLine:
mov si, 0; Nul index rând elementul
inc bx; Du-te la coloana următoare
cmp bx, 3, ultima coloană?
exit jz; dacă da, randament
JMP array_find, în caz contrar, continuă să completeze linia următoare
ieșire:
; ---------------------------------------
int 20h; Out program de com
; ---------------------------------------
array dw 2 DUP (3 DUP (0))
Mesajul db "Da", 0Dh, 0Ah, '$'
; ---------------------------------------
proverka proc
cmp ax, 0
JZ DA
putrezi
DA: mov ah, 9
mov dx, mesaj de offset
int 21h
putrezi
proverka endp
Început sfârşit

mov al, 13h
int 10h
mov ax, 0A000h
es mov, topor
mov dx, 320 * 100 + 160; 320 * y1 + x1 (punctul de pornire)
mov cx, 13; Linie Lungime
Gline apel
mov ah, 10h
int 16h

Ieșire cod ASCII în limbaj de asamblare.

.modelul mic
.cod
org 100h
începe:

Mesaj de navigare