Documentos de Académico
Documentos de Profesional
Documentos de Cultura
ndice
3. Recursos de programacin
1/90
Cdigo
Datos
Pila
3/90
4/90
Pila
5/90
6/90
7/90
8/90
int g = 1;
int i;
/* g se sita en DATA */
/* i se sita en BSS */
BSS
HEAP
STACK
int
int
...
int
...
a =
}
main() {
a;
/* a se sita en STACK */
/* cdigo en CODE */
10/90
tabla de
realocacin
tamao del
fichero
cdigo
datos
tamao de la
de la cabecera
distancia a la
seccin
de datos
distancia a la
seccin
de pila
pila
14/90
Formatos de cabeceras
a.out (assembler output): originario de UNIX evolucion
a COFF
COFF (Common Object File Format): reemplazado en
UNIX por ELF sirvi de base para formatos de Windows
ELF (Executable & Linkable Format): formato para
ejecutables, cdigo objeto, libreras compartidas y
volcado de memoria en entorno UNIX; admite una gran
variedad de secciones en los ejecutables
MZ (Mark Zbikowski): utilizado en el entorno DOS
evolucion dando lugar a varias extensiones
PE (Portable Executable): formato para ejecutables,
cdigo objeto, libreras compartidas (DLL), archivos de
fuentes y otros usos en Windows; evolucin de COFF
15/90
El sistema operativo
toma la imagen ejecutable y la copia en memoria,
actualiza sus direcciones absolutas e inicializa los datos
que lo requieran,
asigna recursos, y
transfiere el control a la primera instruccin
La transferencia de control a la primera instruccin del
nuevo proceso se hace como si fuera un salto al cdigo
de una interrupcin o procedimiento
Por eso lo primero que se suele hacer es guardar la
direccin de retorno (al proceso llamador) en la pila
18/90
.EXE
.COM
PSP
cargador
dispacher
programa
en
memoria
19/90
20/90
10
21/90
22/90
11
23/90
24/90
12
13
14
15
31/90
16
34/90
17
36/90
18
38/90
19
20
41/90
21
Simples
Enteros
BCD
Reales
Punteros
Compuestos o agregados
Cadenas de caracteres
Arrays
Estructuras
Registros (records)
44/90
22
45/90
directiva de
declaracin
argumento de
directiva 1
tamao
en bytes
byte
DB
BYTE
word
DW
WORD
doubleword
DD
DWORD
farword
DF
FWORD
quadword
DQ
QWORD
tenbyte
DT
TBYTE
10
46/90
23
47/90
48/90
24
nombre
DB 41,42,43,44,45
nombre[3] = 44
Los datos numricos se pueden declarar con o sin signo
Si se declaran datos negativos, el programa ensamblador
calcula su representacin en C-2
real_corto DD 91.67
real_largo DQ 6.452E-4
49/90
Ejemplo:
cadena
puntero_near
puntero_far
DB hola mundo,10,13,$
DW cadena
DD cadena
50/90
25
cadena
DB hola mundo
cadena
cadena
cadena
DB 97,98,99
DB hola,10,13,$
DB hola,0
51/90
array
mascaras
anidados
buffer
cadena
DUP duplicate
DD
DB
DB
DB
DB
8
3
3
5
4
DUP(1)
DUP(040h,020h,04h,02h)
DUP(3 DUP(4 DUP(7)))
DUP(?)
DUP("hola")
52/90
26
nombre STRUC
campos
nombre ENDS
Definir las variables permite modificar los valores
iniciales
socio STRUC
id
nombre
apellidos
edad
socio ENDS
DW
DB
DB
DB
?
Nombre
Apellidos
3 DUP(0)
S1 socio <>
S2 socio <168,Ana,Lpez Gil, 22>
S3 socio 5 DUP (<>)
54/90
27
56/90
28
warray
darray
barray
LABEL WORD
LABEL DWORD
DB
100 DUP(?)
29
59/90
.ASM
ficheros INCLUDE
MASM
.OBJ
otros .OBJ
.LIB
LINK
.EXE
DEPURACIN
60/90
30
61/90
31
c:\masm51\bin
INCLUDE indica el directorio donde masm busca los
ficheros incluidos
Ensamblado condicional
64/90
32
c:\masm51\bin
LIB indica el directorio donde link busca las libreras
TMP indica el directorio donde link escribe los
ficheros temporales
33
67/90
PUSH CS
CALL near
NOP
68/90
34
69/90
35
2.3. Depuracin
71/90
72/90
36
1.
2.
3.
4.
73/90
37
Ejemplos:
mensaje
pmensaje
pcrlf
longitud
seg_hora
mascara_h
mascara_l
notmask_l
dato
DB
DW
DW
EQU
EQU
EQU
EQU
EQU
EQU
38
77/90
39
Ejemplo:
VALOR = 0
IF VALOR EQ 0
MOV AX, 0F5h
ELSE
MOV AX, 060h
ENDIF
79/90
40
81/90
41
83/90
ENDM
Consta de tres partes:
Cabecera contiene el nombre de la macro y,
opcionalmente, variables ficticias o parmetros
Cuerpo contiene el cdigo real que ser insertado
expandiendo el nombre de la macro
Fin directiva ENDM
84/90
42
MACRO
mov ax,@DATA
mov ds,ax
ENDM
mostrarcadena
fincodigo
MACRO
mov ax,4C00h
int 21h
ENDM
MACRO cadena
mov ah,09h
lea dx,cadena
int 21h
ENDM
85/90
mensaje
inicio:
.STACK 100h
.DATA
DB "Hola a todos",13,10,$
.CODE
iniciarDS
mostrarcadena mensaje
fincodigo
END
86/90
43
44
retardo
seguir:
MACRO contador
local seguir
mov cx,contador
loop seguir
ENDM
89/90
Ejemplo:
DOSSEG
.MODEL SMALL
INCLUDE macros.inc
90/90
45