Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 16.06.2010, 00:15   #1
treki
Новичок
Джуниор
 
Регистрация: 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 ;конец программы

Помогите плиз =)
treki вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
ассемблерная вставка 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