Instrucciones de 16-bits Ejemplo Suma y Resta con Carry Suma y

Anuncio
08/11/2011
1
Instrucciones de 16-bits
OPCODE
OPERANDO BYTES DESCRIPCION
LD
HL,(16-bits)
3
Copia el contenido de la locación de
memoria especificada por el operando de
16-bits
LD
(16-bits), HL
3
Copia el contenido del par de registros HL
en la locación de memoria especificada
por HL
LD
SP, HL
1
Copia el contenido de HL al apuntador al
stack SP
JP
(HL)
1
Carga el contenido de HL en el contador
del programa. Esta instrucción es
equivalente a
LD PC,HL
5A
UNIDAD 5 –
PARTE
PROGRAMANDO EN EL
ENSAMBLADOR DEL Z80
Otoño 2011
Microprocesadores
Ejemplo
Suma y Resta con Carry
Memoria
Condiciones Iníciales
LD HL,(2050H)
EX DE,HL
LD (2050H),HL
D
85
6F
E
2050
3F
H
00
00
L
2051
42
D
85
6F
E
2050
3F
H
42
3F
L
2051
42
D
42
3F
E
2050
3F
H
85
6F
L
2051
42
D
42
3F
E
2050
6F
H
85
6F
L
2051
85
Suma y Resta con Carry



Esta instrucción sirve para sumar una lista de
números tomando en cuenta el carry generado en
cada suma
También puede ser usada para sumar números de
16-bits
Ejemplo:

Suma el 2793H y el 3182H y guarda el resultado en
la locación de memoria 2050H y 2051H. Suponga
que los números se encuentran en BC y DE
respectivamente
OPCODE OPERANDO
ADC
ADC
ADC
ADC
SBC
SBC
SBC
SBC
DESCRIPCION
A,r
A, 8-bits
A, (HL)
A, (IX+d)
A,r
A, 8-bits
A, (HL)
A, (IX+d)
Suma el operando, carry y el
acumulador. El resultado es
almacenado en el acumulador.
A = OPERANDO + CY + A
Resta el contenido del operando y
el borrow del contenido del
acumulador y el resultado es
puesto en el acumulador
A = A – OPERANDO – CY
Suma y Resta con Carry
Memoria
Condiciones Iníciales
B
27
93
C
2050
XX
D
31
82
E
2051
XX
93H  (A)
LD A,C
ADD A,E
A
93
XX
F
A
15
CY =1
F
LD L,A
LD A,D
ADC A,B
H
15
L
1H  CY
CY =1
F
31H  (A)
LD
LD
H
59
15
L
2050
15 H
A
59
CY =0
F
2051
59 H
A
31
+ 82H  (E)
115H
+ 27H  (B)
59H
H,A
(2050H),HL
A
1
08/11/2011
Suma de 16-bits
OPCODE
Suma de 16-bits
OPERANDO DESCRIPCION
ADD
HL,BC
ADD
HL,DE
ADD
HL,HL
ADD
HL,SP
Suma el contenido del operando
(par de registros o apuntador al
stack) al contenido del registro HL, y
el resultado es puesto en el registro
HL.
La bandera del carry es alterada
para reflejar el resultado de la
suma de 16-bits. Ninguna otra
bandera es alterada
Esta instrucción usa HL como el
acumulador de 16-bits
Ejemplo



LD
ADD
LD
LD
ADC
LD
LD
A,C
A,E
L,A
A,D
A,B
H,A
(2050H),HL
SLA
SLA
SLA
SLA
SLA
SLA
SLA
SLA
H
H
H
H
L
L
L
L
EX HL,BC
ADD HL,DE
LD
(2050H),HL
;Shift a la izquierda 4 posiciones
ADD HL,HL
1231 + 1231 = 2462
HL
ADD HL,HL
2462 + 2462 = 48C4
HL
ADD HL,HL
48C4 + 48C4 = 9188
HL
ADD HL,HL
9188 + 9188 = 2310
HL
Subrutina ADBYTE
Dos números de 32-bits están almacenados en el
BUFF1 y BUFF2 respectivamente.
La subrutina ADBYTE suma los números y el
resultado es almacenado en el BUFF1
Los parámetros de entrada son
ADBYTE: ; Esta subrutina suma dos números de múltiples bytes y almacena el
; resultado en memoria, reemplazando el primer numero
; Entrada: Dirección de los números a ser sumados en HL y DE, El tamaño de
;
los números en bytes en el registro B
; Salida: Suma almacenada en memoria
; Registros Modificados: B, DE, HL y el acumulador
START:
XOR
A
; Limpia la bandera del carry
NEXT:
LD
A,(DE)
; Carga el byte del BUFF2
ADC
A,(HL)
; Suma el byte del BUFF1
LD
(HL),A
; Guarda el resultado parcial
INC
HL
; Actualiza los apuntadores a memoria
INC
DE
DEC
B
; Actualiza el contador para la siguiente suma
JR
NZ, NEXT
; Si el contador es diferente de cero continua
 Operando
1 apuntado por HL
 Operando 2 apuntado por DE
 El tamaño del operando en bytes en B
RET
Programa Principal
Multiplicacion Binaria

MAIN:
NEXT:
LD
SP, STACK
LD
HL, BUFF1
LD
DE, BUFF2
LD
B,04H
; Inicializa el contador especificando el
; numero de bytes a ser sumado
CALL
ADBYTE
; Realiza la suma
HALT
; Inicializa apuntadores

La multiplicación binaria de M × N puede ser
realizada por medio de sumar M, N veces.
Una forma mas eficaz de multiplicación binaria es
el siguiente procedimiento
111
× 101
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:
NEXT:
; Esta subrutina multiplica dos números sin signo
; 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
LD
HL,0
; Limpia HL
LD
B,08H
; Inicializa el contador a 8
RRA
; Checa si el bit del operando 2 es 1
JR
NC, NOADD
; Si no evita sumar el operando 1
ADD
HL,DE
; Si el bit es 1, entonces suma el operando 1
DE,HL
; Shift a la izquierda un bit
NOADD: EX
ADD
HL, HL
EX
DE,HL
DEC
B
; Decrementa el contador
JR
NZ, NEXT
; Regresa para obtener el siguiente bit, sino
RET
Programa Principal
MAIN:
NEXT:
LD
SP, STACK
LD
HL, (BUF1)
; Obten los operandos
EX
DE, HL
; Copialos en DE
CALL
MLTPLY
; Multiplica los numeros
LD
(OUTBUF),HL
; Almacena el resultado en OUTBUF
HALT
; termina
3
Descargar