Основы программирования микропроцессоров


Параметр "размер сегмента"



Download 1,87 Mb.
bet83/119
Sana23.02.2022
Hajmi1,87 Mb.
#139915
TuriКонтрольные вопросы
1   ...   79   80   81   82   83   84   85   86   ...   119
Bog'liq
Системное программирование

Параметр "размер сегмента". Для микропроцессоров 386 и выше сегменты могут быть 16 или 32-разрядными: USE16 определяет 16-разрядную адресацию, USE32 – 32-разрядную адресацию.

9. Упражнения


Пример 1. На языке ассемблера разработать подпрограмму пузырьковой сортировки массива. Элементами массива должны быть беззнаковые целые числа размером слово. Начальный адрес массива должен находиться в регистре DI, а количество элементов – в первом элементе.


Решение. Вариант реализации подпрограммы сортировки SORT приводится ниже. Для работы процедуры необходимы две вспомогательные переменные CNT и ADD, размером в слово. Их можно определить в сегменте данных (как показано ниже) или выделить место в стеке (по методу хранения локальных данных процедур). Первая переменная хранит счетчик числа сравнений, а вторая – начальный адрес массива в памяти.
При каждом проходе счетчик CNT уменьшается на единицу, чтобы на следующей итерации не сортировать несколько последних уже отсортированных («всплывших» на свое место) элементов. Когда счетчик обнулится, сортировка считается завершенной.
Процедура использует регистр BX в качестве флага обмена (в начале он установлен), а регистр AX – для хранения элемента, который будет сравниваться с последующим. Если последующий элемент меньше текущего, они меняются местами и флаг обмена BX сбрасывается, сигнализируя об обмене.

CNT DW ? ; счетчик числа сравнений


ADD DW ? ; начальный адрес массива

SORT PROC


PUSH AX
PUSH BX
PUSH CX
MOV CX, [DI] ; количество элементов массива
DEC CX ; число проходов 0..CX-1
MOV CNT, CX ; сохранить в памяти число проходов
PASS: MOV BX, 1 ; установить флаг обмена
DEC CNT ; очередное сравнение
JZ SORT ; сортировка завершена, если CNT = 0
MOV CX, CNT ; число сравнений в CX
MOV DI, ADD ; начальный адрес в DI
L: ADD DI, 2 ; переход к следующему элементу данных
MOV AX, [DI] ; сохранить элемент в AX
CMP [DI+2], AX ; сравнить элемент со следующим
JAE COUNT ; следующий элемент меньше текущего
XCHG [DI+2], AX ; обменять местами элементы
MOV [DI], AX
XOR BX, BX ; обнулить флаг обмена
COUNT: LOOP L ; проверить остальные элементы
CMP BX, 0 ; проверка на обмены
JE PASS ; обмены элементов были проведены
SORT: MOV DI, ADD ; восстанавливаем адрес начала списка
POP CX
POP BX
POP AX
RET
SORT ENDP



Download 1,87 Mb.

Do'stlaringiz bilan baham:
1   ...   79   80   81   82   83   84   85   86   ...   119




Ma'lumotlar bazasi mualliflik huquqi bilan himoyalangan ©hozir.org 2024
ma'muriyatiga murojaat qiling

kiriting | ro'yxatdan o'tish
    Bosh sahifa
юртда тантана
Боғда битган
Бугун юртда
Эшитганлар жилманглар
Эшитмадим деманглар
битган бодомлар
Yangiariq tumani
qitish marakazi
Raqamli texnologiyalar
ilishida muhokamadan
tasdiqqa tavsiya
tavsiya etilgan
iqtisodiyot kafedrasi
steiermarkischen landesregierung
asarlaringizni yuboring
o'zingizning asarlaringizni
Iltimos faqat
faqat o'zingizning
steierm rkischen
landesregierung fachabteilung
rkischen landesregierung
hamshira loyihasi
loyihasi mavsum
faolyatining oqibatlari
asosiy adabiyotlar
fakulteti ahborot
ahborot havfsizligi
havfsizligi kafedrasi
fanidan bo’yicha
fakulteti iqtisodiyot
boshqaruv fakulteti
chiqarishda boshqaruv
ishlab chiqarishda
iqtisodiyot fakultet
multiservis tarmoqlari
fanidan asosiy
Uzbek fanidan
mavzulari potok
asosidagi multiservis
'aliyyil a'ziym
billahil 'aliyyil
illaa billahil
quvvata illaa
falah' deganida
Kompyuter savodxonligi
bo’yicha mustaqil
'alal falah'
Hayya 'alal
'alas soloh
Hayya 'alas
mavsum boyicha


yuklab olish