Red de conocimiento informático - Conocimiento sistemático - 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

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

Respondido antes:

/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