Mostrando entradas con la etiqueta Lenguajes de Interfaz. Mostrar todas las entradas
Mostrando entradas con la etiqueta Lenguajes de Interfaz. Mostrar todas las entradas
miércoles, 16 de mayo de 2018
miércoles, 18 de abril de 2018
Programa con macros: Multiplicación de dos cifras (EMU8086)
.model small ;Modelo de memoria
.stack
numero macro var
mov ah,01h ;Function(character read)
int 21h ;Interruption DOS functions
sub al,30h ;Convertimos a decimal
mov var,al ;Almacenamos en varible
endm
caracter macro chr
mov ah,02h ;Function(character to send to standard output)
mov dl,chr ;Caracter a imprimir en pantalla
int 21h ;Interruption DOS functions
endm
multiplicar macro var1, var2
mov al,var1
mov bl,var2
mul bl
endm
separar macro alta, baja
mov ah,00h ;Se limpia la parte alta de ax
AAM ;Separa el registro ax en su parte alta y baja
mov alta,ah
mov baja,al
endm
resultado macro var
mov ah,02h
mov dl,var
add dl,30h
int 21h
endm
.data ;Definicion de datos(variables), donde se almacenara informacion
;Variables del primer numero ingresado
unidades_n1 db ?
decenas_n1 db ?
;Variables del segundo numero ingresado
unidades_n2 db ?
decenas_n2 db ?
;Variables temporales para los resultados de la primera multiplicacion
res_temp_dec_n1 db ?
res_temp_cen_n1 db ?
;Variables temporales para los resultados de la segunda multiplicacion
res_temp_dec_n2 db ?
res_temp_cen_n2 db ?
;Variables para los resultados
res_unidades db ?
res_decenas db ?
res_centenas db ?
res_uni_millar db ?
;Variable de acarreo en multiplicacion
acarreo_mul db 0
;Variable de acarreo en suma
acarreo_suma db 0
.code
.startup
mov ah,00h ;Function(Set video mode)
mov al,03 ;Mode 80x25 8x8 16
int 10h ;Interruption Video
numero decenas_n1
numero unidades_n1
caracter '*'
numero decenas_n2
numero unidades_n2
caracter '='
;Realizamos las operaciones
;Primera multiplicacion
multiplicar unidades_n1, unidades_n2
separar acarreo_mul, res_unidades
;Segunda multiplicacion
multiplicar decenas_n1, unidades_n2
mov res_temp_dec_n1,al
mov bl,acarreo_mul
add res_temp_dec_n1,bl
mov al,res_temp_dec_n1
separar res_temp_cen_n1, res_temp_dec_n1
;Tercera multiplicacion
multiplicar unidades_n1, decenas_n2
separar acarreo_mul, res_temp_dec_n2
;Suma -> Decenas
mov bl, res_temp_dec_n1
add res_temp_dec_n2,bl
mov al, res_temp_dec_n2
separar acarreo_suma, res_decenas
;Cuarta multiplicacion
multiplicar decenas_n1, decenas_n2
mov res_temp_cen_n2,al
mov bl,acarreo_mul
add res_temp_cen_n2,bl
mov al,res_temp_cen_n2
separar res_uni_millar, res_temp_cen_n2
;Suma -> Centenas
mov bl, res_temp_cen_n1
add res_temp_cen_n2, bl
mov bl, acarreo_suma
add res_temp_cen_n2,bl
mov al,res_temp_cen_n2
separar acarreo_suma, res_centenas
;Acarreo para unidades de millar
mov bl, acarreo_suma
add res_uni_millar, bl
;Mostramos resultados
resultado res_uni_millar
resultado res_centenas
resultado res_decenas
resultado res_unidades
.exit
end
martes, 17 de abril de 2018
Ejercicio anterior de loop con macro
; Loop de tamanio entre 1-9 (utilizando macro)
; David Alejandro Mendoza Martinez
org 100h
.model small ;Modelo de memoria small
.stack 64 ;Segmento pila
imprimir macro msj ;Macro para imprimir mensajes en pantalla
mov ah, 09 ;Salida de una cadena de caracteres
lea dx, msj ;Cargar la direccion de cadena en DX
int 21h ;Interrupcion de sistema
endm
datos segment ;Segmento de datos
mensaje db "Ingresa el numero de veces que se repetira el mensaje (1-9)",13,10,'$'
repetir db 13,10,"Repitiendo el ciclo $"
datos ends
codigo segment ;Segmento de codigo
assume cs:codigo, ds:datos ;Asignacion de segmentos
inicio: ;Funcion inicio
mov ax, datos ;Movemos el segmento datos a AX
mov ds, ax ;Movemos lo que esta en el registro AX a DS
imprimir mensaje
mov ah, 01 ;Entrada de caracteres con eco
int 21h ;Interrupcion de sistema
sub al, 30h ;Conversion a digito del caracter ascii
mov cl, al ;Movemos a CL(contador) lo que hay en AL
ciclo: ;Inicio del ciclo
imprimir repetir
loop ciclo ;Fin del ciclo
mov ax,4c00h ;Terminar con codigo de retorno
int 21h ;Interrupcion de sistema
end inicio ;Fin de la funcion inicio
codigo ends ;Cierre del segmento codigo
lunes, 16 de abril de 2018
Programa que mueve un caracter a la posicion que indique el usuario (macros)
org 100h
.model small
TITLE Programa que solicita una cadena y una posicion para mostrarla
gotoxy macro fila,col ;Macro que pone el cursor en la posicion deseada
mov ah,02h ;Funcion imprimir caracter
mov dh,fila ;Ingresamos la coordenada de x
mov dl,col ;Ingresamos la coordenada de y
mov bh,0h ;Numero de pagina
int 10h ;Interrupcion
endm ;Fin del macro
pantalla macro que ;Macro que imprime el primer caracter de la palabra escrita
mov ah,02h ;Funcion imprimir caracter
mov dl,offset que ;Ponemos el mensaje en dl
int 21h ;Interrupcion
endm ;Fin del macro
imprime macro eztryng ;Macro que imprime los mensajes que le enviemos
mov dx,offset eztryng ;Ponemos elmensaje en dx
mov ah,9 ;Funcion imprimir variable
int 21h ;Interrupcion
endm ;Fin del macro
.data ;Segmento de datos con variables
mensaje DB "INGRESE UN CARACTER: ",13,10,"$"
mensaje2 DB "INGRESE X del 0 al 9: ",13,10,"$"
mensaje3 DB "INGRESE Y del 0 al 9: ",13,10,"$"
caracter DB ?
varx DB ?
vary DB ?
vaa db 0
vtext db 100 dup('$') ;Declaracion del vector
.code ;Segmento de codigo
inicio: ;Funcion de inicio
mov ax,@data ;Almacenamos lo que esta en el segento data
mov ds,ax ;Movemos ax a ds
imprime mensaje ;Llamamos al macro imprime y le enviamos la variable mensaje
mov si,00h ;Limpiamos el registro si
mov caracter,0 ;Limpiamos la variable caracter
leer: ;Inicio de la funcion leer
mov ax,0000 ;Limpiamos ax
mov ah,01h ;Funcion de ingreso de caracter con impresion del mismo en pantalla
int 21h ;Interrupcion
mov caracter[si],al ;Ponemos el caracter tecleado en el arreglo caracter
inc si ;Incrementamos si
cmp al,0dh ;Comparamos al=salto de linea
ja leer ;De no ser igual repite la funcion leer para ingresar otro caracter
jb leer ;En caso de que al=salto de linea continua el programa
mov ah,02h ;Funcion imprimir caracter
mov dl,10 ;Imprimimos un salto de linea
int 21h ;Interrupcion
imprime caracter ;Llamamos al macro imprime y le enviamos la variable caracter
mov ah,02h ;Funcion imprime caracter
mov dl,10 ;Imprimimos un salto de linea
int 21h ;Interrupcion
imprime mensaje2 ;Llamamos al macro imprime y le enviamos la variable mensaje2
mov ax,0000 ;Limpiamos ax
mov ah,01h ;Fincion de ingreso de caracter con impresion del mismo en pantalla
int 21h ;Interrupcion
sub al,30h ;Le restamos 30h al caracter ingresado para transformarlo en un numero
mov bl,al ;Ponemos el numero en bl
mov varx,al ;Ponemos el numero en varx
imprime mensaje3 ;Llamamos al macro imprime y le enviamos la variable mensaje3
mov ah,01h ;Funcion de ingreso de caracter con impresion del mismo en pantalla
int 21h ;Interrupcion
sub al,30h ;Le restamos 30h al caracter ingresado para transformarlo en un numero
mov bl,al ;Ponemos el numero en bl
mov vary,al ;Ponemos el numero en vary
mov ax,0003h ;Funcion que limpia la pantalla
int 10h ;Interrupcion de sistema
mov ah,01h ;Funcion de captura con impresion en pantalla
int 21h ;Interrupcion
mov ax,4c00h ;Funcion de fin
int 21h ;Interrupcion
end inicio ;Fin de la function inicio
martes, 20 de marzo de 2018
jueves, 15 de marzo de 2018
Programa de multiplicación de números de 2 cifras
;EMU8086
.model small ;Modelo de memoria .stack .data ;Definicion de datos(variables), donde se almacenara informacion .code ;Variables del primer numero ingresado unidades_n1 db ? decenas_n1 db ? ;Variables del segundo numero ingresado unidades_n2 db ? decenas_n2 db ? ;Variables temporales para los resultados de la primera multiplicacion res_temp_dec_n1 db ? res_temp_cen_n1 db ? ;Variables temporales paara los resultados de la segunda multiplicacion res_temp_dec_n2 db ? res_temp_cen_n2 db ? ;Variables para los resultados res_unidades db ? res_decenas db ? res_centenas db ? res_uni_millar db ? ;Variable de acarreo en multiplicacion acarreo_mul db 0 ;Variable de acarreo en suma acarreo_suma db 0 .startup ;cls mov ah,00h ;Function(Set video mode) mov al,03 ;Mode 80x25 8x8 16 int 10h ;Interruption Video mov ah,01h ;Function(character read) int 21h ;Interruption DOS functions sub al,30h ;ajustamos valores mov decenas_n1,al ;[chr1].chr2 * chr3 = ac.r1.r2 mov ah,01h ;Function(character read) int 21h ;Interruption DOS functions sub al,30h ;Ajustamos valores mov unidades_n1,al ;chr1.[chr2] * chr3 = ac.r1.r2 mov ah,02h ;Function(character to send to standard output) mov dl,'*' ;Character to show int 21h mov ah,01h ;Function(Read character) int 21h ;Interruption DOS Functions sub al,30h ;Transform(0dec = 30hex) mov decenas_n2,al ;chr1.chr2 * [chr3] = ac.r1.r2 mov ah,01h ;Function(Read character) int 21h ;Interruption DOS Functions sub al,30h ;Transform(0dec = 30hex) mov unidades_n2,al mov ah,02h ;Character to send to standar output mov dl,'=' ; int 21h ;Interruption DOS functions ;Realizamos las operaciones ;Primera multiplicacion ; Explicacion utilizando la multiplicacion de 99*99 ->(n1*n2) mov al,unidades_n1 ; al=9 mov bl,unidades_n2 ; bl=9 mul bl ; 9*9=81 -> (al=81) mov ah,00h ; AAM ; Separa el registro ax en su parte alta y baja mov acarreo_mul,ah ; acarreo_mul = 8 mov res_unidades,al ; res_unidades= 1 -> Reultado de unidades ;Segunda multiplicacion mov al,decenas_n1 ; al=9 mov bl,unidades_n2 ; bl=9 mul bl ; 9*9=81 -> (al=81) mov res_temp_dec_n1,al ; res_temp_dec_n1= 81 mov bl,acarreo_mul ; bl= 8 add res_temp_dec_n1,bl ; res_temp_dec_n1= 81+8= 89 mov ah,00h ; mov al,res_temp_dec_n1 ; al= 89 AAM ; Separa el registro ax en su parte alta y baja mov res_temp_cen_n1,ah ; res_temp_cen_n1= 8 mov res_temp_dec_n1,al ; res_temp_dec_n1= 9 ;Tercera multiplicacion ; Resultado actual = 000>1 mov al,unidades_n1 ; al= 9 mov bl,decenas_n2 ; bl= 9 mul bl ; 9*9=81 -> (al=81) mov ah,00h ; AAM ; Separa el registro ax en su parte alta y baja mov acarreo_mul,ah ; acarreo_mul= 8 mov res_temp_dec_n2,al ; res_temp_dec_n2= 1 ; mov bl, res_temp_dec_n1 ; bl= 9 add res_temp_dec_n2,bl ; res_temp_dec_n2= 1+9= 10 mov ah,00h ; mov al, res_temp_dec_n2 ; al = 10 AAM ; Separa el registro ax en su parte alta y baja mov acarreo_suma, ah ; acarreo_suma = 1 mov res_decenas,al ; res_decenas = 0 -> Reultado de decenas ;Tercera multiplicacion ; Resultado actual = 00>01 mov al,decenas_n1 ; al= 9 mov bl,decenas_n2 ; bl= 9 mul bl ; 9*9=81 -> (al=81) mov res_temp_cen_n2,al ; res_temp_cen_n2= 81 mov bl,acarreo_mul ; bl= 8 add res_temp_cen_n2,bl ; res_temp_cen_n2= 89 mov ah,00h ; mov al,res_temp_cen_n2 ; al= 89 AAM ; Separa el registro ax en su parte alta y baja mov res_uni_millar,ah ; res_uni_millar = 8 mov res_temp_cen_n2,al ; res_temp_cen_n2= 9 ; mov bl, res_temp_cen_n1 ; bl= 8 add res_temp_cen_n2, bl ; res_temp_cen_n2= 17 mov bl, acarreo_suma ; bl= 1 add res_temp_cen_n2,bl ; res_temp_cen_n2= 17+1= 18 mov ah,00h ; mov al,res_temp_cen_n2 ; al= 18 AAM ; mov acarreo_suma,ah ; acarreo_suma= 1 mov res_centenas,al ; res_centenas= 8 -> Resultado de centenas ; Resultado actual= 0>801 mov bl, acarreo_suma ; bl= 1 add res_uni_millar, bl ; res_uni_millar= 8+1= 9 -> Resultado de unidades de millar ; Reultado actual 9801 ;Mostramos resultados mov ah,02h mov dl,res_uni_millar add dl,30h int 21h mov ah,02h mov dl,res_centenas add dl,30h int 21h mov ah,02H mov dl,res_decenas add dl,30h int 21h mov ah,02H mov dl,res_unidades add dl,30h int 21h .exit end
martes, 13 de marzo de 2018
Loop que imprime letras de colores - Aportación de Emanuel Horta
;EMU8086
BIOS EQU 10H
DOS EQU 21H
FIN EQU 4C00H
.DATA
TITULO DB 'Agnax & Alizz '
COLORES DB 5BH
DB 5FH
DB 5BH
DB 5FH
DB 5BH
DB 00H
DB 0F0H
DB 00H
DB 09CH
DB 09FH
DB 09CH
DB 09FH
DB 09CH
DB 00H
DB 0CH
.CODE
INICIO PROC NEAR:
MOV AX, @DATA
MOV DS, AX
;Esta parte de aqui no es necesaria
INT BIOS
MOV CX, 15
BUCLE:
;Ponemos esto para no agarrar basura
MOV DX,SI
ADD DX,35 ;Columna
MOV DH, 12 ;Renglon
CALL COLOCA
MOV AL, [SI+OFFSET TITULO]
MOV BL, [SI+OFFSET COLORES]
CALL COLOR
INC SI
LOOPNZ BUCLE
MOV AH, 0
INT DOS
CALL COLOCA
MOV AX, FIN
INT DOS
COLOR PROC
MOV AH, 9
INT BIOS
RET
COLOCA PROC
MOV AH,2
INT BIOS
RET
END INICIO
;Turbo Assembler
.MODEL SMALL
PILA SEGMENT STACK
DB 64 DUP('PILA ')
PILA ENDS
BIOS EQU 10H
DOS EQU 21H
FIN EQU 4C00H
DATO SEGMENT
TITULO DB 'Agnax & Alizz '
COLORES DB 5BH
DB 5FH
DB 5BH
DB 5FH
DB 5BH
DB 00H
DB 0F0H
DB 00H
DB 09CH
DB 09FH
DB 09CH
DB 09FH
DB 09CH
DB 00H
DB 0CH
DATO ENDS
CODIGO SEGMENT
ASSUME DS:DATO, CS:CODIGO, SS:PILA
INICIO PROC NEAR
MOV AX, DATO
MOV DS, AX
;Esta parte de aqui no es necesaria
INT BIOS
MOV CX, 15
BUCLE:
;Ponemos esto para no agarrar basura
MOV DX,SI
ADD DX,35 ;columna
MOV DH,12 ;renglon
CALL COLOCA
MOV AL, [SI+OFFSET TITULO]
MOV BL, [SI+OFFSET COLORES]
CALL COLOR
INC SI
LOOPNZ BUCLE
MOV AH,0
INT DOS
CALL COLOCA
MOV AX, FIN
INT DOS
COLOR PROC
MOV AH, 9
INT BIOS
RET
COLOCA PROC
MOV AH,2
INT BIOS
RET
END INICIO
CODIGO ENDS
jueves, 1 de marzo de 2018
Tarea: Ejemplo de loop
;Turbo Assembler
.model small
.stack 64
datos segment
mensaje db "Ingresa el numero de veces que se repetira el mensaje (1-9)",13,10,'$'
repetir db 13,10,"Repitiendo el ciclo $"
datos ends
codigo segment
assume cs:codigo, ds:datos
inicio:
mov ax, datos
mov ds, ax
mov ah, 09
lea dx, mensaje
int 21h
mov ah, 01
int 21h
sub al, 30h
mov cl, al
ciclo:
mov ah, 09
lea dx, repetir
int 21h
loop ciclo
mov ax,4c00h
int 21h
codigo ends
end inicio
;EMU8086
.model small .stack 64 .data mensaje db "Ingresa el numero de veces que se repetira el mensaje (1-9)",13,10,'$' repetir db 13,10,"Repitiendo el ciclo $" .code inicio proc far mov ax, @data mov ds, ax mov ah, 09 lea dx, mensaje int 21h mov ah, 01 int 21h sub al, 30h mov cl, al ciclo: mov ah, 09 lea dx, repetir int 21h loop ciclo mov ax,4c00h int 21h inicio endp end
miércoles, 28 de febrero de 2018
Práctica en ensamblador: Menú de opciones
;EMU8086
org 100h
.stack 64
.data
titulo db 13,10,'CAMBIAR FONDO DE PANTALLA',13,10,'$'
mensaje db '-Presione 0 para modo por default',13,10,'-Presione 1 para azul',13,10,'-Presione 2 para morado',13,10,'-Presione 3 para gris con letras negras',13,10,'Para salir, presione cualquier otra tecla',13,10,'$'
mensaje1 db 'Pantalla en color azul',13,10,'$'
mensaje2 db 'Pantalla en color morado',13,10,'$'
mensaje3 db 'Pantalla en color gris con letras negras',13,10,'$'
.code
inicio: ;Funcion
;---------------------------------------------------
;mov ah, 0 ;limpia el registro
;mov al,3h ;modo de texto
;int 10h ;interrupcion de video
;mov bh,0fh ;0 color negro , f color de letra blanca
;mov cx,0000h ;es la esquina superior izquierda reglon: columna
;mov dx,184Fh ;es la esquina inferior derecha reglon: columna
;int 10h
;--------------------------------------------------
mov ax,@data ;llamar a .data
mov ds,ax ;guardar los datos en ds
lea dx,titulo ;imprimir el mensaje
mov ah,9h
int 21h
lea dx,mensaje ;imprimir mensaje
mov ah,9h
int 21h
;---------------------------------------------------
mov ah,08 ;pausa y espera a que el usuario precione una tecla
int 21h ;interrupcion para capturar
cmp al,48
je llamarDefault
cmp al,49
je llamarAzul
cmp al,50
je llamarMorado
cmp al,51
je llamarGris
jmp fin
fin:
mov ax,4c00h ;funcion que termina el programa
int 21h
llamarDefault:
CALL DEFAULT
llamarAzul:
CALL AZULPROC ;llama al procedimiento
llamarMorado:
CALL MORADOPROC ;llama al procedimiento
llamarGris:
CALL GRISPROC
DEFAULT PROC NEAR
mov ah, 0 ;limpia el registro
mov al,3h ;modo de texto
int 10h
mov ax,0600h
mov bh,07h
mov cx,0000h
mov dx,184Fh
int 10h
CALL inicio
DEFAULT ENDP
AZULPROC PROC NEAR
mov ah,0
mov al,3h
int 10h
mov ax,0600h
mov bh,1fh
mov cx,0000h
mov dx,184Fh
int 10h
lea dx,mensaje1
mov ah,9h
int 21h
CALL inicio
RET
AZULPROC ENDP
MORADOPROC PROC NEAR
mov ah,0
mov al,3h
int 10h
mov ax,0600h
mov bh,5fh
mov cx,0000h
mov dx,184Fh
int 10h
lea dx,mensaje2
mov ah,9h
int 21h
CALL inicio
RET
MORADOPROC ENDP
GRISPROC PROC NEAR
mov ah,0
mov al,3h
int 10h
mov ax,0600h
mov bh,80h
mov cx,0000h
mov dx,184Fh
int 10h
lea dx,mensaje3
mov ah,9h
int 21h
CALL inicio
RET
GRISPROC ENDP
end inicio
;TURBO ASSEMBLER
datos segment
titulo db 13,10,'CAMBIAR FONDO DE PANTALLA',13,10,'$'
mensaje db '-Presione 0 para modo por default',13,10,'-Presione 1 para azul',13,10,'-Presione 2 para morado',13,10,'-Presione 3 para gris con letras negras',13,10,'Para salir presione cualquier otra tecla',13,10,'$'
mensaje1 db 'Pantalla en color azul',13,10,'$'
mensaje2 db 'Pantalla en color morado',13,10,'$'
mensaje3 db 'Pantalla en color gris con letras negras',13,10,'$'
datos ends
codigo segment
assume ds:datos, cs:codigo
inicio: ;Funcion
;---------------------------------------------------
;mov ah, 0 ;limpia el registro
;mov al,3h ;modo de texto
;int 10h ;interrupcion de video
;mov bh,0fh ;0 color negro , f color de letra blanca
;mov cx,0000h ;es la esquina superior izquierda reglon: columna
;mov dx,184Fh ;es la esquina inferior derecha reglon: columna
;int 10h
;--------------------------------------------------
mov ax,datos ;llamar a .data
mov ds,ax ;guardar los datos en ds
lea dx,titulo ;imprimir el mensaje
mov ah,9h
int 21h
lea dx,mensaje ;imprimir mensaje
mov ah,9h
int 21h
;---------------------------------------------------
mov ah,08 ;pausa y espera a que el usuario precione una tecla
int 21h ;interrupcion para capturar
cmp al,48
je llamarDefault
cmp al,49
je llamarAzul
cmp al,50
je llamarMorado
cmp al,51
je llamarGris
jmp fin
fin:
mov ax,4c00h ;funcion que termina el programa
int 21h
llamarDefault:
CALL DEFAULT
llamarAzul:
CALL AZULPROC ;llama al procedimiento
llamarMorado:
CALL MORADOPROC ;llama al procedimiento
llamarGris:
CALL GRISPROC
DEFAULT PROC NEAR
mov ah, 0 ;limpia el registro
mov al,3h ;modo de texto
int 10h
mov ax,0600h
mov bh,07h
mov cx,0000h
mov dx,184Fh
int 10h
CALL inicio
DEFAULT ENDP
AZULPROC PROC NEAR
mov ah,0
mov al,3h
int 10h
mov ax,0600h
mov bh,1fh
mov cx,0000h
mov dx,184Fh
int 10h
lea dx,mensaje1
mov ah,9h
int 21h
CALL inicio
RET
AZULPROC ENDP
MORADOPROC PROC NEAR
mov ah,0
mov al,3h
int 10h
mov ax,0600h
mov bh,5fh
mov cx,0000h
mov dx,184Fh
int 10h
lea dx,mensaje2
mov ah,9h
int 21h
CALL inicio
RET
MORADOPROC ENDP
GRISPROC PROC NEAR
mov ah,0
mov al,3h
int 10h
mov ax,0600h
mov bh,70h
mov cx,0000h
mov dx,184Fh
int 10h
lea dx,mensaje3
mov ah,9h
int 21h
CALL inicio
RET
GRISPROC ENDP
codigo ends
end inicio
sábado, 24 de febrero de 2018
jueves, 22 de febrero de 2018
miércoles, 21 de febrero de 2018
martes, 20 de febrero de 2018
Registros de puntero (apuntadores)
Registro de Apuntador de Instrucciones (IP). Es de 16 bits y 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.
Registros
Apuntadores. Los registros SP
(apuntador de la pila) Y BP (apuntador de base) están asociados con
el registro SS y permiten al sistema accesar datos en el segmento de
la pila.
- Registro SP. El apuntador de la pila de 16 bits esta asociado con el registro SS y proporciona un valor de desplazamiento que se refiere a la palabra actual que esta siendo procesada en la pila. Los procesadores 80386 y posteriores tienen un apuntador de pila de 32 bits, el registro ESP. El sistema maneja de forma automática estos registros.
- Registro BP. El BP de 16 bits facilita la referencia de parámetros, los cuales son datos y direcciones transmitidos vía pila. Los procesadores 80386 y posteriores tienen un BP ampliado de 32 bits llamado el registro EBP.
Registros Indice. Los registros SI y
DI están disponibles para direccionamiento indexado y para sumas y
restas.
- 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. Los procesadores 80386 y posteriores permiten el uso de un registro ampliado de 32 bits, el ESI.
- 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. Los procesadores 80386 y posteriores permiten el uso de un registro ampliado de 32 bits, el EDI.
jueves, 15 de febrero de 2018
Suscribirse a:
Entradas (Atom)