Está en la página 1de 7

Instrucciones del up 8086

__________________________________________________________________
ADD
REG, memory
memory, REG
REG, REG
memory, immediate
REG, immediate

Algorithm:
operand1 = operand1 + operand2

Example:

MOV AL, 5 ; AL = 5
ADD AL, -3 ; AL = 2
RET

RET

No operands
or even immediate

Return from near procedure.


Regresa de un procedimiento cercano.

Algorithm:

 Pop from stack:


o IP
 if immediate operand is present: SP = SP + operand

Example:

ORG 100h ; for COM file.

CALL p1

ADD AX, 1

RET ; return to OS.


p1 PROC ; procedure declaration.
MOV AX, 1234h
RET ; return to caller.
p1 ENDP

___________________________________________________
SUB

REG, memory
memory, REG
REG, REG
memory, immediate
REG, immediate
Subtract.

Algorithm:

operand1 = operand1 - operand2

Example:
MOV AL, 5
SUB AL, 1 ; AL = 4

RET

TEST
REG, memory
memory, REG
REG, REG
memory, immediate
REG, immediate
Logical AND between all bits of two operands for flags only. These flags are
effected: ZF, SF, PF. Result is not stored anywhere.

Y lógico entre todos los bits de dos operandos sólo para banderas. Estas banderas
afectan solo a: ZF, SF, PF. El resultado no se almacena en ninguna parte

These rules apply:


1 AND 1 = 1
1 AND 0 = 0
0 AND 1 = 0
0 AND 0 = 0
Example:

MOV AL, 00000101b


TEST AL, 1 ; ZF = 0.
TEST AL, 10b ; ZF = 1.
RET

JZ
Label
Short Jump if Zero (equal).
Salto corto si es cero (igual).

Set by CMP, SUB, ADD, TEST, AND, OR, XOR instructions.

Algorithm:

if ZF = 1 then jump

Example:
include 'emu8086.inc'

ORG 100h
MOV AL, 5
CMP AL, 5
JZ label1
PRINT 'AL is not equal to 5.'
JMP exit
label1:
PRINT 'AL is equal to 5.'
exit:
RET

CMP

REG, memory
memory, REG
REG, REG
memory, immediate
REG, immediate
Algorithm:

operand1 - operand2

result is not stored anywhere, flags are set (OF, SF, ZF, AF, PF, CF) according to
result.
El resultado no se almacena en ninguna parte, los indicadores se
fijan (OF, SF, ZF, AF, PF, CF) según el resultado.

Example:
MOV AL, 5
MOV BL, 5
CMP AL, BL ; ZF = 1 (so equal!)
RET

__________________________________________________________________
SHL
memory, immediate
REG, immediate
memory, CL
REG, CL
Shift operand1 Left. The number of shifts is set by operand2.
Desplazamiento a la izquierda del operando1. El número de desplazamientos se
fija por operando2

Algorithm:
Shift all bits left, the bit that goes off is set to CF.
Zero bit is inserted to the right-most position.
Desplazar todos los bits hacia la izquierda, el bit que se dispara a la izquierda se
fija en CF.
El bit cero se inserta en la posición más a la derecha.

Example:

MOV AL, 11100000b


SHL AL, 1 ; AL = 11000000b, CF=1.
RET

LOOP
Label
Decrease CX, jump to label if CX not zero.
Disminuir CX, saltar a la etiqueta si CX no es cero.

Algorithm:

CX = CX - 1
if CX <> 0 then jump else no jump,
continue

Example:
include 'emu8086.inc'

ORG 100h
MOV CX, 5
label1:
PRINTN 'loop!'
LOOP label1
RET

INT

immediate byte

Interrupt numbered by immediate byte (0..255).


Interrupción numerada por byte inmediato (0..255).
Algorithm:

Push to stack:
flags register
CS
IP
IF = 0
Transfer control to interrupt procedure

Example:
MOV AH, 0Eh ; teletype.
MOV AL, 'A'
INT 10h ; BIOS interrupt.
RET

INT 10h / AH = 0Eh

AH = 0Eh - teletype output.


input:
AL = character to write.

this functions displays a character on the screen, advancing the cursor and
scrolling the screen as necessary. the printing is always done to current active
page.

Esta función muestra un carácter en la pantalla, avanzando el cursor y


desplazándose por la pantalla según sea necesario. la impresión se realiza siempre
a la página activa actual.
EJERCICIO N°1
ESTUDIAR EL SIGUIENTE CÓDIGO E INDICAR SU OBJETIVO.

name "add-sub"
org 100h
mov al, 5 ; bin=00000101b
mov bl, 10 ; hex=0ah or bin=00001010b
add bl, al ; 5 + 10 = 15 (decimal) or hex=0fh or bin=00001111b
sub bl, 1 ; 15 - 1 = 14 (decimal) or hex=0eh or bin=00001110b
; print result in binary:
mov cx, 8
print: mov ah, 2 ; print function.
mov dl, '0'
test bl, 10000000b ; test first bit.
jz zero
mov dl, '1'
zero: int 21h
shl bl, 1
loop print
; print binary suffix:
mov dl, 'b'
int 21h
; wait for any key press:
mov ah, 0
int 16h
ret