You are on page 1of 21

Conjunto de Instrucciones

(Parte
B) de Datos, pila, banderas

Para Movimiento

Aritmticas: suma, resta, BCD, ascii


Multiplicacin y divisin
Lgicas, desplazamiento, rotacin, macros,
cadenas de datos
de Salto
De Loop
Miscelania

Multiplicacin

Multiplicacin con signo


IMUL S
Multiplicacin sin signo
MUL S
S puede ser un registro o
localidad de memoria pero
no una constante.
Ejemplo de IMUL
MOV BL,0FEH
MOV AL,0E5H
IMUL BL
BL = -2 AL = -27
Despus de IMUL
AX = 0036H (54D)
CF = OF = 0 (resultado
entra en un byte)

Enteros de 8 bits
AX AL*S8
Enteros de 16 bits
DX: AX AX*S16
Enteros de 32 bits
EDX: EAX EAX*S32
Afecta CF y OF
SF, ZF, AF, PF no definidas
Ejemplo de MUL
MOV BL, 0FEH
MOV AL, 0E5H
MUL BL
BL = 254 AL = 229
Despus de MUL
AX = 0E336H (58166D)
CF=OF=1 (resultado
requiere una palabra)

Ejemplo de IMUL

MOV AWORD,-136
MOV AX, 6784
IMUL AWORD
AWORD contiene 0FF78H ----- AX = 1A80H
Despus de IMUL
DX: AX = FFF1H:EC00H (-922624D)
CF = OF = 1 (resultado entra en doble palabra)

Otro Ejemplo de IMUL

MOV AX, -1
MOV DX, 2
IMUL DX
AX=0FFFFH
DX=0002H
Despus de IMUL
DX: AX=0FFFFFFFEH (-2D)
CF=OF=0 (resultado calza en una palabra)

Ejemplo de MUL

MOV AWORD, -136


MOV AX, 6784
MUL AWORD
AWORD=0FF78H (65400D)
AX=1A80H
Despus de MUL
DX: AX=1A71EC00H (443673600D)
CF=OF=1 (resultado requiere de palabra doble)

Aritmtica ASCII
AAM: Ajuste ASCII despus de
multiplicacin
MOV BL, 08
MOV AL, 09
MUL BL
AAM
OR AX, 3030H

;un solo digito BCD desempaquetado


;un solo digito BCD desempaquetado
;AX=0048H
;AX=0702H
;AX=3732H
;AH=37H ASCII de #7
;AL=32H ASCII de #2
Observe que AAM convierte el resultado binario de
MUL a formato BCD desempaquetado.

DIVISION

Divisin con signo


IDIV divisor
Divisin sin signo
DIV divisor
Divisor puede ser un registro
o localidad de memoria pero
no una constante.
Para IDIV, si Q es positivo y
mayor que 7FFFH o si Q es
negativo y menor que 8001H,
entonces ocurre una
interrupcin tipo 0.
Para DIV, si Q es FFH para 8
bits, FFFFH para 16 bits o
FFFFFFFFH para 32 bits,
entonces ocurre una
interrupcin tipo 0.

Divisin de 8 bits
AL Q (AX/divisor)
AH R (AX/divisor)
Divisin de 16 bits
AX Q (DX: AX / divisor)
DX R (DX: AX / divisor)
Divisin de 32 bits
EAX Q (EDX: EAX /
divisor)
EDX R (EDX: EAX /
divisor)
Banderas no definidas
Para IDIV
Signo de dividendo=Signo del
residuo

Preparando el Dividendo

Dividir una palabra en AX para una palabra


de 16 bits, AX debe convertirse en una
palabra doble en DX: AX.
- Con signo: usar CWD (extensin de signo)
- Sin signo: usar MOV DX, 0
Conversin de un byte (en AL) en una
palabra (en AX)
- Con signo: usar CBW (esto no afecta
banderas)
- Sin signo: usar MOV AH, 0

Ejemplo de DIV e IDIV

MOV AL, 64H


MOV AH, 0
MOV CL, 4
DIV CL
Despus de DIV
AX=0019H
MOV AL, -64H
CBW
MOV CL, 7
IDIV CL
Despus de IDIV
AX=FEF2H
AL=F2H (-14D) cociente
AH=FEH (-2D) residuo
Signo de residuo = signo del dividendo

Otro Ejemplo de IDIV

MOV AX, -256


CWD
MOV CX, 9
IDIV CX
AX=FF00H
Despus de IDIV
DX: AX = FFFCH: FFE4H
FFE4H -28D cociente
FFFCH -4D residuo

Ejemplo: Visualizar en pantalla el


equivalente decimal de un nmero
binario de 8 bits.

MOV AL, 48H ;nmero binario


AAM
;convierte a BCD desempaquetado
OR AX, 3030H;convierte a ASCII
MOV DL, AH ;mostrar dgito ms significativo
MOV AH, 2
PUSH AX
;guardar dgito menos significativo
INT 21H
POP AX
;recuperar dgito menos significativo
MOV DL, AL ;mostrar dgito menos significativo
INT 21H

Aritmtica ASCII
AAD: Ajuste ASCII antes de
MOV BL, 9 ;
divisin
MOV AX, 0702H ;
AAD
;AX=0048H
DIV BL
;AX=0008H
;AH=00 residuo
;AL=08 cociente
OJO: AAD convierte un nmero BCD de dos
dgitos desempaquetados a binario para poder usar
la divisin binaria DIV.

Ejemplo: implementar
var4=(var1+var2) * var3
mov ax, var1
add ax, var2
mul var3
jc overflow
mov var4, ax
jmp lp1
overflow: ..
lp1: .

Ejemplo: implementar
var4=(var1 * 5) / (var2 3)
mov ax, var1
mov bx, 5
mul bx ; DX:AX =producto
mov bx, var2
sub bx, 3
div bx
mov var4, ax

Ejemplo: implementar
var4=(var1* -5) / (-var2/var3)
mov eax, var2
neg eax
cdq ; acondiciona dividendo edx:eax
idiv var3; edx=residuo, eax=cociente
mov ebx, eax
mov eax, -5
imul var1; edx:eax=lado izq.
idiv ebx ; edx=residuo, eax=cociente
mov var4, eax

Cul es el contenido de AX y
DX despus de la operacin
siguiente?
MOV
MOV
MOV
MUL
NOP

DX,0
AX, 222h
CX, 100h
CX

Cul ser el contenido de


AX despus de la siguiente
operacin?
MOV AX,63H
MOV BL,10H
DIV BL

Cul ser el contenido de


EDX:EAX despus de la siguiente
operacin?
MOV
MOV
MOV
DIV

EAX, 123400H
EDX, 0
EBX, 10H
EBX

Cul ser el contenido de AX y


DX despus de la siguiente
operacin?
mov ax, 4000h
mov dx, 500h
mov bx, 10h
div bx

Ejemplo

Usando DEBUG evalue los resultados de:


MOV
AX, -9
MOV
BL, 2
IDIV
BL; divide -9 para 2, resultado=FCH
Resultado en AX
MOV
AX, -9
SAR
AX,1;divide -9 para 2, result=FBH ??
IDIV redondea para arriba
SAR redondea para abajo

Ejemplos

MOV AX, 1234H


SHL AX, 1
MOV CL, 2
SHR AX, CL
SAR AX, CL

MOV AX, 091AH


MOV CL, 2
SAR AX, CL

You might also like