Lenguaje ensamblador: campo de datos, matriz de palabras ARRAY tiene N elementos, los números negativos en la matriz se ordenan en orden descendente después del valor absoluto, implementado con una subrutina
/asm_c/blog/static/2482031132015581028111
Es más complicado usar subrutinas, de la siguiente manera:
DATASEGMENT
ARRAY1?DW?0,?-?ARRAY1
ARRAY2?DW?20?DUP(?); Una nueva matriz almacenada después de calcular el valor absoluto
LENDW; ?
MSG1DB?13,?10,?Antes de ordenar: $'
MSG2DB?13,?10,?Después de ordenar? $'
¿DATOS?ENDS
CÓDIGO?SEGMENTO
ASUME?CS:?CÓDIGO,?DS:?DATOS
INICIO:
MOVAX,?DATA?
MOVDS,?AX
MOVAH,??09H
LEADX,?MSG1
INT21H?;Mostrar cadena de mensaje MSG1
LEASI,?ARRAY1
CALL?OUTPUT Llame a la subrutina de matriz de salida OUTPUT para mostrar los datos originales
¿LLAMADA?Absoluta?Llame a la subrutina de clasificación SORT para ordenar la matriz
MOVAH,?09H
LEADX,?MSG2
INT21H?; ?
SALIR:
MOVAH,?4CH
INT21H?;El programa principal regresa a DOS
;------ ----------------------------------------?
; nombre: SORT
;Función:?
SORT?PROC?NEAR?
;Agregar código aquí
MOVCX, ?COUNT
SHRCX,?1
DECCX
S0:?PUSH?CX
MOVDI,?SI
S1 :?MOVAX,?[DI]
CMPAX,?[DI?+?2]
JAS3
XCHG?AX,?[DI ?+? 2]
XCHG?AX,?[DI]
S3:?ADDDI,?2
BUCLE?S1
POPCX
¿BUCLE?S0?
RET
ORDENAR?ENDP
;----------- --- ----------------------- -------------?
;Nombre de subrutina: Absoluta
;Función: ¿Buscar?
¿Absoluto?PROC?NEAR
;Agregar código aquí
LEASI,?ARRAY1
LEADI,?ARRAY2
MOVCX,?COUNT
SHRCX,?1
ABS:
MOVAX,?
CMPAX,?0
JGEABS2
NEGAX
ABS2:
MOV[DI],?
ADDSI,?2
ADDDI,?2
BUCLE?ABS
RET
¿ENDP absoluto? ---------------
----------------------------------?
;Nombre de subrutina: SALIDA
;Función: Matriz de salida
;Nombre de subrutina: ?Matriz de salida
SALIDA?PROC?NEAR?
;Agregar código aquí
p>
MOVAH,?2
MOVDL,?13
INT21H
MOVDL,? INT21H
MOVCX,?COUNT
SHRCX,?1
ZH3:
MOVAX [SI]
CMPAX, ?0
JGEZH0
NEGAX
MOV[SI],?AX
MOVAH,?2
MOVDL,?' -'
INT21H
ZH0:MOVAX,?[SI]
MOVBX,?10
PUSH?CX
MOVCX,?0
ZH1:MOVDX,?0
DIVBX
ADDDL,?' /p>
PUSH?DX
INCCX
CMPAX,?0
JNZZH1
MOVAH,?2
ZH2:POPDX
INT21H
BUCLE??'
INT21H
ADDSI,?2
BUCLE? ZH3
RET
SALIDA?ENDP
;------------------ ---- --------------------------
CODEENDS
ENDSTART