Taller 1

Descargar como docx, pdf o txt
Descargar como docx, pdf o txt
Está en la página 1de 7

Fase 1: Cdigos assembler:

Tipos de
assembler

Assembler cruzados

Instrucciones simblicas
Una instruccin
en ensamblador consta de cdigos de
operacin, operaciones, operandos y
Comentarios.
La etiqueta
, es el smbolo que aadido a una
instruccin permite que se pueda
referenciar
Simblicamente en el programa.
El cdigo de operacin
, es generalmente un smbolo, aunque
en algunos sistemas es un
entero octal, hexadecimal o decimal que
indica la operacin que se quiere
realizar.
El campo operando
,
es un campo de direccin de datos que
puede estar dividido en varios
subcampos de acuerdo con la
constitucin interna de la computadora
correspondiente.
El comentario
, que no es obligatorio, no es procesado
por el ensamblador. Nos dice que
las instrucci
ones pueden ser de formato fijo, formato
libre y formato mixto.
ORG
Esta pseudo instruccin que proporcione
informacin acerca de alguna parte
de la traduccin.
LDA SUB
Instruccin que permite cargar el
sustraendo a AC. El nomb
re simblico de la
operacin es LDA.
SUB
Indica que es un smbolo de direccin.
CMA
Instruccin de maquina que representa
un complemento.
INC
Instruccin que indica un incremento a
AC.
ADD MIN
Permite sumar el minuendo a AC.
MIN
El valor binario de la parte de direccin
debe obtenerse un smbolo de
direccin MIN.
STA DIF
Permite almacenar la diferencia.
DIF
El valor binario de la parte de direccin
debe obtenerse un smbolo de
direccin DIF.
HLT
Instruccin que nos permite detener la
computadora.
DEC N
Este es un nmero decimal con signo N
para convertirse en binario.
Dos lneas del programa simblico
especifican operando decimales con la
pseudo
instruccin DEC.
HEX 0
La diferencia se encuent
ra almacenada aqu.
END
Fin del programa simblico y nos indica
que ya no hay lneas para traducir.
TABLA DE INSTRUCCIONES
Smbolo
Cdigo hexadecimal
Descripcin
AND
0 u 8
Aplicar AND M a AC
ADD
1 o 9
Sumar M a AC, acarrear E
LDA
2 o A
Cargar AC desde M
STA
3 o B
Almacenar AC en M
BUN
4 o C
Brincar en forma condicional a M
BSA
5 o D
Salvar la direccin de retorno en M
ISZ
6 o E
Incrementar M y saltar si hay un cero
CLA
7800
Borrar a AC
CLE
7400
Borrar E
CMA
7200
Complementar a AC
CME
7100
Complementar E
CIR
7080
Circular a la derecha E y AC
CIL
7040
Circular a la izquierda E y AC
INC
7020
Incrementar AC
SPA
7010
Brincar si AC es positivo
SNA
7008
Brincar si AC es negativo
SZA
7004
Brincar si AC es cero
SZE
7002
Brincar si E es cero
HLT
7
001
Introducir y borrar bandera
OU
F400
Sacar informacin y borrar bandera
SKI
F200
Saltar si la bandera de entrada esta
activada
SKO
F100
Saltar si la bandeja de salida esta
activada
ION
F080
Habilitar la interrupcin
IOF
F040
Deshabilitar interrupcin


De una fase
residentes demores SEGMENT
ASSUME CS:demores, DS:demores

ORG 100h
inicio:
JMP main

controla_int08 PROC
PUSHF
CALL CS:ant_int08 ; llamar al gestor
normal de INT 8
STI
CMP CS:in10,0
JNE fin_int08 ; estamos dentro de
INT 10h

;
; Colocar aqu el proceso a ejecutar 18,2
veces/seg.
; que puede invocar funciones de INT
10h
fin_int08:
IRET
controla_int08 ENDP

controla_int10 PROC
INC CS:in10 ; indicar entrada en
INT 10h
PUSHF
CALL CS:ant_int10
DEC CS:in10 ; fin de la INT 10h
IRET
controla_int10 ENDP

in10 DB 0 ; mayor de 0 si hay INT
10h
ant_int08 LABEL DWORD
ant_int08_off DW ?
ant_int08_seg DW ?
ant_int10 LABEL DWORD
ant_int10_off DW ?
ant_int10_seg DW ?

; Dejar residente hasta aqu.

main: PUSH ES
MOV AX,3508h
INT 21h ; obtener vector de
INT 8

