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, 16
mov bx, 0
find:
push cx
mov si, 0
mov cx, 4
sort:
xor ax, ax
xor bx, bx
mov dl, i
mov al, 4
mul dl
cbw
mov bx, ax
mov dl, 4
cmp dl, i
je back2
back3:
mov al, arr[bx][si+1]
cmp arr[bx][si], al
ja bigger
back:
inc si
loop sort
inc i
pop cx
loop find
jmp after_sort
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
after_sort:
mov cx, 4
mov i, 0
xor bx, bx
output:
push cx
mov cx, 4
mov si, 0
sub_out:
mov dl, i
mov al, 4
mul dl
cbw
mov bx, ax
mov al, arr[bx][si]
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
inc i
mov ah, 09
lea dx, mes3
int 21h
pop cx
loop output
jmp over
back2:
mov i, 0
jmp back3
over:
mov ax, 4c00h
int 21h
end main
Если что, вот исходник
ты вроде исходные данные говрил сделаел как массив в памяти, чтоб пользователь не вводил их сам. там этого нет
Это я сделал позже, чтобы было проще отследить ошибку, но что-то нифига
я так всегда и делаю изначально
Причем с одномерным массивом все получилось, с двумерным делал на основе кода, который сортировал одномерный массив - ничего. Даже с отладчиком так и не нашел проблему
Так используй одномерный массив и выводи его как двухмерный. Или у тебя массив массивов?
одномерный, двемерный. в памяти то все одно, все в ряд располагаются. тут вопрос в том как выводить.
поэтому сортитруй как одномерный, а выводи как вздумается
Про то, что разницы в представлении в памяти нет, я знаю. Проблема в том, что нужно сортировать именно как двумерный
алгоритм такой. представляешь двумерный массив как одномерный, сортируешь как одномерный, выводишь как двумерный
Сортировка должна быть с применением двух "регистров", т.е. все-таки двумерный :(
Ну почему же? А что мне мешает использовать два регистра для сортировки одномерного массива
А у него там не ступенчатый массив?
зависит от способа ввода, куда сохраняются значения
Нет, это зависит от организации в памяти
Так а как тебе надо работать с этим массивом? По каждому столбцу в строке, либо по каждой строке в столбце? Если не написано - значит это одномерный массив, и пофиг что там кто скажет.
Зубчатый это массив указателей на одномерные массивы
От одномерного до двумерного массива разница только в работе, и всё. Порядок получения значений из этого массива определяет его тип.
А че он тогда мозги себе компостирует
По сути, это то же самое, чем я сейчас и занимаюсь. Массив состоит из чисел, которые вводятся с клавиатуры (пока что сделал статичный, если исправлю ошибку в нем, сделаю с вводом с клавиатуры)
это преподы, сказано было "как двумерный"
Ну вот я бы пришёл и показал преподу сортировку одномерным и пошел такой препод лесом
И неправильный результат будет. Потому что сортировать надо по каждой строке в столбце, а если просто значения будешь брать - получится вообще не то.
Ок, тогда я заверну код для одномерного массива в функцию процедуру и вызову по очереди для каждой строки)
Тогда это будет уже сортировка для двумерного массива, ты перехитрил сам себя))
В данном задании я с массивом никак работать не буду, только вывод отсортированных чисел. Позже нужно будет указать номер столбца, в котором разность между наименьшим и наибольшим элементом будет максимальна
Если тупо брать значения из памяти от 0 до 10 - это одномерный массив. Если брать значения конкретно по столбцам или строкам - это двумерный. ТОЛЬКО в этом разница, и всё! Это в ЯВУ на глаз можно определять тип массива, а в ассемблере всё только по операциям - структура, стек, массивы - это тупо память, пока ты не будешь работать с этим по какому-то принципу.
Не совсем. В популярных языках такая абстракция как я заметил не применяется
В каких, например? В С вот: [[1,2], [3, 4]] - сразу видно, что двумерный.
Ну только это статический массив
В ассемблере даже статический всегда одномерный, пока не работаешь с ним как с двумерным.
это что за .. народное творчество ?
В Си нет такого синтаксиса. А ещё в Си можно int x[2][3] = {1,2,3,4,5,6}; и даже int *y = x; for (size_t i = 0; i < 6; i++} printf("%d\n", y[i]);.
И всё же [2][3].
В Си нет синтаксиса arr[a, b]. Только arr[a][b], который как раз ориентирован на зубчатые массивы, а для статических это просто сахарок
И всё же свой синтаксис ты взял из питона. В этом и кроется желание писать всё на асме? Ты просто больше ничего не знаешь, да?
Нет, просто к счастью забываю этот криворукий язык😁 для меня это идиотский синтаксис.
Это я как пример написал. https://t.me/ChatAssembler/276476
Обсуждают сегодня