You are on page 1of 3

08/11/2011

Instrucciones de 16-bits

OPCODE OPERANDO BYTES DESCRIPCION


Copia el contenido de la locacin de
LD HL,(16-bits) 3 memoria especificada por el operando de
16-bits
Copia el contenido del par de registros HL
LD (16-bits), HL 3 en la locacin de memoria especificada
UNIDAD 5 PARTE 5A por HL
Copia el contenido de HL al apuntador al
LD SP, HL 1
PROGRAMANDO EN EL stack SP
Carga el contenido de HL en el contador
ENSAMBLADOR DEL Z80 JP (HL) 1 del programa. Esta instruccin es
equivalente a LD PC,HL

Otoo 2011 Microprocesadores

Ejemplo Suma y Resta con Carry


Memoria OPCODE OPERANDO DESCRIPCION

Condiciones Inciales
D 85 6F E 2050 3F ADC A,r Suma el operando, carry y el
H 00 00 L 2051 42
ADC A, 8-bits acumulador. El resultado es
D 85 6F E 2050 3F ADC A, (HL) almacenado en el acumulador.
LD HL,(2050H)
H 42 3F L 2051 42
ADC A, (IX+d) A = OPERANDO + CY + A
D 42 3F E 2050 3F SBC A,r Resta el contenido del operando y
EX DE,HL
H 85 6F L 2051 42
SBC A, 8-bits el borrow del contenido del
acumulador y el resultado es
D 42 3F E 2050 6F SBC A, (HL)
LD (2050H),HL
H 85 6F L 2051 85
puesto en el acumulador
SBC A, (IX+d) A = A OPERANDO CY

Suma y Resta con Carry Suma y Resta con Carry


Memoria
Esta instruccin sirve para sumar una lista de B 27 93 C 2050 XX
nmeros tomando en cuenta el carry generado en Condiciones Inciales
D 31 82 E 2051 XX
cada suma
93H (A)
Tambin puede ser usada para sumar nmeros de LD A,C A 93 XX F
+ 82H (E)
16-bits ADD A,E A 15 CY =1 F
115H
Ejemplo: LD L,A H 15 L 1H CY
Suma el 2793H y el 3182H y guarda el resultado en LD A,D A 31 CY =1 F 31H (A)
ADC A,B
la locacin de memoria 2050H y 2051H. Suponga + 27H (B)
que los nmeros se encuentran en BC y DE 59H A
respectivamente
LD H,A H 59 15 L 2050 15 H
LD (2050H),HL A 59 CY =0 F 2051 59 H

1
08/11/2011

Suma de 16-bits Suma de 16-bits


OPCODE OPERANDO DESCRIPCION LD A,C
ADD A,E
Suma el contenido del operando LD L,A EX HL,BC
ADD HL,BC (par de registros o apuntador al LD A,D ADD HL,DE
ADC A,B
stack) al contenido del registro HL, y LD H,A
LD (2050H),HL LD (2050H),HL
el resultado es puesto en el registro
ADD HL,DE HL.
SLA H
La bandera del carry es alterada SLA H ;Shift a la izquierda 4 posiciones

ADD HL,HL para reflejar el resultado de la SLA H ADD HL,HL 1231 + 1231 = 2462 HL
SLA H
suma de 16-bits. Ninguna otra SLA L
ADD HL,HL 2462 + 2462 = 48C4 HL
ADD HL,HL 48C4 + 48C4 = 9188 HL
bandera es alterada SLA L
SLA L ADD HL,HL 9188 + 9188 = 2310 HL
ADD HL,SP Esta instruccin usa HL como el SLA L
acumulador de 16-bits

Ejemplo Subrutina ADBYTE


Dos nmeros de 32-bits estn almacenados en el ADBYTE: ; Esta subrutina suma dos nmeros de mltiples bytes y almacena el
; resultado en memoria, reemplazando el primer numero
BUFF1 y BUFF2 respectivamente. ; Entrada: Direccin de los nmeros a ser sumados en HL y DE, El tamao de
; los nmeros en bytes en el registro B
La subrutina ADBYTE suma los nmeros y el ; Salida: Suma almacenada en memoria
resultado es almacenado en el BUFF1 ; Registros Modificados: B, DE, HL y el acumulador
START: XOR A ; Limpia la bandera del carry
Los parmetros de entrada son NEXT: LD A,(DE) ; Carga el byte del BUFF2
Operando 1 apuntado por HL ADC A,(HL) ; Suma el byte del BUFF1

Operando 2 apuntado por DE LD (HL),A ; Guarda el resultado parcial


INC HL ; Actualiza los apuntadores a memoria
El tamao del operando en bytes en B
INC DE
DEC B ; Actualiza el contador para la siguiente suma
JR NZ, NEXT ; Si el contador es diferente de cero continua
RET

Programa Principal Multiplicacion Binaria


La multiplicacin binaria de M N puede ser
realizada por medio de sumar M, N veces.
MAIN: LD SP, STACK
Una forma mas eficaz de multiplicacin binaria es
LD HL, BUFF1 ; Inicializa apuntadores
NEXT: LD DE, BUFF2
el siguiente procedimiento
LD B,04H ; Inicializa el contador especificando el
; numero de bytes a ser sumado 111
CALL ADBYTE ; Realiza la suma 101
HALT Paso 1: (111 1) 111
Paso 2: Shift izquierdo y suma (111 0) + 000
Paso 3: Shift izquierdo y suma (111 1) + 111
100011

2
08/11/2011

Subrutina MLTPLY
MLTPLY: ; Esta subrutina multiplica dos nmeros sin signo Programa Principal
; Entrada: Operando 1 en E y Operando 2 en D
; Salida: Resultado en HL
; Registros Modificados: B, DE, HL y el acumulador
LD A, D ; Copia el operando 2 en A
LD D,0 ; Limpia D para guardar resultados parciales
MAIN: LD SP, STACK
LD HL,0 ; Limpia HL
LD HL, (BUF1) ; Obten los operandos
LD B,08H ; Inicializa el contador a 8
NEXT: EX DE, HL ; Copialos en DE
NEXT: RRA ; Checa si el bit del operando 2 es 1
CALL MLTPLY ; Multiplica los numeros
JR NC, NOADD ; Si no evita sumar el operando 1
LD (OUTBUF),HL ; Almacena el resultado en OUTBUF
ADD HL,DE ; Si el bit es 1, entonces suma el operando 1
HALT
NOADD: EX DE,HL ; Shift a la izquierda un bit
ADD HL, HL
EX DE,HL
DEC B ; Decrementa el contador
JR NZ, NEXT ; Regresa para obtener el siguiente bit, sino
RET ; termina

You might also like