Il sistema di macro consente di scrivere programmi nella sintassi familiare di un linguaggio di alto livello e rende i testi dei programmi più trasparenti per la lettura e la percezione. Il sistema è progettato per i compilatori in linguaggio assembly TASM-2.5 e MASM-5.0, è un linguaggio strutturato di alto livello che può essere utilizzato per scrivere programmi di qualsiasi dimensione e per qualsiasi scopo. Progettato per un programmatore che ha già esperienza nella programmazione in linguaggio assembly.
File * .ASM Questi file contengono esempi di programmi scritti nel sistema macro.
Per installare sul sistema, assicurati di copiare il file MSYSTEM.MAC e il resto dei file, a tua discrezione. Per una corretta programmazione nel sistema macro, si consiglia di familiarizzare in dettaglio con il manuale e il sistema macro stesso contenuto nel file MSYSTEM.MAC.
Ricorda che l'assemblatore non capisce gli errori e tutto dipende solo da te.
tasm25.zip
- 175 KB.
Ad esempio, ecco il codice per un semplice programma di database, che tiene conto delle entrate e delle uscite in denaro
; MB.ASM
; D. L. Konyukhov
.MODELLO PICCOLO
include msystem.mac
include sys.mac
include conio.mac
include mouse.mac
include mem.mac
include kbd.mac
include math.mac
includi cursore.m
include window.m
include color.m
includi rec.m
include dbedit.m
includi say.m
include read.m
include key.m
include mkeys.m
includi mb.m
size_com = 20000 + 256
len_stack = 20000
len_vars = 20000
.CODE
BEGIN START, 100 h, _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, byte Y \u0026 gt ;, \u0026 lt; SI \u0026 gt ;, 1, pubblico
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, @ spazio, @ f_s \u0026 gt;
setcolor \u0026 lt; old_color \u0026 gt;
dì \u0026 lt; @ DEBET_NAME, @ f_name \u0026 gt;
setcolor \u0026 lt; DebAttr \u0026 gt;
dì \u0026 lt; @ spazio, @ f_s \u0026 gt;
setcolor \u0026 lt; old_color \u0026 gt;
dì \u0026 lt; @ DEBET_QUAN, @ f_quan \u0026 gt;
setcolor \u0026 lt; DebAttr \u0026 gt;
dì \u0026 lt; @ spazio, @ f_s \u0026 gt;
setcolor \u0026 lt; KreAttr \u0026 gt;
dì \u0026 lt; @ spazio, @ f_s \u0026 gt;
setcolor \u0026 lt; old_color \u0026 gt;
dì \u0026 lt; @ KREDIT_NAME, @ f_name \u0026 gt;
setcolor \u0026 lt; KreAttr \u0026 gt;
dì \u0026 lt; @ spazio, @ f_s \u0026 gt;
setcolor \u0026 lt; old_color \u0026 gt;
dì \u0026 lt; @ KREDIT_QUAN, @ f_quan \u0026 gt;
setcolor \u0026 lt; KreAttr \u0026 gt;
dì \u0026 lt; @ spazio, @ f_s \u0026 gt;
setcolor \u0026 lt; old_color \u0026 gt;
endf
func _fuser, \u0026 lt; modalità byte, word RecCur \u0026 gt ;, \u0026 lt; DI \u0026 gt ;, 1, pubblico
old_color EQU [BP] -1
mov DI, 1
mov AL, cs: modalità
cambia AL, \u0026 lt; 0.1 \u0026 gt;
caso 1 {; disegnare
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;
recrecno \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;
caso 2 {
mov retr_cho, TRUE
mentre \u0026 lt; retr_cho e TRUE \u0026 gt; {
mov retr_cho, FALSE
mkeys_to
mov AL, cs: key_AL
switch AL, \u0026 lt; NULLKEY, SPACEKEY, CRKEY, ESCKEY \u0026 gt; {
caso 1 {
mov AH, cs: key_AH
interruttore AH, \u0026 lt; INSKEY, DELRKEY, F6KEY, F7KEY, F8KEY, F10KEY \u0026 gt;
caso 1; inserire
Inserimento, \u0026 lt; DI \u0026 gt;
caso 2; elimina
Eliminazione, \u0026 lt; DI \u0026 gt;
caso 3; ordina
Ordinamento, \u0026 lt; DI \u0026 gt;
caso 4; trova
caso 5; data
Incontri, \u0026 lt; DI \u0026 gt;
caso 6; menu
menupull
mov DI, 3
endcase
caso 2 {; segnare
caso 3; input
Inserimento di \u0026 lt; RecCur \u0026 gt ;, \u0026 lt; DI \u0026 gt;
caso 4; uscita
mov fatto, FALSO
mov DI, 0
endcase
endwh}
endcase
endf \u0026 lt; word DI \u0026 gt;
label1 db \PARISH\, 0
label2 db \FLOW\, 0
titolo1 db \Quantità titolo\, 0
ukeys1 db 1Eh, 0
ukeys2 db 1Fh, 0
skeys1 db \ENTER\, 0
nkeys1 db \ENTER\, 0
skeys2 db \INS\, 0
nkeys2 db \NEW\, 0
skeys3 db \DEL\, 0
nkeys3 db 'DELETE', 0
skeys4 db \F5\, 0
nkeys4 db \PRINT\, 0
skeys5 db \F6\, 0
nkeys5 db \ORDER\, 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 testa
func main
; Stack
cli
mov SP, size_com + len_stack
sti
; Apro il sistema
farrelease \u0026 lt; * CS 00,00 size_com + len_stack + len_vars \u0026 gt;
initcon
rilascia \u0026 lt; * size_com + len_stack, 0 \u0026 gt;
initsys
initmouse
cursor_off
; Disegna la cornice principale
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;
dì \u0026 lt; @ title1, @ f_s \u0026 gt;
setcolor \u0026 lt; \u0026 lt; \u0026 lt; byte ptr MainAttr \u0026 gt; \u0026 gt; \u0026 gt;
; Linea di menu
color \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;
; Apertura del file
riapri \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;
; Lavorare con il file
color \u0026 lt; MainAttr \u0026 gt;
mov fatto, VERO
mentre \u0026 lt; done e TRUE \u0026 gt;
dbedit \u0026 lt; @ rec_A, 0, 3,79,23, @ cs: __ pic, @ cs: __ fuser \u0026 gt;
endwh
; Chiudi il file
freemem \u0026 lt; * buf_A \u0026 gt;
recclose \u0026 lt; @ rec_A \u0026 gt;
; Chiudo l'altro
mkeys_of
; Chiudo il sistema
mouse_off
cursor_on
; Uscita dal programma
clrscr
interrompi \u0026 lt; 0 \u0026 gt;
endf
FINE INIZIO