JavascriptProva

venerdì 20 settembre 2013

Uso di procedure in libreria.

Adesso veniamo a una procedura, quella che ho già chiamato X, per perfezionarla...

Diversamente dalle altre che ho già "impacchettato", questa procedura necessita della preparazione di alcuni registri prima di essere chiamata.

Ho già fatto in modo che il valore in AL, in cui va messo il carattere da stampare, sia preparato prima, e adesso devo fare in modo che anche BL, in cui va messo il colore, sia trattato nello stesso modo. La rinomino "stampa".
public stampa
text segment byte public

stampa proc near
 mov ah,09h
 mov bh,00h
 mov cx,1
 int 10h
 ret
stampa endp

text ends
end
Eseguo il solito "impacchettamento"
c:\Assembly>esegui stampa
Microsoft (R) Macro Assembler Version 6.14.8444
Copyright (C) Microsoft Corp 1981-1997.  All rights reserved.

 Assembling: stampa.asm
MASM : fatal error A1000: cannot open file : stampa.asm

c:\Assembly>esegui stampa
Microsoft (R) Macro Assembler Version 6.14.8444
Copyright (C) Microsoft Corp 1981-1997.  All rights reserved.

 Assembling: stampa.asm

c:\Assembly>lib libreria + stampa

Microsoft (R) Library Manager  Version 3.40
Copyright (C) Microsoft Corp 1983-1993.  All rights reserved.

List file:
Output library:

c:\Assembly>
c:\Assembly>lib libreria

Microsoft (R) Library Manager  Version 3.40
Copyright (C) Microsoft Corp 1983-1993.  All rights reserved.

Operations:
List file: con
CANCELLA..........cancella          KEYWAIT...........KeyWait
STAMPA............stampa            X.................proced


proced            Offset: 00000010H  Code and data size: cH
  X

cancella          Offset: 00000070H  Code and data size: 7H
  CANCELLA

KeyWait           Offset: 000000d0H  Code and data size: 5H
  KEYWAIT

stampa            Offset: 00000130H  Code and data size: aH
  STAMPA

c:\Assembly>
(esegui è un file BAT che ho costruito per assemblare senza stare a ripetere gli switch ogni volta)

Bene.
Adesso uso il ptogramma principale con queste procedure.
extrn Cancella:near
extrn Stampa:near
extrn KeyWait:near
;definiamo il segmento
text segment public
;inizio del programma
start:
 call Cancella
 
 mov al,'A'
 mov bl,0Ch
 call Stampa
 
 call KeyWait
 
 mov ah,4ch
 int 21H

text ends

stack segment para stack
 db 1024 dup(00H)

stack ends

end start
 
E funziona benissimo!

Nessun commento:

Posta un commento