Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
model small
.stack 100h
.data
;Declaracion de variables
suma dw 0
sumatoria dw 0
cont dw 100
valor db 0
parche db "$"
array db 50 dup(0), "$"
salto db 10,13, 10,13, "$"
pkey db "muestre la tabla a ordenar:",10,13
mesjenter db "inserte un numero para optar por una opcion, o presione enter
para regresar:","$"
msjmenu db "opcion no valida, elije segun el menu:","$"
;**************************************************************************
; DESPLIEGUE DE OPCIONES
*
;**************************************************************************
mostramos_tabla:
mov dx,offset tabla_numerica
mov ah,09
int 21h
jmp menu
menu:
mov dx,offset opciones ;leemos el contenido de las opciones
mov ah,09 ;estamos en uso del sevicio 09
int 21h ;con esta interrupcion veremos el despliegue en la
pantalla
;**************************************************************************
; ORDENAMIENTO DE TABLA
*
;**************************************************************************
ordenamiento_tabla:
call limpiar
lea dx,tabla ;pasamos el contenido de la variable pkey al
registo dx
mov ah,09
int 21h
mov si,0 ;colocamnos el indice del arreglo en cero
mov ah,01 ;utilizamos el servicio 1 para colocar datos
mov cx,ax
mov array[si],cl ;pasamos el contenido al arreglo
lea dx,parche ;pasamos el contenido de parche al registo dx
mov ah,09
int 21h
add si,01 ;incrementamos el indice en 1 para movernos en el
arreglo
call limpiar ; mandamos a la etiqueta limpiar
jmp menu ;esta etiqueta imprime el arreglo
imprimir_array:
call limpiar
mov dx, offset salto
mov ah,09
int 21h
lea dx,array[si] ;imprimimos el arreglo
mov ah,09
int 21h
mov dx, offset mesjenter ;desplegamos el mensaje contenido en la variable
mesjenter
mov ah,09
int 21h
ir_menu:
mov ah,01 ;pedimos un enter para regresar
int 21h
cmp al,0Dh ;comparamos lo que insertamos con 0dh
jb ir_menu ; si es menor volvemos a ir_menu y pedimos un nuevo
enter
ja ir_menu ;si es mayor volvemos a ir_menu y pedimos un nuevo
enter
call limpiar
jmp menu
ordena:
mov si,0
mov cx,09
cicloi:
cicloj:
inc di ;incrementamos en 1 a di di=di+1
mov al,[si] ;el contenido de si lo pasamos al registro al
cmp al,[di]
ja intercambio; ;si el numero que hay es mayor en al es mayor que
el que hay di saltamos a intercambio
jmp imasi ;si no saltamos a imai
error_menu:
call limpiar
mov dx, offset msjmenu
mov ah,09
int 21h
jmp menu
limpiar:
mov ah,00h
mov al,03h
int 10h
ret
;**************************************************************************
; NUMEROS BCB
*
;**************************************************************************
numeros_bcd_encontrados:
mov ax,@data
mov ds,ax
mov es,ax
mov cx,cont
lea si,tabla
lea di,t_bcd
cld
lazo3:
mov ax,[si]
cmp ax,0
jae es_mayor_cero
jmp sigo3
es_mayor_cero:
cmp ax,9
jle es_menor_nueve
jmp sigo3
es_menor_nueve:
inc cont_bcd
movsw
dec si
dec si
sigo3:
inc si
inc si
dec cx
loop lazo3
;si se desea ver el resultado en ascii suma 30h a cont_bcd
jmp salir
;**************************************************************************
; PROMEDIO DE LA TABLA
*
;**************************************************************************
promedio_total:
mov ax,@data
mov ds,ax
mov cx,cont
lea si,tabla
cld
lazo:
mov ax,[si]
add suma,ax
inc sumatoria
inc si
inc si
dec cx
loop lazo
mov ax,suma
mov cx,sumatoria
cwd
div cx
mov cociente,ax
mov residuo, dx
jmp salir
;**************************************************************************
; Reemplazar el valor por el negado del mismo en la cadena
*
;**************************************************************************
reemplazo_por_negado:
mov dx, offset mensaje6
mov ah,09
int 21h
mov ah,01
int 21h
cmp al,30h
jb noesN
cmp al,39h
ja noesN
jmp sies
sies:
sub al,30h
mov valor,al
jmp selecciono_r
noesN:
selecciono_r:
mov ax,@data
mov ds,ax
lea si,tabla
rutina:
mov al,valor
cmp [si],al
je aumento_contador
continuoE:
inc si
inc si
dec cont
dec cont
cmp cont,0
je final_E
jmp rutina
aumento_contador:
inc cont_e
mov bx,[si]
neg bx
mov [si],bx
jmp continuoE
final_E:
add cont_e,30h
jmp salir
salir:
mov ax,4c00h
int 21h
end