8086 problemas de programación (usando lenguaje ensamblador)
;Este programa se compila y ejecuta correctamente.
Fragmento de código
Asumir CS: Código, DS: Código
-
Función: Convertir números binarios en AX a comprimidos; Código BCD.
; Entrada: AX=número binario de 16 bits (debido a que el código BCD comprimido máximo es 9999H, el valor binario de AX no puede ser mayor que 270FH).
;Salir: AX=Código BCD convertido y comprimido.
Binary_BCD Proc cerca
Empujar dx
Empujar cx
Empujar bx
Empujar di
mov @@Temp_Save, 0
mov @@Temp_Save[2], 0; Establece la ubicación de almacenamiento temporal de palabras dobles en 0.
mov bx, 10
lea di, @@Temp_Save[3]
cld
@@Divide: xor dx, dx
Parte bx
mov [di], dl; guarda el resto
2 de diciembre
Prueba hacha, 0ffffh
jnz @ @except
mov cl, 4
mov ax, @@Temp_Save[2]
xchg ah, al
shl al, cl
Diodo quimioluminiscente
mov dl, ah
Mover eje, @@Temp_Save
xchg ah,al
shl al,cl
Diodo quimioluminiscente
Movimiento al,dl
popudi
pop bx p>
Pop cx
Pop dx
Remojado en agua para suavizar
@@Temp_Save dw 2 dup(?)
Binary_BCD EndP
; -
; Función: convierte el código BCD comprimido en AX en un número binario.
; Entrada: AX=Código BCD comprimido
; Salida: AX= 16 número binario convertido.
BCD_Binary Proc cerca
Empujar dx
Empujar cx
Empujar bx
mov dx, ax p> p>
mov bx, 10
mov cl, 4
Shhh, cl
xchg ah, al
estrofa de palabras ampliada a palabras
push dx
múltiples bx
popular dx
y dh, 0fh
xchg dh, dl
Empujar dx
XOR dh, dh
Agregar ax, dx
Múltiples bx
Dx popular
xchg dh, dl
XOR dh, dh
Push dx
shr dx, cl
Agregar ax, dx
Bx múltiple
Dx popular
y D1, 0fh
Agregar ax, dx
pop bx
Pop cx
Pop dx
Remojado en agua para suavizar
BCD_Binary EndP
;-
Inicio: push cs
Cámara digital pop
Push cs
pop es habilita segmento de datos, segmento adicional y segmento de código se convierte en el mismo segmento.
mov ax, 3456
Llame a Binary_BCD para convertir el número binario en AX en un código BCD comprimido
Llame a BCD_Binary para convertir el código BCD comprimido en AX Convert Código BCD a número binario.
Exit_Proc: mov ah, 4ch finaliza el programa
int 21h
Fin del código
El fin comienza, este es el final de la compilación;
p>
2. Hay una matriz en la sección adicional, la primera dirección es BUFF y el primer byte de la matriz almacena la longitud de la matriz. Escriba un programa para encontrar 0 en la matriz, elimínelo de la matriz después de encontrarlo, comprima los elementos posteriores y complete el resto con 0.
;Este programa se compila y ejecuta correctamente.
Segmento de código
Asumir CS:Code, DS:Code
BUFF db 10, 56, 78, 35, 0, 89, 51, 63, 0 , 76, 123
Inicio: push cs
Pop cámara digital
Push cs
pop es hace el segmento de datos, segmento adicional y Los segmentos de código se convierten en el mismo segmento.
cld
lea si, dirección del encabezado de la matriz BUFF → si
lodsb lee la longitud de la matriz
XOR ah, ah
p>Empujar ax
pop cx longitud de la matriz→cx
buscar _ Cero: lodsb; los elementos de la matriz se leen en el acumulador a1
cmp al , 0; ¿es 0?
jnz Siguiente _ Uno no es 0, salta al siguiente elemento.
-
Si se encuentra 0, se elimina de la matriz, los elementos siguientes se comprimen hacia adelante y el resto se completa con 0.
Push si
Popudi
2 de diciembre
Push di
Push cx
Cx de diciembre
Representa movsb
puntero de bytes mov [si-1], 0
Cx popular
Pops
;-
Next_One: Loop Find_Zero
Exit_Proc: mov ah, 4ch fin del programa
int 21h
Fin del código
El fin comienza; este es el final de la compilación
3 Escriba un programa para contar los puntajes de matemáticas de los estudiantes y dividirlos en 90 ~ 99 puntos, 80 ~ 89 puntos, 70 ~. 79 puntos, 60~69 puntos, menos de 60 puntos, y el número de personas en cada sección se envía a la unidad de memoria.
;Este programa se compila y ejecuta correctamente.
Segmento de código
Asume CS:Code, DS:Code
;-
;Función: retorno de carro de salida y avance de línea
p>
Entrar cerca de CTLF
Empujar hacha
Empujar dx
mov ah, 02h
mov dl, 0dh
p>int 21h
mov dl, 0ah
int 21h
dx popular
barril de voladura
El remojo suaviza
Ingrese el punto final _CTLF
;-
Función: Convertir el número binario sin signo en AL a; código ASCII decimal explícito.
; Entrada: AL=número binario; Di=dirección de almacenamiento ASCII convertida.
; Salir: Ninguno
Cerca de Dec_ASCII Proc
Empujar si
Empujar cx
Empujar bx p> p>
Push di
mov bl, 10
XOR cx, cx
lea di, @@Temp_Save[3]
cld
@@Dividir: xor ah, ah
div bl
o ah, 30h
mov [di ] , ah
2 de diciembre
inc cx
prueba de aluminio, 0ffh
jnz @ @except
Push di
Pops
Compañía si
Pop Di
pop bx
Push di
Representa movsb
puntero de byte mov [di], '$'
Popudi
Cx popular
Pops
Remojado en agua para suavizar
@@Temp_Save db 4 dup(?)
Dec_ASCII EndP
-
Puntuación db 56, 69, 84, 82, 73, 88, 99, 63, 100, 80, 0, 10, 80, 100, 90, 73, 43, 60, 63, 72, 88, 42, 58, 99 , 100, 89, 65, 61, 74, 84, 79 informe escolar; copiar
Elemento equ($-fracción)/tipo puntuación
score_Tab db 6 dup; (0) Recuento para cada segmento de puntuación
Base de datos de resultados '00 - 59:'
Temp_STr db 4 dup ('$ ')
Score100 db '); ====100:'
Inicio: push cs
Cámara digital popular
Push cs
pop es hace el segmento de datos , el segmento adicional y el segmento de código se convierten en el mismo segmento.
cld
lea si, puntuación; primera dirección del grado
mov cx, número de logros
mov dl, 10 ;Se utiliza para dividir por 10.
read_Score:lodsb;resultados de extracción
excepto div dl10
cmp al, 5; & gt5, aprobar el examen
jg $ +4
mov al, 5; & lt=5, fallido
sub al, 5; menos 5, desplazamiento de dirección de recuento de segmentos decimales.
cbw
Push ax
pop bx
Inc Score _ Tab[bx] el recuento aumentó en 1
Bucle El bucle Read_Score cuenta el siguiente resultado.
;Mostrar resultados estadísticos
mov bl, 59h
mov cx, 5
lea si, Score_Tab cada fragmento cuenta La primera dirección de la matriz
lea di, cadena temporal
lea dx, dirección de cadena de resultado estadístico de resultado
Resultado de lista:
lodsb lee el valor de recuento
Llamar a Dec_ASCII
mov, 9; mostrar resultados estadísticos
int 21h
Llamar al centro CTLF
Película al, bl
Agregar al, 1
daa
mov bl, al
Empujar cx
mov cl, 4
XOR ah, ah
Diodo quimioluminiscente
Schlarer, cl
o ax, 3030h
xchg ah, al
Mover el resultado del puntero de palabra, ax
Película al, bl
Agregar al, 9
mov bl, al
XOR ah, ah
Diodo quimioluminiscente
Schlarer, cl
O ax, 3030h
xchg ah, al
mov resultado del puntero de palabra [5], ax
Cx popular
Loop list_results
Empujar si
Push di
Les, puntuación 100
Lea di Resole
lea cx, cadena temporal
sub cx , di
representa movsb
popudi
Pops
lodsb lee el valor de recuento
Llame a Dec_ASCII p>
mov, 9; muestra resultados estadísticos
int 21h
p>Exit_Proc: mov ah, 4ch finaliza el programa
int 21h p>
Fin del código
El fin comienza; este es el final de la compilación