Написать программу обработки массива под DOS - Assembler
Формулировка задачи:
Нужно сделать так: все отрицательные элементы поместить в начало, остальные - в конец массива. Желательно чтобы их порядок не нарушался, т.е., если массив1 ={3,-5,7,21,-3,9,0,11,-14,2}, то после обработки должно получиться {-5,-3,-14,3,7,21,9,0,11,2} или на худой конец {-5,-3,-14,2,11,0,9,21,7,3}. Важно: адресация должна быть БАЗОВАЯ. Пожалуйста, не кидайте ссылки на алгоритмы сортировки, я их уже видел и использовал (очевидно, что там порядок нарушается). У меня есть идея, что как-нибудь можно модифицировать алгоритм сортировки, например, пузырьком, поменяв в сравнении элемент массива на ноль.
Вот "слепленная" заготовка кода:
stack segment para stack 'stack' db 100h dup(?) stack ends data segment para public 'data' arr1 db 3,-5,7,21,-3,9,0,11,-14,2 n=$-arr1 data ends code segment para public 'code' assume cs: code, ds: data, ss: stack start: mov ax,data mov ds,ax ;это нужно сделать здесь ;вывод массива mov si,offset arr1 mov cx,n outpt: xor ax,ax lodsb cbw call OutInt mov ah,02h mov dl,' ' int 21h loop outpt mov ax,4c00h int 21h OutInt proc push ax push bx push cx push dx test ax,ax jns oi1 mov cx,ax mov ah,02h mov dl,'-' int 21h mov ax,cx neg ax oi1: xor cx,cx mov bx,10 oi2: xor dx,dx div bx push dx inc cx test ax,ax jnz oi2 mov ah,02h oi3: pop dx add dl,'0' int 21h loop oi3 pop dx pop cx pop bx pop ax ret OutInt endp mov ax,4c00h int 21h code ends end start
Решение задачи: «Написать программу обработки массива под DOS»
textual
Листинг программы
mov cx, n-1 mov si, offset arr1 add cx, si restart: mov bx, si next: mov al, [bx] mov dl, [bx+1] or al, 0 js skip or dl, 0 jns skip mov [bx], dl mov [bx+1], al skip: inc bx cmp bx, cx jb next dec cx cmp cx, si ja restart
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д