La Red de Conocimientos Pedagógicos - Conocimientos universitarios - 8086 problemas de programación (usando lenguaje ensamblador)

8086 problemas de programación (usando lenguaje ensamblador)

1. Dos procesos de codificación comunes completan la conversión de números binarios almacenados en AX en códigos BCD comprimidos y la conversión de códigos BCD en números binarios.

;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

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>

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>

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

mov, 9; muestra resultados estadísticos

int 21h

p>

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