Другие языки программирования и технологии

помогите пожалуйста с задачей по ассемблеру 8086

нужно отсортировать каждую группу 3-ку чисел в массиве

например: дан массив 1,2,3,3,1,2,6,5,4 после сортировки должен быть 1,2,3,1,2,3,4,5,6

вот мои наработки

dseg segment

a db 1,3,2,1,2,3,3,2,1

b db 3 dup(?)

na db 9

nb db 0

dseg ends

sseg segment stack

dw 100h dup(?)

sseg ends

cseg segment

assume cs:cseg,ds:dseg,ss:sseg

start: mov ax,dseg

mov ds,ax

;-----------------

xor si,si

xor di,di

xor cx,cx

mov cl,na

lea si,a

lea di,a

l1: mov al,a[si];first value

mov bl,a[si+1];second value

mov dl,a[si+2];third value

cmp al,bl

ja next1

jl next2

next1: cmp bl,dl

ja g1;al>bl>dl

jl g2

next2: cmp al,dl

ja g2

g1: b[di],dl

b[di+1],bl

b[di+2],al

cont: add di,3

add si,3

loop l1

;--------------

mov ah,4ch

int 21h

cseg ends

end start
Что это такое?
b[di],dl
b[di+1],bl
b[di+2],al
Таких инструкций в системе команд процессора i8086 нет.
Метка g2 в программе не определена.

Помнится, у вас MASM.
Для массива беззнаковых чисел от 0 до 255. Количество элементов массива должно быть кратно трём.

dseg segment
  a db 1, 2, 3, 3, 1, 2, 6, 5, 4
  Len_A equ $ - a
dseg ends

sseg segment stack
  dw 100h dup (?)
sseg ends

cseg segment
    assume cs :cseg, ds :dseg, ss :sseg
start: mov ax, dseg
    mov ds, ax
;-----------------
    xor si, si
    lea bx, a
    mov cx, Len_A
l1:
    call CompareAndSwap
    inc si
    call CompareAndSwap
    dec si
    call CompareAndSwap
    add si, 3
    sub cx, 2
    loop l1

    mov cx, Len_A
    xor si, si
@@:
    lodsb
    call Write
    mov al, 20h
    int 29h
    loop @B
;--------------
    xor ah, ah
    int 16h
    mov ah, 4ch
    int 21h

CompareAndSwap proc
    mov al, [bx + si]
    cmp al, [bx + si + 1]
    jbe @F
    xchg al, [bx + si + 1]
    mov [bx + si], al
@@:
    ret
CompareAndSwap endp

Write proc uses ax
    xor ah, ah
    mov dl, 10
    div dl
    or ah, 30h
    test al, al
    jz @F
    call Write
@@:
    mov al, ah
    int 29h
    ret
Write endp

cseg ends

    end start

ЮЧ
Юрий Чижевский
51 590
Лучший ответ
Напишите процедуру, которая сортирует AX, BX и DX так, чтобы AX<=BX<=DX.
Загрузите в регистры нужные значения, вызовите процедуру, а потом поместите значения результата в нужные ячейки.

псевдокод процедуры:
если AX>BX то поменять AX и BX
если BX>DX то поменять BX и DX
если AX>BX то поменять AX и BX
Алексей Шкляев
Алексей Шкляев
11 112
Хоть я и не умею в машинный код, но заметка на будущее: пользуйся pastebin'ом, ладно?