Professional Documents
Culture Documents
bajo emu8086
Organización de Computadoras
Depto. de Cs. e Ing. de la Computación
Copyright
Entorno de programación.
Partes de un programa.
Directivas al compilador.
Arquitectura i8086.
Estructuras de control.
Accediendo al sistema operativo.
Definición de procedimientos.
Dispositivos virtuales.
3
Entorno de programación
7
Directivas al compilador
10
Arquitectura i8086
11
Registros disponibles
12
Registros disponibles
15
Instrucción MOV
22
Instrucción CMP
Saltos simples:
jz dest / jnz dest: depende de ZF.
jo dest / jno dest: depende de OF.
js dest / jns dest: depende de SF.
jc dest / jnc dest: depende de CF.
jp dest / jnp dest: depende de PF.
Si el flag en cuestión está activo se
produce el salto.
Caso contrario, la ejecución continúa
en la instrucción que sigue al salto. 26
Saltos condicionales
27
Saltos condicionales
28
IF-THEN-ELSE
30
Nuestro primer ¡hola
mundo!
Para poder encarar nuestro primer
“hola mundo” en assembler, sólo resta
resolver un aspecto: la entrada/salida.
El sistema operativo es el encargado
de gestionar ese aspecto.
El entorno de programación también
emula una parte de un antiguo
sistema operativo llamado DOS.
También se emula una parte del
propio BIOS de la máquina.
31
Llamadas al sistema
33
Ejemplo concreto
org 100h
jmp comienzo ; ¿por qué hará falta?
texto db 'Hola mundo!',10, 13, '$'
comienzo:
mov ah, 09h
mov dx, offset texto
int 21h ; el texto aparecerá en
; donde esté el cursor
int 20h ; indicamos al DOS que
; la ejecución ha finalizado
35
Invocación a
procedimientos
La invocación a un procedimiento no
difiere en gran medida de los saltos
convencionales:
Se adopta la convención de dejar en el
tope la pila la dirección a la cuál se
debe retornar.
Las instrucciones call y ret permiten
simplificar la invocación a los
procedimientos y el posterior retorno.
36
Invocación a
procedimientos
Existen dos alternativas a la hora de
evitar que se pierda información al
invocar a un procedimiento:
Quien invoca puede encargarse de
almacenar los registros que no desea se
vean afectados por el procedimiento.
O bien, quien es invocado puede ocuparse
de guardar sólo los registros que serán
usados por el procedimiento.
Ambas soluciones tienen ventajas y
desventajas... ¿cuáles son? 37
Ejemplo de “quien invoca
guarda”
mov ax, [unvalor]
mov bx, [otrovalor]
push bx ; alcena bx
call triplicar ; procedimiento para
; triplicar ax
pop bx ; restaura bx
...
triplicar:
mov cx, 3
mul cx ; multiplica por 3
ret ; retorna
38
Ejemplo de “quien es
invocado guarda”
mov ax, [unvalor]
mov bx, [otrovalor]
call triplicar ; procedimiento para
... ; triplicar ax
triplicar:
push cx ; almacena cx
push dx ; almacena dx
mov cx, 3
mul cx ; multiplica por 3
pop dx ; recupera dx
pop cx ; recupera cx
ret ; retorna 39
Definición de un
procedimiento
A fin de mejorar la legibilidad del
código fuente se puede hacer uso
de las directivas proc y endp.
Por caso, la rutina del ejemplo anterior
puede ser reescrita como el siguiente
procedimiento:
triplicar proc
... ; cuerpo del procedimiento
ret
triplicar endp
40
Macros predefinidas
43