![]() |
|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
![]() |
|
Опции темы | Поиск в этой теме |
![]() |
#1 |
Новичок
Джуниор
Регистрация: 16.06.2010
Сообщений: 1
|
![]()
Надо разработать программу на любом языке высокого уровня (желательно С++) с ассемблерной вставкой выполняющей сортировку массива по возрастанию =) Имеется пример сортировки массива на ассемблере:
<1> ;prg_12_5.asm <2> MASM <3> MODEL small <4> STACK 256 <5> .data <6> mes1 db 0ah,0dh,'Исходный массив — $',0ah,0dh <7> ;некоторые сообщения <8> mes2 db 0ah,0dh,'Отсортированный массив — $' ,0ah,0dh <9> n equ 9 ;количество элементов в массиве, ;считая с 0 <10> mas dw 2,7,4,0,1,9,3,6,5,8 ;исходный массив <11> tmp dw 0 ;переменные для работы с массивом <12> i dw 0 <13> j dw 0 <14> .code <15> main: <16> mov ax,@data <17> mov ds,ax <18> xor ax,ax <19> ;вывод на экран исходного массива <20> mov ah,09h <21> lea dx,mes1 <22> int 21h ;вывод сообщения mes1 <23> mov cx,10 <24> mov si,0 <25> show_primary:;вывод значения элементов <26> ;исходного массива на экран <27> mov dx,mas[si] <28> add dl,30h <29> mov ah,02h <30> int 21h <31> add si,2 <32> loop show_primary <33> <34> ;строки 40-85 программы эквивалентны следующему ;коду на языке С: <35> ;for (i=0;i<9;i++) <36> ; for (j=9;j>i;j--) <37> ; if (mas[i]>mas[j]) <38> ; {tmp=mas[i]; <39> ; mas[i]=mas[j]; <40> ; mas[j]=tmp;} <41> mov i,0 ;инициализация i <42> ;внутренний цикл по j <43> internal: <44> mov j,9 ;инициализация j <45> jmp cycl_j ;переход на тело цикла <46> exchange: <47> mov bx,i ;bx=i <48> shl bx,1 <49> mov ax,mas[bx] ;ax=mas[i] <50> mov bx,j ;bx=j <51> shl bx,1 <52> cmp ax,mas[bx] ;mas[i] ? mas[j] — сравнение <53> jle lesser ;если mas[i] меньше, ;то обмен не нужен и переход на продвижение ;далее по массиву <54> ;иначе tmp=mas[i], mas[i]=mas[j], mas[j]=tmp: <55> ;tmp=mas[i] <56> mov bx,i ;bx=i <57> shl bx,1 ;умножаем на 2, так как ;элементы — слова <58> mov tmp,ax ;tmp=mas[i] <59> <60> ;mas[i]=mas[j] <61> mov bx,j ;bx=j <62> shl bx,1 ;умножаем на 2, так ;как элементы — слова <63> mov ax,mas[bx] ;ax=mas[j] <64> mov bx,i ;bx=i <65> shl bx,1 ;умножаем на 2, так как как ;элементы — слова <66> mov mas[bx],ax ;mas[i]=mas[j] <67> <68> ;mas[j]=tmp <69> mov bx,j ;bx=j <70> shl bx,1 ;умножаем на 2, так как ;элементы — слова <71> mov ax,tmp ;ax=tmp <72> mov mas[bx],ax ;mas[j]=tmp <73> lesser: ;продвижение далее по ;массиву во внутреннем цикле <74> dec j ;j-- <75>;тело цикла по j <76> cycl_j: <77> mov ax,j ;ax=j <78> cmp ax,i ;сравнить j ? i <79> jg exchange ;если j>i, то переход на обмен <80> ;иначе на внешний цикл по i <81> inc i ;i++ <82> cmp i,n ;сравнить i ? n — прошли до ;конца массива <83> jl internal ;если i<84> <85> ;вывод отсортированного массива <86> mov ah,09h <87> lea dx,mes2 <88> int 21h <89> prepare: <90> mov cx,10 <91> mov si,0 <92> show: ;вывод значения элемента на экран <93> mov dx,mas[si] <94> add dl,30h <95> mov ah,02h <96> int 21h <97> add si,2 <98> loop show <99> exit: <100> mov ax,4c00h ;стандартный выход <101> int 21h <102> end main ;конец программы Помогите плиз =) |
![]() |
![]() |
![]() |
![]() |
||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
ассемблерная вставка | Serg12 | Помощь студентам | 5 | 04.05.2017 19:43 |
Ассемблерная вставка в Delphi | Mixasik | Общие вопросы Delphi | 3 | 30.01.2010 00:45 |
Ассемблерная вставка | Arigato | Общие вопросы Delphi | 1 | 25.10.2009 21:47 |
Почему отличаются результаты (Ассемблерная вставка в С++)? Объясните | Vasiliusis | Общие вопросы C/C++ | 3 | 13.11.2008 19:17 |