Para obtener puntuaciones altas, dos programas en lenguaje ensamblador se fusionan en uno, uno es una subrutina del otro
; Pruébelo:
suponga cs: código, ds: datos
segmento de datos
msg1 db 'Antes de ordenar:$'
crlf db 0dh, 0ah, '$'
msg2 db 'Después de ordenar: $'
----------- -----------------------
BUFSIZE DB 50 Puede escribir hasta 50 caracteres.
ACTLEN DB ? ;El número real de caracteres escritos.
CHARS DB 50 DUP(20H) ;Los caracteres reales escritos se almacenan a partir de este momento.
Los datos finalizan
;-- -----------------------
segmento de código
inicio:
mov ax , data
mov ds, ax
mov dx, offset msg1
mov ah, 9
int 21h
MOV DX, OFFSET BUFSIZE; Ingrese la dirección de desplazamiento inicial del búfer para enviar DX
MOV AH, 0AH
INT 21H; al buffer.
p>
/p>
MOV BX, DX envía la primera dirección de la cadena a BX
ADD BX, CX; la última dirección de la cadena.
MOV BYTE PTR [BX] , '$' ; Insertar $ al final de la cadena
;
; INT 21H; Muestra la cadena escrita.
ok:
mov dx, offset crlf
mov ah, 9 p>
int 21h
mov dx, desplazamiento msg2
mov ah, 9
int 21h
--- --------------------
MOV CX, 15
mov si, caracteres desplazados
s:
push cx
mov di , si
inc di
s1:
mov al, [si]
cmp al, [di]
jb jx
xchg al, [di]
mov [si], al
jx:
inc di
bucle s1
inc si
pop cx
bucle s p>
;-----------------------
mov byte ptr [si 1], 24h
mov dx, desplazamiento CHARS
mov ah, 9
int 21h
mov ah, 4ch
int 21h
el código termina
finaliza el inicio