MOV ant_int08_seg,ES
MOV ant_int08_off,BX
MOV AX,3510h
INT 21h ; obtener vector de
INT 10h
MOV ant_int10_seg,ES
MOV ant_int10_off,BX
POP ES

LEA DX,controla_int08
MOV AX,2508h
INT 21h ; nueva rutina de INT
8

LEA DX,controla_int10
MOV AX,2510h
INT 21h ; nueva rutina de INT
10h

PUSH ES
MOV ES,DS:[2Ch] ; direccin del
entorno
MOV AH,49h
INT 21h ; liberar espacio de
entorno
POP ES

LEA DX,main ; fin del cdigo
residente
ADD DX,15 ; redondeo a
prrafo
MOV CL,4
SHR DX,CL ; bytes -> prrafos
MOV AX,3100h ; terminar
residente
INT 21h

demores ENDS
END inicio

Macroensambladores ; HOLA.ASM
; Programa clasico de ejemplo. Despliega una
leyenda en pantalla.
STACK SEGMENT STACK ; Segmento de pila
DW 64 DUP (?) ; Define espacio en la pila
STACK ENDS
DATA SEGMENT ; Segmento de datos
SALUDO DB "Hola mundo!!",13,10,"$" ; Cadena
DATA ENDS
CODE SEGMENT ; Segmento de Codigo
ASSUME CS:CODE, DS:DATA, SS:STACK
INICIO: ; Punto de entrada al programa
Macro Ensamblador IBM
Macro Ensamblador de Turbo
Editassm
Programa Descripcin
MASM.EXE Microsoft Macro Assembler
LINK.EXE Microsoft 8086 object linker
SYMDEB.EXE Microsoft Symbolic
Debuger Utility
MAPSYM.EXE Microsoft Symbol File
Generator
CREF.EXE Microsoft Cross-Reference
Utility
LIB.EXE Microsoft Library Manager
MAKE.EXE Microsoft Program
Maintenance Utility
MOV AX,DATA ; Pone direccion en AX
MOV DS,AX ; Pone la direccion en los registros
MOV DX,OFFSET SALUDO ; Obtiene direccion
del mensaje
MOV AH,09H ; Funcion: Visualizar cadena
INT 21H ; Servicio: Funciones alto nivel DOS
MOV AH,4CH ; Funcion: Terminar
INT 21H
CODE ENDS
END.
PUBLIC nombre,,, que hace la variable, etiqueta
o smbolo absoluto disponible para todos los
programas.
EXTRN nombre:tipo,,, que especifica una
variable, etiqueta o smbolo externos identificados
por nombre y tipo (que puede ser BYTE, WORD,
DWORD, QWORD, TBYTE, NEAR, FAR, o ABS,
ste ltimo para nmeros absolutos).
El siguiente ejemplo ilustra el uso de las
directivas. El primer listado corresponde al
mdulo principal, mientras que el segundo al
mdulo que contiene una rutina. Ambos mdulos
son archivos que se editan por separado, se
ensamblan por separado, pero se ligan juntos.
MODULO PRINCIPAL: MAIN.ASM
NAME main
PUBLIC exit
EXTRN print:near
stack SEGMENT word stack 'STACK'
DW 64 DUP(?)
stack ENDS
data SEGMENT word public 'DATA'
data ENDS
code SEGMENT byte public 'CODE'
ASSUME cs:code, ds:data
EXEPACK.EXE Microsoft EXE File
Compression Utility
EXEMOD.EXE Microsoft EXE File
Header Utility
COUNT.ASM Sample source file for
SYMDEB session
README.DOC Updated information
obtained after the manual

start:
mov ax,data ; carga localizacion del segmento
mov ds,ax ; en el registro DS
jmp print ; va a PRINT en el otro modulo
exit:
mov ah,4ch
int 21h
code ENDS
END start
SUBMODULO: TASK.ASM
NAME task
PUBLIC print
EXTRN exit:near
data SEGMENT word public 'DATA'
entrada DB "Entrando a un
submodulo....",13,10,"$"
salida DB ".......saliendo del
submodulo.",01,07,13,10,"$"
data ENDS
code SEGMENT byte public 'CODE'
ASSUME cs:code, ds:data
print:
mov ah,06h ; Funcion para borrar pantalla
mov al,0 ; todas las lineas
mov cx,0 ; de 0,0
mov dh,24d
mov dl,79d
mov bh,0 ; atributo en lineas vacias
int 10h ; Servicio de e/s video
mov dx, OFFSET entrada
mov ah,09h
int 21h
mov dx, OFFSET salida
int 21h
jmp exit ; Regresa al otro modulo

También podría gustarte