mes db 10, 13, "Enter 16 numbers: $"
mes1 db " $"
;mes2 db 10, 13, "Sorted: $"
mes3 db 10, 13, "$"
i db 0
.code
main:
mov ax, @data
mov ds, ax
mov ah, 09
lea dx, mes
int 21h
mov ah, 09
lea dx, mes3
int 21h
mov cx, 4
mov si, 0
init:
push cx
mov cx, 4
sub_init:
xor ax, ax
mov ah, 01
int 21h
mov bl, al
sub bl, 30h
int 21h
sub al, 30h
mov ah, bl
aad
mov arr[si], al
inc si
mov ah, 09
lea dx, mes1
int 21h
loop sub_init
mov ah, 09
lea dx, mes3
int 21h
pop cx
loop init
; mov ah, 09
; lea dx, mes2
; int 21h
; mov ah, 09
; lea dx, mes3
; int 21h
mov cx, 15
mov bx, 0
mov si, 1
find:
push cx
mov cx, 16
sort:
mov dl, i
mov al, 4
mul dl
cbw
mov bx, ax
mov dl, arr[bx][si-1]
cmp arr[bx][si], dl
jb bigger
back:
inc si
loop sort
pop cx
inc i
mov si, 1
loop find
mov cx, 4
mov si, 1
mov i, 0
xor bx, bx
jmp output
bigger:
mov dl, arr[bx][si-1]
mov dh, arr[bx][si]
mov arr[bx][si], dl
mov arr[bx][si-1], dh
jmp back
output:
push cx
mov cx, 4
sub_out:
mov dl, i
mov al, 4
mul dl
cbw
mov bx, ax
mov al, arr[bx][si-1]
cbw
aam
add ax, 3030h
mov bx, ax
mov ah, 02
mov dl, bh
int 21h
mov dl, bl
int 21h
mov ah, 09
lea dx, mes1
int 21h
inc si
xor bx, bx
loop sub_out
mov si, 1
inc i
mov ah, 09
lea dx, mes3
int 21h
pop cx
loop output
; mov cx, 16
; mov si, 0
; cycle:
; push cx
; mov al, arr[si]
; aam
; add ax, 3030h
; mov bx, ax
; mov ah, 02
; mov dl, bh
; int 21h
; mov dl, bl
; int 21h
; mov ah, 09
; lea dx, mes1
; int 21h
; inc si
; loop cycle
over:
mov ax, 4c00h
int 21h
end main
Ты сам писал или взял в интернете?
Сам, потому и не работает))
Вот этот mov cx,16 в find, он точно правильный? Собственно, проблема неверного вывода в том, что оно пытается сортировать за пределами массива. А за пределами массива сообщение :)
Да, вы были правы, поэтому я внутри цикла find сделал проверку i (это номер строки в двумерном массиве). Если i = 3 (т.е. четвертая строка), то i обнуляем и заново пробегаемся по циклу. Но вот незадача - для проверки ввожу 16 "11", на выводе получаю 15 "11" и одну десятку, которая взялась из неоткуда
Обсуждают сегодня