WWW.REFERATCENTRAL.ORG.UA - Я ТУТ НАВЧАЮСЬ

... відкритий, безкоштовний архів рефератів, курсових, дипломних робіт

ГоловнаІнформатика, Компютерні науки → Програмування на мові Асемблер - Реферат

Програмування на мові Асемблер - Реферат

значення sp
2) Задане значення регістра записується по адресу [ ss:sp ]- розуміємозначення з зміщенням sp в середині стекового сегмента .
Порядок цих кроків істтній . Спочатку push віднімає 2 із sp. На рис. 4.4 першиц оператор push
записує sp2 в sp , поміщаючи потім туди значення з регістра ax . Після виконання цих дій вказівник степення адресує останнє поміщення в стек юдюжзначення.
Управління стеком
Принцип правильного управління стеком простий :
кожна команда push в програмі повинна мати відповідну команду pop , при цьому програма може коректно записувати і відновлювати значення.
Інакше , сдідуючі проштовхування приведуть до все більшого росту стека ,і можуть викликати переповнення сигмента , виділеного програмою. Це призводить до зависання системи , тому що починають перекриватись області пам 'яті .
Якщо ж кількість команд pop , більше числа к. .Push ,може бути зникнення стека, що й приведе до зависання програми.
Приклад
push ax ; занести ax , bx , dx в стек
push bx
push dx
; - тут знаходиться програма
pop dx ; вийняти dx, bx , ax із стека.
pop bx
pop ax
Тут зрозуміло ,що команди між push i pop будуть використовувати регістри ax. bx i dx;
тому для збереження початкових значень вони проштовхуютья в стек . Потім ці ж регістри у зворотньому порядку виштовхуються із стека відновлюються початкові значення і підтримуючи стек в правильному стані ( состоянии ).
Перестановка даних ( команда xchg)
Команда xchg -міняє місцями значення двох регістрів або значення регістра з байтом або словом , яке зберігається в пам' яті .
Приклад
Нехай , ми хочемо переставити значення в регістрах dx i ax. Використовуючи xchg , можна
записати :
xchg ax , dx ; ax dx ; dx ax
( порядок операндів не грає ролі )
Інакше , для перестановки двох 16 - бітових регістрів , можна використати менш ефективний метод який використовує стек як поміжкове місце збереження одного з значень.
push ax ; стек ax
mov ax,dx , ax dx
pop dx ; dx ( стек початкове значення ax ).
Приклад
Для перестановки двох 8 - бітових значень необхідний третій регістр , так як в стек можна проштовхувати , виштовхувати тільки 16 - бітні слова .
Щоб переставити два байти в al i ah, не використовучи xchg потрібно записати:
mov bh, ah ; bh ah
mov ah, al ; ah al
mov al, bh ; al bh
При використанні xchg цього не потрібно .
Приклад
Крім перестановки значень регістрв , xchg також може міняти місцями значення врегістрі
з значенням , яке зберігається :
1) xchg ax,[ things ] ; ax Ц [ things ]
2) xchg [ oldCount ],cx ; cx Ц [ oldCount ]
Команди для роботи з рядками
Команди для роботи з рядками можуть служити для обробки всіх типів даних, а не тільки символьних рядків. В Асемблері рядки є послідовностями байтів, які можуть або представляти, або не представляти ASCII-символи. Рядкові команди діляться на три групи:
- команди пересилки рядків
- команди перевірки рядків
- команди префікса повтору.
Команди обробки рядків 8086.
Команди пересилки рядків:
lods джерело - загрузка рядка байтів або рядка слів
lodsb - загрузка рядка байтів
lodsw - загрузка рядка слів
movs призи, джерело - пересилка рядка байтів або рядка слів
movsb - пересилка рядка байтів
movsw - пересилка рядка слів
stos призначення - запис рядка байтів або рядка слів
stosb - запис байта в рядок
stosw - запис слова в рядок
Команди перевірки рядків.
cmps призначення, джерело - порівняння рядків по байтах або словах
cmpsb - пересилка рядків по байтах
cmpsw - пересилка рядків по словах
scas призначення - пошук байта або слова в рядку
scasb - пошук байта в рядку
scasw - пошук слова в рядку
Команди префікса повторень
rep - повторення
repe/repz - повторення, поки =0
repne/repnz - повторення, поки не =0
Команди перевірення рядків пересилають байти або слова з пам'яті в регістр, з регістра в пам'ять або безпосередньо з пам'яті в пам'ять.
Команди перевірки рядків дозволяють порівнювати або знаходити байти або слова.
Команди префіксу повтору можуть приєднуватись до інших рядкових команд, утворюючи команди, які повторюють рядкову операцію визначене число разів до виконання заданої умови.Префіксні команди дозволяють швидко заповнювати значеннями тисячі байтів, копіювати рядки з одного місця в інший і шукати необхідні значення в великих блоках пам'яті.
Насправді існує 5 рядкових команд: (хоч мнемонічних назв значно більше).bods, stos, movs, scas, cmps. Решта назв не вимагають оперантів, тому більш прості для використання.
Аналогічно, існує 2 префіксса повтору: команда rep ідентична командам repe i repz. Команди repne i rehnz також представляють одинаковий префікс.
2.Рядкові індексні регістри.
Рядкові команди працюють завжди з одними і тими же комбінаціями регістрів - dsisi i csidi - з індексними регістрами рядка-джерела і рядка призначення, які визнаяають зміщення в даних і сегментах.
АРЕФМЕТИЧНІ КОМАНДИ
Математичні команди в мові Ас. обмежуються додаванням, множенням, діленням, і відніманням знакових і безнакових цілих двійкових чисел.
КОМАНДИ ДОДАВАННЯ.
Є 5 команд додавання
add i adc сумують два байта або слова .
inc (інкремент) - команда швидкого додавання 1 до регістра або значення в пам'яті.
aaa i daa виконують корекцію значень представлених
в двійковому -10 форматі
1) Щоб додати 8- бітове значення в ah з 8-бітового значення в ah можна записати:
add ah, bh ; ah ah+bh
Команда сумує два значення і записує результат в
задане місце, замінюючи початкове значення.
2) Команда adc працює акалогічно, але додає до результату прапор переносу cf:
adc ah, bh ; ah ah+bh+cf
Якщо cf=1 то результат одержуємо такий же, як при додаванні 1 до суми ah i bh. Прапор
Loading...

 
 

Цікаве