System makr umożliwia pisanie programów w znanej składni języka wysokiego poziomu i sprawia, że teksty programów są bardziej przejrzyste do czytania i percepcji. Zaprojektowany dla kompilatorów języków asemblera TASM-2.5 i MASM-5.0, jest to język strukturalny wysokiego poziomu, który może być używany do pisania programów o dowolnym rozmiarze i przeznaczeniu. Zaprojektowany dla programisty, który ma już doświadczenie w programowaniu w języku asemblerowym.
Pliki * .ASM Te pliki zawierają przykłady programów napisanych w systemie makr.
Aby zainstalować w systemie, pamiętaj o skopiowaniu pliku MSYSTEM.MAC i pozostałych plików - według własnego uznania. W celu pomyślnego zaprogramowania w systemie makr zaleca się szczegółowe zapoznanie się z instrukcją obsługi i samym systemem makr zawartym w pliku MSYSTEM.MAC.
Pamiętaj, że asembler nie rozumie błędów i wszystko zależy tylko od Ciebie.
tasm25.zip
- 175 KB.
Na przykład, tutaj jest kod prostego programu bazodanowego, uwzględniający dochody i wydatki finansowe
; MB.ASM
; D. L. Konyukhov
.MODEL MAŁY
zawiera msystem.mac
zawiera sys.mac
include conio.mac
zawierać mouse.mac
include mem.mac
include kbd.mac
include math.mac
uwzględnij kursor. m
dołącz window.m
uwzględnij kolor.m
uwzględnij rec.m
zawiera dbedit.m
zawierać say.m
uwzględnij read.m
dołącz klucz. m
uwzględnij mkeys.m
zawiera mb.m
size_com = 20000 + 256
len_stack = 20000
len_vars = 20000
.CODE
BEGIN START, 100h, _main, {
func mb_empty ,, \u0026 lt; SI \u0026 gt;
mov SI, buf_A
memfill \u0026 lt; 32, @ DEBET_NAME, LEN_NAME \u0026 gt;
memfill \u0026 lt; 0, @ DEBET_QUAN, LEN_QUAN \u0026 gt;
memfill \u0026 lt; 32, @ KREDIT_NAME, LEN_NAME \u0026 gt;
memfill \u0026 lt; 0, @ KREDIT_QUAN, LEN_QUAN \u0026 gt;
endf
func _pic, \u0026 lt; byte X, bajt Y \u0026 gt;, \u0026 lt; SI \u0026 gt ;, 1, public
old_color EQU [BP] -1
getcolor, \u0026 lt; old_color \u0026 gt;
mov SI, buf_A
setcolor \u0026 lt; DebAttr \u0026 gt;
sayxy \u0026 lt; X, Y, @ space, @ f_s \u0026 gt;
setcolor \u0026 lt; old_color \u0026 gt;
powiedz \u0026 lt; @ DEBET_NAME, @ f_name \u0026 gt;
setcolor \u0026 lt; DebAttr \u0026 gt;
powiedz \u0026 lt; @ space, @ f_s \u0026 gt;
setcolor \u0026 lt; old_color \u0026 gt;
powiedz \u0026 lt; @ DEBET_QUAN, @ f_quan \u0026 gt;
setcolor \u0026 lt; DebAttr \u0026 gt;
powiedz \u0026 lt; @ space, @ f_s \u0026 gt;
setcolor \u0026 lt; KreAttr \u0026 gt;
powiedz \u0026 lt; @ space, @ f_s \u0026 gt;
setcolor \u0026 lt; old_color \u0026 gt;
powiedz \u0026 lt; @ KREDIT_NAME, @ f_name \u0026 gt;
setcolor \u0026 lt; KreAttr \u0026 gt;
powiedz \u0026 lt; @ space, @ f_s \u0026 gt;
setcolor \u0026 lt; old_color \u0026 gt;
powiedz \u0026 lt; @ KREDIT_QUAN, @ f_quan \u0026 gt;
setcolor \u0026 lt; KreAttr \u0026 gt;
powiedz \u0026 lt; @ space, @ f_s \u0026 gt;
setcolor \u0026 lt; old_color \u0026 gt;
endf
func _fuser, \u0026 lt; byte mode, word RecCur \u0026 gt;, \u0026 lt; DI \u0026 gt;, 1, public
old_color EQU [BP] -1
mov DI, 1
mov AL, cs: tryb
przełącznik AL, \u0026 lt; 0,1 \u0026 gt;
przypadek 1 {; rysować
getcolor, \u0026 lt; old_color \u0026 gt;
setcolor \u0026 lt; LblAttr \u0026 gt;
reccount \u0026 lt; @ rec_A \u0026 gt ;, \u0026 lt; ii \u0026 gt;
sayxy \u0026 lt; 35, 2, @ ii, @ f_w4 \u0026 gt;
rekrecno \u0026 lt; @ rec_A \u0026 gt ;, \u0026 lt; ii \u0026 gt;
sayxy \u0026 lt; 41, 2, @ ii, @ f_w4 \u0026 gt;
setcolor \u0026 lt; old_color \u0026 gt;
przypadek 2 {
mov retr_cho, TRUE
podczas gdy \u0026 lt; retr_cho e TRUE \u0026 gt; {
mov retr_cho, FALSE
mkeys_to
mov AL, cs: key_AL
przełącznik AL, \u0026 lt; NULLKEY, SPACEKEY, CRKEY, ESCKEY \u0026 gt; {
przypadek 1 {
mov AH, cs: key_AH
przełącznik AH, \u0026 lt; INSKEY, DELRKEY, F6KEY, F7KEY, F8KEY, F10KEY \u0026 gt;
przypadek 1; wstaw
Wstawianie, \u0026 lt; DI \u0026 gt;
przypadek 2; usuń
Usuwanie, \u0026 lt; DI \u0026 gt;
przypadek 3; sortuj
Sortowanie, \u0026 lt; DI \u0026 gt;
przypadek 4; znajdź
przypadek 5; data
Randki, \u0026 lt; DI \u0026 gt;
przypadek 6; menu
menupull
mov DI, 3
koniec
przypadek 2 {; znak
przypadek 3; wejście
Wprowadzanie \u0026 lt; RecCur \u0026 gt ;, \u0026 lt; DI \u0026 gt;
przypadek 4; wyjście
mov gotowe, FALSE
mov DI, 0
koniec
endwh}
koniec
endf \u0026 lt; word DI \u0026 gt;
label1 db 'PARISH', 0
label2 db 'FLOW', 0
title1 db 'Ilość tytułów', 0
ukeys1 db 1Eh, 0
ukeys2 db 1Fh, 0
skeys1 db 'ENTER', 0
nkeys1 db 'ENTER', 0
skeys2 db 'INS', 0
nkeys2 db 'NOWOŚĆ', 0
skeys3 db 'DEL', 0
nkeys3 db 'DELETE', 0
skeys4 db 'F5', 0
nkeys4 db 'PRINT', 0
skeys5 db 'F6', 0
nkeys5 db 'ZAMÓWIENIE', 0
skeys6 db 'F7', 0
nkeys6 db 'SEARCH', 0
skeys7 db 'F8', 0
nkeys7 db 'SUM', 0
skeys8 db 'F10', 0
nkeys8 db 'MENU', 0
skeys9 db 'ESC', 0
nkeys9 db 'EXIT', 0
; --- Procedura głowy
func główna wersja
; Stos
cli
mov SP, size_com + len_stack
sti
; Otwieram system
farrelease \u0026 lt; * CS 00,00 size_com + len_stack + len_vars \u0026 gt;
initcon
release \u0026 lt; * size_com + len_stack, 0 \u0026 gt;
initsys
initmouse
kursor_wyłącz
; Narysuj ramę główną
setcolor \u0026 lt; \u0026 lt; \u0026 lt; byte ptr MainAttr \u0026 gt; \u0026 gt; \u0026 gt;
drawbox \u0026 lt; cs: ScrnMinX, cs: ScrnMinY, cs: ScrnMaxX, cs: ScrnMaxY, @ box_main \u0026 gt;
drawbox \u0026 lt; 0, 2.79, 2, @ box_main \u0026 gt;
mouse_on
setcolor \u0026 lt; LblAttr \u0026 gt;
sayxy \u0026 lt; 16, 0, @ label1, @ f_s \u0026 gt;
sayxy \u0026 lt; 56, 0, @ label2, @ f_s \u0026 gt;
setcolor \u0026 lt; DebAttr \u0026 gt;
sayxy \u0026 lt; 0, 1, @ title1, @ f_s \u0026 gt;
setcolor \u0026 lt; KreAttr \u0026 gt;
powiedz \u0026 lt; @ title1, @ f_s \u0026 gt;
setcolor \u0026 lt; \u0026 lt; \u0026 lt; byte ptr MainAttr \u0026 gt; \u0026 gt; \u0026 gt;
;
linii menu
kolor \u0026 lt; MenuAttr \u0026 gt;
mkeys_on \u0026 lt; TRUE \u0026 gt;
mkeys_fr \u0026 lt; 79, 0, PGUPKEY * 100h, @ ukeys1, @ snull \u0026 gt;
mkeys_fr \u0026 lt; 79,24, PGDNKEY * 100h, @ ukeys2, @ snull \u0026 gt;
mkeys_fr \u0026 lt; 4.24, CRKEY, @ skeys1, @ nkeys1 \u0026 gt;
mkeys_fr \u0026 lt; 14,24, INSKEY * 100h, @ skeys2, @ nkeys2 \u0026 gt;
mkeys_fr \u0026 lt; 22,24, DELRKEY * 100h, @ skeys3, @ nkeys3 \u0026 gt;
mkeys_fr \u0026 lt; 30,24, F5KEY * 100h, @ skeys4, @ nkeys4 \u0026 gt;
mkeys_fr \u0026 lt; 37,24, F6KEY * 100h, @ skeys5, @ nkeys5 \u0026 gt;
mkeys_fr \u0026 lt; 44,24, F7KEY * 100h, @ skeys6, @ nkeys6 \u0026 gt;
mkeys_fr \u0026 lt; 51,24, F8KEY * 100h, @ skeys7, @ nkeys7 \u0026 gt;
mkeys_fr \u0026 lt; 58.24, F10KEY * 100h, @ skeys8, @ nkeys8 \u0026 gt;
mkeys_fr \u0026 lt; 65,24, ESCKEY, @ skeys9, @ nkeys9 \u0026 gt;
mkeys_on \u0026 lt; FALSE \u0026 gt;
; Otwieranie pliku
recopen \u0026 lt; @ rec_A, @ file_A, len_A \u0026 gt;
getmem \u0026 lt; len_A \u0026 gt ;, \u0026 lt; buf_A \u0026 gt; ; recbuffer
recempty \u0026 lt; @ rec_A, @ _mb_empty \u0026 gt;
; Praca z plikiem
kolor \u0026 lt; MainAttr \u0026 gt;
mov gotowe, TRUE
podczas \u0026 lt; done e TRUE \u0026 gt;
dbedit \u0026 lt; @ rec_A, 0, 3,79,23, @ cs: __ pic, @ cs: __ fuser \u0026 gt;
endwh
; Zamknij plik
freemem \u0026 lt; * buf_A \u0026 gt;
recclose \u0026 lt; @ rec_A \u0026 gt;
; Zamykam drugi
mkeys_of
; Zamykam system
mouse_off
kursor_on
; Wyjście z programu
clrscr
zatrzymaj \u0026 lt; 0 \u0026 gt;
endf
KONIEC START