Sunteți pe pagina 1din 7

MANUAL DE PROGRAMACIÓN EN ENSAMBLADOR 8086

DECIMAL 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
HEXADECIMAL 0 1 2 3 4 5 6 7 8 9 A B C D E F

COLOR GRIS indica que tipo de instrucción se explica


COLOR VERDE indica como se escriba tal cual en el programa
SUB. resta

sub destino, fuente *PARA USAR REGISTROS


destino = destino - fuente ASEGURARSE LIMPIAR ANTES DE
Mayor - menor
VOLVER A USAR*
Example:
MOV AL, 5
SUB AL, 1 ; AL = 4

MUL: multiplicación
(para 8 bits) (para 16 bits)
Mul fuente Mul fuente

AX = AL * fuente (DX AX) = AX * fuente


AX MOV AX, FFF0h
Example: MOV BX, 3
MOV AL, 200 ; AL = C8h MUL BX ;DX:AX = FFF0h*3=0002 FFD0h
MOV BL, 4 DX AX
MUL BL ; AX = 0320h (800)

DIV: division
(para 8 bits)
Div fuente
AL
AL = AX / fuente
cociente=dividendo/divisor
AH= resto
Example:
MOV AX, 203 ; AX = 00CBh
MOV BL, 4
DIV BL ; AL = 50 (32h), AH = 3

(para 16 bits)

Div fuente
Example:
MOV AX, FFF5h
MOV BX, 7
DIV BX
COMPARACIONES Y BIFURCACIONES
(los mas importantes)
CMP destino, fuente

JMP : salto sin condición


JE : salto si es igual JNE : salto si no es igual
JA : salto si es mayor JAE : salto si es mayor o igual
JB : salto si es menor JBE : salto si es menor o igual

*siempre comparara el distino con la fuente


Ejmp
Cmp ah,al ;compara ah con ah
Ja etiqueta ; pregunta ah es mayor que al?
;si es mayor saltara a etiqueta
;si no es mayor seguirá bajando el código

INTERRUPCIONES BASICAS 21H


INT 21H BIOS
Código de explicacion cond
disparo
Mov ah,1 Se usa para pedir un dato por teclado y lo recibido AL
Int 21h se guarda en
Mov ah,7 Es la misma que el anterior solo que no muestra lo AL
Int 21h que se envio sin embargo sigue guardando en
Mov ah,2 Se usa para imprimir un carácter en código ASCII DL
Int 21h Y lo que imprimirá se debe poner en
Mov ah,9 Imprime una cadena de caracteres DX
Int 21h Lo que se imprimirá se debe poner en (MEMORIA)

*tener en cuenta que todo lo que se captura por teclado y se imprime lo


hace en código ASCCII
RESERVA DE MEMORIA
dos maneras con ejemplos simples

org 100h org 100h


inicio: inicio:
mov ax,@data
mov dx,offset msg1 mov ds,ax
lea dx,msg1 Hola mundo
Hola mundo
mov ah,9
int 21h mov ah,9
int 21h
fin:int 20h
msg1 db 13,10,'hola mundo $' fin:int 20h
msg1 db 13,10,'hola mundo $'

*db(8 bits) , dw(16) , dq(32bits) , dt(64bits)


*el signo de dolar se pone siempre, para que el programa
reconozca donde parar de imprimir
*se puede usar la memoria como msg1 db ‘hola mundo $‘ ya
que el 13 en hexadecimal es 0A y 10 es 0D. eso en código ASCII
es nueva línea y retorno de línea que siempre se aconseja usar
* por convencion se la reserva de memoria se pone al final del codigo (se puede
poner antes del codigo)

MANEJO DE ETIQUETAS, CALL Y RET


CALL etiqueta
Ir al procedimiento cuyo inicio es etiqueta. Para llamadas dentro del mismo
segmento equivale a JMP etiqueta
RET
Retorno de procedimiento

LOOP BUCLES
WHILE FOR < CX
For (i=0; i<5; i++)

org 100h org 100h


inicio: inicio:
mov ah,7 mov cx,5
int 21h salto:
cmp al,’0’ mov ah,1
jb inicio int 21h
loop salto
fin:int 20h
fin:int 20h
RESERVA DE MEMORIA

Aux db ‘hola’ aux4 db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0


aux1 db ‘h’,‘o’,‘l’,‘a’ aux5 db 15dup(0)
aux2 db 1,2,3
aux3 db ‘h’,‘o’,‘l’,‘a’,10,13 es recomendable usar $ en vez de 0

*escribir al final de todo el código


(LECTURA)

(ESCRITURA)
Ej. Guardar en una reserva de memoria 5 capturas de teclado y luego mostrarlas.

org 100h mov ah,2


inicio: mov dl,13
mov cx,5 int 21h
mov si,offset aux2 mov dl,10
ciclo: int 21h
mov ah,1 ciclo2:
int 21h mov dl,[si]
mov [si],al int 21h
inc si inc si
loop ciclo loop ciclo2
mov si,offset aux2 fin: int 20h
mov cx,5 aux2 db 5dup(0)
LA PILA

*se puede capturar mas en la pila con un ciclo loop

CORRIMIENTO DE BITS
LA EXPLICACION DE ESTAS INSTRUCCIONES ES UN POCO ESPECIAL ASI QUE ESTARAN EXPLICADAS EN DOS
VIDEOS

S-ar putea să vă placă și