La pila es un área de memoria importante y por ello tiene, en vez de uno, dos registros que se usan como desplazamiento (offset) para apuntar a su contenido. Se usan como complemento al registro y son:
1- SP- Stack Pointer: Se traduce como puntero de pila y es el que se reserva el procesador para uso propio en instrucciones de manipulado de pila. Por lo general, el programador no debe alterar su contenido.
2- BP- Base pointer: Se usa como registro auxiliar. El programador puede usarlo para su provecho.
Registro de Apuntador de Instrucciones
El registro apuntador de instrucciones (IP) de 16 bits contiene el desplazamiento de dirección de la siguiente instrucción que se ejecuta. El IP esta asociado con el registro CS en el sentido de que el IP indica la instrucción actual dentro del segmento de código que se esta ejecutando actualmente. Los procesadores 80386 y posteriores tienen un IP ampliado de 32 bits, llamado EIP.
Registro SI. El registro índice fuente de 16 bits es requerido por algunas operaciones con cadenas (de caracteres). En este contexto, el SI esta asociado con el registro DS.
Registro DI. El registro índice destino también es requerido por algunas operaciones con cadenas de caracteres. En este contexto, el DI esta asociado con el registro ES.
Ejercicio del vídeo en EMU8086
INGRESAR DATOS
.model small
.stack 64
.data
n1 db 0
n2 db 0
suma db 0
msg1 db "Dame el primer valor", '$'
msg2 db 10, 13, "Dame el segundo valor", '$'
msg3 db 10,13, "Suma", '$'
.code
inicio:
; direccionamos al segmento de datos
mov ax, @data
mov ds, ax
; solicitamos el primer digito
mov ah,09
lea dx, msg1
int 21h
; se lee el primer valor
mov ah,01
int 21h
sub al, 30h ; convertir el caracter a numero
mov n1,al
; solicitamos el segundo digito
mov ah, 09
lea dx, msg2
int 21h
; se lee el primer valor
mov ah,01
int 21h
sub al, 30h ; convertir el caracter a numero
mov n2, al
; operacion
mov al, n1
add al, n2
add al, 30h ; convierte el caracter
mov suma, al
mov ah, 09
lea dx, msg3
int 21h
; se imprime el caracter con el servicio 02 de la int 21h
mov ah, 02
mov dl, suma
int 21h
mov ah, 4ch
end inicio
end
Ejercicio del vídeo en EMU8086
INGRESAR DATOS
.model small
.stack 64
.data
n1 db 0
n2 db 0
suma db 0
msg1 db "Dame el primer valor", '$'
msg2 db 10, 13, "Dame el segundo valor", '$'
msg3 db 10,13, "Suma", '$'
.code
inicio:
; direccionamos al segmento de datos
mov ax, @data
mov ds, ax
; solicitamos el primer digito
mov ah,09
lea dx, msg1
int 21h
; se lee el primer valor
mov ah,01
int 21h
sub al, 30h ; convertir el caracter a numero
mov n1,al
; solicitamos el segundo digito
mov ah, 09
lea dx, msg2
int 21h
; se lee el primer valor
mov ah,01
int 21h
sub al, 30h ; convertir el caracter a numero
mov n2, al
; operacion
mov al, n1
add al, n2
add al, 30h ; convierte el caracter
mov suma, al
mov ah, 09
lea dx, msg3
int 21h
; se imprime el caracter con el servicio 02 de la int 21h
mov ah, 02
mov dl, suma
int 21h
mov ah, 4ch
end inicio
end
No hay comentarios.:
Publicar un comentario