Главная страница Случайная страница КАТЕГОРИИ: АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатикаИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханикаОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторикаСоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансыХимияЧерчениеЭкологияЭкономикаЭлектроника |
Команди умовного переходу
Ror ch, 1 00101111; вміст ch до операції ror CF: =1 10010111; вміст ch після операції ror
3. Розробити програму мовою асемблера обчислення значення функції x + 5 якщо x > 0 y = x якщо x< 0 2x2 якщо x = 0
page 60, 80 TITLE Програмування розгалужених алгоритмів STACKSG SEGMENT PARA STACK 'STACK' DW 64 DUP (?) STACKSG ENDS DATASG SEGMENT PARA 'DATA' ; ------------------------------------------------------------------------------------ X DW -2; Елементи даних ; ------------------------------------------------------------------------------------- DATASG ENDS CODESG SEGMENT PARA 'Code ' BEGIN PROC FAR ASSUME CS: CODESG, DS: DATASG, SS: STACKSG PUSH DS; Ініціалізація програми SUB AX, AX PUSH AX MOV AX, DATASG MOV DS, AX SUB AX, AX; Очищення регістра АХ MOV DX, X; Пересилання Х до регістра DX CMP DX, 0; Порівняння Х та 0 JL LBL1; Перехід, якщо менше JG LBL2; Перехід, якщо більше MOV AX, 5; Обчислення за умовою X = 0 JMP EXIT; Перехід на вихід з програми LBL1:; Обчислення за умовою X < 0 MOV AX, X MOV BX, X MUL BX ADD AX, 5 JMP EXIT LBL2:; Обчислення за умовою X > 0 MOV AX, X MOV BX, X MUL BX MUL BX EXIT:; Закінчення роботи програми RET BEGIN ENDP CODESG ENDS END BEGIN
№2 Описати схему процесу розробки програми мовою асемблера. Процес складається з таких етапів: 1. введення вихідного тексту програми (у текстовому редакторі створюється файл *.asm); 2. створення об’єктного модуля програми (трансляція програми, використовується транслятор tasm.exe); tasm ім'я_вихідного_файлу [/l] створюється файл *.obj. Параметр /l створює файл лістингу *.lst. 3. створення завантажувального модуля програми (компонування програми, використовується компоновник tink.exe); TLІNK [опції] список_об'єктних_файлів [, ім'я_завантажувального_модуля] Створюється програмний файл *.ехе, гото-вий до виконання. 4. Налагодження програми. Використовується налагоджувач Turbo Debugger (td prg_1).
2. Описати команди переходів у програмах асемблера, переходу. Команда безумовного переходу Команда безумовного переходу jmp.
Синтаксис команди безумовного переходу:
Jmp [модифікатор] адреса_переходу
Адреса-переходу представляє собою адресу у вигляді мітки або адреси області пам’яті, в якій знаходиться покажчик переходу. Внутрішньо сегментний перехід припускає, що змінюється лише вміст регістра eip/ip.
Команди умовного переходу
Всистемі команд процесора є група команд, що приймають рішення про те, яка команда має виконуватися наступною. Рішення приймається в залежності від певних умов. Умова визначається вибором конкретної команди переходу. Процесор має 18 команд умовного переходу, які дозволяють перевірити:
Команди умовного переходу мають однаковий синтаксис:
Jcc мітка_ переходу
Параметр сс - визначає конкретну умову, що аналізується командою. Операнд “мітка_переходу” може знаходитись лише в межах поточного сегмента коду. Міжсегментна передача керування в умовних переходах не допускається.
Команда порівняння сmp
Команда порівнює два операнди і за результатами порівняння встановлює прапори. Синтаксис команди:
Cmp операнд 1, операнд 2
Прапори, що встановлюються командою сmp, можна проаналізувати спеціальними командами умовного переходу. 3. Скласти програму мовою асемблера обчислення значення функції z = 2y3- y2x + x3 Зразок: @data mov ds, у=ax3+bx2+cx+d, якщо x, a, b, c, d - не перевищують [-128, 127].
masm model small p486 .stack 100h .data y dd?; Спочатку розташовуємо більш довгі дані x db 2 a db 1 b db 1 c db 1 d db 1
.code begin: mov ax, @data mov ds, ax
sub eax, eax sub ebx, ebx sub ecx, ecx
mov al, a mov bl, x
mul ebx; a*x-> eax mov cl, b add eax, ecx; a*x+b-> eax
mul ebx; (a*x+b)x -> eax mov cl, c add eax, ecx; (a*x+b)x+c-> eax
mul ebx; (a*x+b)x+c)x-> eax mov cl, d add eax, ecx; ((a*x+b)x+c)x+d-> eax
mov y, eax mov ax, 4c00h int 21h end begin
№ 3 1. Описати програмну модель процессора та її складові. Набір ресурсів(необхідних для виконання і зберігання в памí яті команд програми, даних і інформації про поточний стан програми і МП)- складає програмну модель МП. Таким чином програмну модель МП складають: - простір адресованої памí яті до 236-1 байт; - набір регістрів загального призначення; - набір сегментних регістрів; - набір регістрів стану і керування; - набір регістрів пристрою обчислень з плаваючою крапкою (співпроцесора); - набір регістрів цілочисельного ММХ-розширення, що відображаються на регістри співпроцесора - набір регістрів ММХ-розширення з плаваючою крапкою - програмний стек. Це спеціальна інформаційна структура, робота з якою передбачена на рівні машинних команд.
2. Описати реалізацію розгалужень, умовні переходи, команду порівняння сmр. Всистемі команд процесора є група команд, що приймають рішення про те, яка команда має виконуватися наступною. Рішення приймається в залежності від певних умов. Умова визначається вибором конкретної команди переходу. Процесор має 18 команд умовного переходу, які дозволяють перевірити:
Команди умовного переходу мають однаковий синтаксис:
Jcc мітка_ переходу
Параметр сс - визначає конкретну умову, що аналізується командою. Операнд “мітка_переходу” може знаходитись лише в межах поточного сегмента коду. Міжсегментна передача керування в умовних переходах не допускається.
Команда порівняння сmp
Команда порівнює два операнди і за результатами порівняння встановлює прапори. Синтаксис команди:
Cmp операнд 1, операнд 2
Прапори, що встановлюються командою сmp, можна проаналізувати спеціальними командами умовного переходу.
Реалізація розгалужень здійснюється у 2 кроки: 1. Спочатку за допомогою арифметичних (cmp), логічних або інших команд здійснюється перевірка умови, що після IF. 2. Далі необхідно написати команду умовного переходу, яка зреагує на стан прапорців і передасть управління у вказану точку програми (умова – true) або ні (умова – false) і буде виконуватися наступна за нею команда.
1. IF X> 0 THEN < S>, де < S> – деяка послідовність команд. 2. IF X> 0 THEN < S1> ELSE < S2>, де < S1> і < S2> – деякі послідовності команд. 3. WHILE X> 0 DO < S> 4. REPEAT < S> UNTIL X> 0
3. Розробити програму мовою асемблера, яка виконує опис та ініціалізацію даних різних типів, перевизначення типів, визначення сегментної складової та зміщення адреси змінної.
Цю задачу я не знаю хз звідки вона… Буде без неї))))
№ 4
1. Описати регістри користувача, регістри загального призначення, сегментні регістри, регістри стану і керування. 2. Описати команди умовного переходу і прапори. Мнемонічне позначення будь-яких команд умовного переходу відображає назву прапора, з яким вони працюють, і має наступну структуру: - першим символом йде буква j (jump, перехід); - другим – позначення прапора або символ заперечення “n”, після якого стоїть назва прапора. Така структура команди відображає її призначення. Якщо символа “n” немає, то перевіряється стан прапора, і, якщо він дорівнює 1, відбувається перехід на мітку переходу. Якщо символ “n” присутній, то перевіряється стан прапора на рівність 0, і у випадку успіху виконується перехід на мітку переходу.
Команди умовного переходу і прапори
3. Розробити програму мовою асемблера, яка обчислює значення виразу y = S (1+ i) i=1 ; ASM ; STACKSG SEGMENT PARA STACK 'STACK' DW 32 DUP(?) STACKSG ENDS DATASG SEGMENT PARA 'DATA' ; --------------------------------------------------------------------------------------------------------- N DW 1 I DW 1; Елементи даних Y DW 1 ; --------------------------------------------------------------------------------------------------------- DATASG ENDS CODESG SEGMENT PARA 'Code ' BEGIN PROC FAR ASSUME CS: CODESG, DS: DATASG, SS: STACKSG PUSH DS; Ініціалізація програми SUB AX, AX PUSH AX MOV AX, DATASG MOV DS, AX SUB AX, AX MOV CX, N; Запис до СХ числа циклів BEGIN_LOOP:; Початок циклу MOV AX, I; Пересилання І до регістра АХ MOV BX, 1; Отримання суми і+1 ADD AX, BX ADD y, AX; Накопичення суми ряду в змінній RESULT SUB AX, AX INC I; Збільшення І на 1 LOOP BEGIN_LOOP; Кінець опису циклу RET BEGIN ENDP CODESG ENDS END BEGIN
№ 5 1. Описати сегментну організацію пам’яті. Процесори Intel апаратно підтримують сегментну організацію пам’яті. Сегмент являє собою незалежну область пам’яті, що підтримується на апаратному рівні. Програма може містити певну кількість логічних сегментів). Доступ до сегментів при виконанні програми здійснюється за допомогою сегментних регістрів. В програмній моделі процесора існують шість сегментних регістрів: cs, ds, ss – основні, es, gs, fs – додаткові, тому в певний момент часу програма може безпосередньо звернутися лише до відповідної кількості сегментів. Програміст має забезпечити наявність адрес поточних сегментів у цих регістрах у відповідності з наступним: - Регістр cs містить адресу поточного сегмента кодів, звідки в процесор пересилаються коди виконуваних команд. При цьому зміщення команди у сегменті визначається вмістом вказівника команд ip. - Регістр ss вказує на початок поточного сегмента стеку. - Регістр ds містить адресу основного (поточного) сегмента даних програми. - За наявності додаткового сегмента даних для його адресування можна використовувати регістр es (gs, fs ). Початкове настроювання cs і ss здійснює система, а за встановлення адреси сегмента даних відповідає програміст. Програміст мовою Асемблера працює з двома складовими логічної адреси пам’яті: сегментною адресою і відносною (зміщенням комірки відносно початку сегмента). Відносна адреса змінних визначається транслятором при асемблюванні програми або обчислюється за адресним виразом при виконанні програми. Перший байт сегмента має зміщення 0 (0000 у лістингу), наступний – 1, далі – 2, 3, …. Сегментна адреса стає відомою тільки при завантаженні виконуваної програми у пам’ять. 2. Описати команди керування циклами (ітераціями). До системи команд процесора входить група із трьох команд, що реалізують програмування циклів. Характеристика цих команд: 1) loop – мітка-переходу - повторити цикл. Команда дозволяє організувати цикли з автоматичним зменшенням лічильника цикла. Робота команди полягає у виконанні наступних дій: 1. декремент регістра ecx/cx; 2. порівняння регістра ecx/cx з нулем; 3. - якщо (ecx/cx) > 0, то керування передається на мітку переходу; 4. – якщо (ecx/cx) = 0, то керування передається на наступну після loop команду. 2) loope / loopz мітка-переходу повторити цикл поки cx < > 0 і zf = 1. Команди loope і loopz –абсолютні синоніми. Робота команд полягає у виконанні наступних дій: 1. декремент регістра ecx/cx; 2. порівняння регістра ecx/cx з нулем; 3. аналіз стану прапора нуля zf: 4. - якщо (ecx/cx) > 0 і zf = 1, керування передається на мітку переходу; 5. - якщо (ecx/cx) = 0 або zf = 0, керування передається на наступну після loop команду. 3) loopne / loophz мітка - переходу повторити цикл, поки cx < > 0 і zf = 0. Команди loopne і loopnz також абсолютні синоніми. Робота команд полягає у виконанні наступних дій: 1. декремент регістра ecx/cx; 2. порівняння регістра ecx/cx з нулем; 3. аналіз стану прапора нуля zf: 4. - якщо (ecx/cx) > 0 і zf = 0, керування передається на мітку переходу; 5. - якщо (ecx/cx) = 0 або zf = 1, керування передається на наступну після loop команду.
3. Розробити програму, яка використовує макрос стандартного виходу із програми. ; макрос кінця програми mov ax, 4c00h int 21h endm data segment para public 'data' message db 'Введіть дві шістнадцятерічні цифри (букви A, B, C, D, E, F - прописні): $' data ends stk segment stack db 256 dup('? ') stk ends code segment para public 'code' assume cs: code, ds: data, ss: stk main proc init_ds out_str message clear_r ax get_char conv_16_2 mov cl, 4h shl al, cl mov dl, al get_char conv_16_2 add dl, al xchg dl, al; результат у al exit main endp code ends end main
№ 6
|