Példák programozás assembly - Blagin Constantine

Egy egyszerű példa üzenet feldolgozása az egérrel.
Kezelhető egér üzeneteket DOS`e kell megszakítani 33h.

Bemenet: ax = 0000h
Kilépés: ax = 0000h, ha egy egér vagy egér driver nincs telepítve.
ax = 0FFFFh, vezető és egér készlet.
Bx = a gombok száma:
0002 vagy 0FFFFh - két
0003 - Három
0000 - egy másik számot

int 33h
Bemenet: ax = 0001h

int 33h
Bemenet: ax = 0002h


Állítsa egy eseménykezelő:

A felvezető van bejegyezve, mint a disztális eljárás bemeneti ax - tartalmaz egy hívás állapot, bx - állapotban a gombok, cx és dx - x és y koordinátái a kurzor, si és di - számláló utóbbi lépés vízszintesen és függőlegesen, DS - egér meghajtó adatszegmens.

Com teszi a program segítségével TASM, fordító és linker lehetőségek közül választhat:


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

/ T -, hogy hozzon létre egy fájltípust .hu

/ X - nem hoz létre a térkép fájl (térkép)

Tömbök Assembly

Létrehozása egy egydimenziós tömb szerelvény.

.modell apró
.kód
org 100h
kezdet:
nyomja cs
pop ds
; ---------------------------------------
mov cx, 99; cikiusszámláió értéket hurok parancs
mov si, 0, az első elem indexe, si ugyanaz az érték, és
ARR_loop:
mov array [si], si; array [0] = 0, array [1] = 1. array [n] = N
inc si
loop ARR_loop; Cycle
int 20h
; ---------------------------------------
tömb dw 99 DUP (?); nincs inicializálva tömb
end Start

Létrehozása egy kétdimenziós tömb szerelvény.

.modell apró
.kód
org 100h
kezdet:
nyomja cs
pop ds; adatszegmenshez egy kód szegmens csúszás
mov si, 0; kiindulási vonal
mov bx, 0; a kezdeti oszlopon
; ---------------------------------------
array_loop:
mov array [bx] [si], bx; Töltsük a jelenlegi elemeit a tömb oszlop index
inc si; A következő sor elem
cmp si, 10; sor vége?
JZ NextLine, ha igen, megy a címke NextLine
jmp array_loop, különben továbbra is töltse vonal
NextLine:
mov si, 0; Null elemet sorindex
inc bx; Tovább a következő oszlop
cmp bx, 10; utolsó oszlop?
JZ exit; ha igen, hozam
jmp array_loop, különben továbbra is töltse ki a következő sorban
exit:
; ---------------------------------------
int 20h; Out programot com
; ---------------------------------------
tömb dw 10 dup (10 DUP (?))
end Start

Keresés a számok egy kétdimenziós tömb szerelvény.

.modell apró
.kód
org 100h
kezdet:
nyomja cs
pop ds; adatszegmenshez egy kód szegmens csúszás
mov si, 0
mov bx, 0
; Search ----------------------------------
array_find:
mov ax, array [bx] [si]
hívja proverka
inc si; A következő sor elem
cmp si, 2. sor vége?
JZ nLINE, ha igen, megy a címke NextLine
jmp array_find, különben továbbra is töltse vonal
nLINE:
mov si, 0; Null elemet sorindex
inc bx; Tovább a következő oszlop
cmp bx, 3, utolsó oszlop?
JZ exit; ha igen, hozam
jmp array_find, különben továbbra is töltse ki a következő sorban
exit:
; ---------------------------------------
int 20h; Out programot com
; ---------------------------------------
tömb dw 2 DUP (3 DUP (0))
Üzenet db "Igen", 0DH, 0AH, '$'
; ---------------------------------------
proverka proc
cmp ax, 0
JZ IGEN
áztat
IGEN: mov ah, 9
mov dx, offset üzenet
int 21h
áztat
proverka endp
end Start

mov al, 13h
int 10h
mov ax, 0A000h
mov es, ax
mov dx, 320 * 100 + 160; 320 * y1 + x1 (kiindulási pont)
mov cx, 13; Zsinórhossz
hívás gline
mov ah, 10h
int 16h

Nyomtató ASCII kódot szerelő.

.modell apró
.kód
org 100h
kezdet:

Hozzászólás navigáció