Студопедия

Главная страница Случайная страница

Разделы сайта

АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатикаИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханикаОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторикаСоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансыХимияЧерчениеЭкологияЭкономикаЭлектроника






Команди умовного переходу






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 команд умовного переходу, які дозволяють перевірити:

  1. відношення між операндами зі знаком (“більше- менше”);
  2. відношення між операндами без знаку (“вище – нижче”);
  3. станом арифметичних прапорів Zf, Sf, Cf, Of, Pf (але не Af).

Команди умовного переходу мають однаковий синтаксис:

 

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 команд умовного переходу, які дозволяють перевірити:

  1. відношення між операндами зі знаком (“більше- менше”);
  2. відношення між операндами без знаку (“вище – нижче”);
  3. станом арифметичних прапорів Zf, Sf, Cf, Of, Pf (але не Af).

Команди умовного переходу мають однаковий синтаксис:

 

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, і у випадку успіху виконується перехід на мітку переходу.

 

Команди умовного переходу і прапори

Назва прапора Номер біта в Eflags/flags Команда умовного переходу Значення прапора для здійснення переходу
Прапор переносу cf Прапор парності pf Прапор нуля zf Прапор знаку sf Прапор переповнення of Прапор переносу cf Прапор парності pf Прапор нуля zf Прапор знаку sf Прапор переповнення of   Jc Jp Jz Jc Jo Jnc Jnp Jnz Jns jno Cf=1 Pf=1 Zf=1 Sf=1 Of=1 Cf=0 Pf=0 Zf=0 Sf=0 Of=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

 






© 2023 :: MyLektsii.ru :: Мои Лекции
Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав.
Копирование текстов разрешено только с указанием индексируемой ссылки на источник.