Pregunta sobre programación ensambladora Uso de estructura de subrutina, 10 números sin signo de 8 bits a partir de la unidad MEM
; Este programa fue compilado bajo el entorno integrado MASMPlus 1.2, depurado y ejecutado correctamente.
Segmento de código
Supongamos CS:Code,DS:Code
-------- ----------; -----------
; Función: Mostrar la cadena de la dirección especificada (Str_Addr)
; Entrada:
p>;
; Str_Addr=Dirección de cadena (debe estar en el segmento de datos)
Uso: Salida Str_Addr
; Ejemplo de uso: Salida PromptStr
Salida MACRO Str_Addr
lea dx,Str_Addr
mov ah,9
int 21h
EndM
- -------------------------------------------------- ------------- de Los N números sin signo de 8 bits que comienzan desde la unidad MEM se ordenan en orden descendente
; Parámetros de entrada: ds:SI=dirección de matriz, CX; =número de elementos de la matriz
Bubbling Proc Near
push es
push si
push di
push cx
push ax
push ds
pop es
dec cx ;Número de bucles exteriores
cld
@@Escaneo: push cx ;Guardar el bucle externo en la pila Número de veces
push si ;Empuja la dirección de la matriz a la pila
@@Comparar: mov di,si ;La dirección del elemento de matriz actual se asigna al registro de índice de destino para el intercambio
@@Compare: mov di,si ;La dirección del elemento de matriz actual se asigna al registro de índice de destino para el intercambio
p>
lodsb ;Lee el elemento de la matriz actual en el acumulador
cmp al,[si] ;Compara el elemento de la matriz actual con el siguiente elemento de la matriz adyacente
jae @@NextOne ;Si es mayor o igual a, no intercambie datos, procese el siguiente elemento de la matriz
xchg al,[si] ;Si es menor que, intercambie elementos de la matriz
stosb ;Guardar el valor numérico más pequeño
@@NextOne: bucle @@Compare ;Procesar el siguiente elemento de la matriz
pop si ;Extraer la dirección de la matriz de la pila p>
pop cx ;Número de bucles externos que salen de la pila
loop @@Scanning siguiente comparación
pop ax
pop cx p>
pop di
pop si
pop es
ret
Bubbling EndP
; ------------- --------------------------------
MEM db 12,56,253,200,10,99,78,75,63,100
N equ $-MEM
Presione_Key db 7,13,10,13,10,'The completado Presione cualquier tecla para salir...$'
Inicio: push cs
pop ds
mov cx,N ;Número de elementos de la matriz
p>
lea si,MEM ;dirección de matriz
llamada burbujeante
------------------------- - ------------
Exit_Proc: Salida Press_Key indica que la operación se completó, presione cualquier tecla para finalizar el programa
mov ah,1
int 21h
mov ah,4ch ;Finalizar programa
int 21h
Código FINALIZA
FINALIZAR Inicio ; La recopilación termina aquí
p>