JavascriptProva

giovedì 19 settembre 2013

Ripasso librerie in assembly

Ho ripassato le procedure esterne NEAR (ossia facenti parte dello stesso segmento).
Ecco i due sorgenti, quello del programma principale e quello di una procedura esterna:
extrn X:near
;definiamo il segmento
text segment public
;inizio del programma
start:
 mov ah,00h
 mov al,03h
 int 10h
 
 mov al,'X'
 call X
 
 mov ah,00h
 int 16h
 
 mov ah,4ch
 int 21H

text ends
end start
 
public X
text segment public

X proc near
 
 mov ah,09h
 mov bh,00h
 mov bl,0ch
 mov cx,1
 int 10h
 ret
X endp
text ends
end
assemblo e linko insieme l'uno e l'altro:

c:\Assembly>ml /Zm /c uno.asm
Microsoft (R) Macro Assembler Version 6.14.8444
Copyright (C) Microsoft Corp 1981-1997.  All rights reserved.

 Assembling: uno.asm

c:\Assembly>ml /Zm /c proced.asm
Microsoft (R) Macro Assembler Version 6.14.8444
Copyright (C) Microsoft Corp 1981-1997.  All rights reserved.

 Assembling: proced.asm

c:\Assembly>link uno proced

Microsoft (R) Segmented Executable Linker  Version 5.60.339 Dec  5 1994
Copyright (C) Microsoft Corp 1984-1993.  All rights reserved.

Run File [uno.exe]:
List File [nul.map]:
Libraries [.lib]:
Definitions File [nul.def]:
LINK : warning L4021: no stack segment

c:\Assembly>
e funziona:
X
c:\Assembly>

Adesso, invece di linkare due files oggetto insieme uso una libreria:
Costruisco una libreria.

c:\Assembly>lib libreria

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

Library does not exist.  Create? (y/n) y
Operations:
List file:

c:\Assembly>dir libreria*
 Il volume nell'unità C non ha etichetta.
 Numero di serie del volume: ECE6-4560

 Directory di c:\Assembly

20/09/2013  00.31             1.033 libreria.lib
               1 File          1.033 byte
               0 Directory  12.002.516.992 byte disponibili

c:\Assembly>
Adesso ci agginugo il file oggetto proced.obj.
Troviamolo...
c:\Assembly>dir proced*
 Il volume nell'unità C non ha etichetta.
 Numero di serie del volume: ECE6-4560

 Directory di c:\Assembly

19/09/2013  22.07               137 proced.asm
20/09/2013  00.33                77 proced.obj
               2 File            214 byte
               0 Directory  12.002.582.528 byte disponibili

c:\Assembly>
Eccolo!
Aggiungiamolo:
c:\Assembly>lib libreria + proced

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

List file:
Output library:

c:\Assembly>
Leggiamo la libreria per vedere se contiene la procedura:
c:\Assembly>lib libreria

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

Operations:
List file: con
X.................proced

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

c:\Assembly>
Perfetto!

Nessun commento:

Posta un commento