Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ASS_1_ukr.doc
Скачиваний:
0
Добавлен:
01.03.2025
Размер:
385.54 Кб
Скачать

Команди переходу для беззнакових даних.

Мнемоніка Опис Прапорці, що перевіряються

JE/JZ Перехід, якщо дорівнює/нуль ZF

JNE/JNZ Перехід, якщо не дорівнює/не нуль ZF

JA/JNBE Перехід, якщо вище/не нижче або дорівнює ZF, CF

JAE/JNB Перехід, якщо вище або дорівнює/ не нижче CF

JB/JNAE Перехід, якщо нижче/не вище або дорівнює CF

JBE/JNA Перехід, якщо нижче або дорівнює/ не вище CF, AF

Будь яку перевірку можно кодувати одним з двох мнемоничних кодів. Наприклад, JB та JNAE генерують однаковий об’єктний код, хоча додатну перевірку JB зрозуміти легше, ніж від’ємну JNAE.

Команди переходу для знакових даних

Мнемоніка Опис Прапорці, що перевіряються

JE/JZ Перехід, якщо дорівнює/нуль ZF

JNE/JNZ Перехід, якщо не дорівнює/не нуль ZF

JG/JNLE Перехід, якщо більше/не менше або дорівнює ZF,SF,OF

JGE/JNL Перехід, якщо більше або дорівнює/ не менше SF,OF

JL/JNGE Перехід, якщо менше/не більше або дорівнює SF,OF

JLE/JNG Перехід, якщо менше або дорівнює/ не більше ZF,SF,OF

Команди переходу для умови дорівнює або ноль (JE/JZ) та не дорівнює або не ноль (JNE/JNZ) присутні в обох списках для знакових та беззнакових даних. Стан дорівнює/ноль не залежить від наявності знаку.

Спеціальні арифметичні перевірки

Мнемоніка Опис Прапорці, що перевіряються

JS Перехід, якщо є знак (від’ємно) SF

JNS Перехід, якщо немає знаку (додатно) SF

JC Перехід, якщо є перенос (аналогічно JB) CF

JNC Перехід, якщо немає переносу CF

JO Перехід, якщо є переповнення OF

JNO Перехід, якщо немає переповнення OF

JP/JPE Перехід, якщо паритет парний PF

JNP/JPO Перехід, якщо паритет непарний PF

Використовуючи команди умовного переходу, можна організувати процес, що розгалужується, реалізуючи алгоритм, наведений у прикладі на початку даної лабораторної роботи.

1 0000 codesg segment para 'code'

2 assume cs:codesg,ds:codesg,ss:codesg

3 org 100h

4 0100 EB 07 90 main: jmp begin

5 0103 0006 a dw 6

6 0105 0005 b dw 5

7 0107 ???? c dw ?

8 ;хай змінні a,b и c знаходяться відповідно

9 ;в змінних у пам’яті A, B и C

10 0109 begin proc near

11 0109 A1 0103r MOV AX,A ; занесемо A у регістр AX

12 010C 3B 06 0105r CMP AX,B ; порівняємо AX з B

13 0110 7F 09 JG L1 ; якщо AX більше B

14 ; перейдемо на L1

15 0112 29 06 0105r SUB B,AX ; інакше віднімемо з B A

16 0116 A1 0105r MOV AX,B

17 0119 EB 04 JMP SHORT L2; перейдемо на мітку L2

18 011B 03 06 0105r L1: ADD AX,B ; додамо до A B

19 011F A3 0107r L2: MOV C,AX ; результат занесемо у С

20 0122 C3 RET

21 0123 begin endp

22 0123 codesg ends

  1. end main

Програму можна мінімізувати, якщо замість операції порівняння відразу виконати операцію віднімання, яка встановлює тіж самі прапорці.

ПІДГОТОВКА ДО РОБОТИ

  1. Вивчити корткі теоретичні відомості та рекомендовану літературу.

  2. Написати текст програми відповідно з заданим варіантом.

РОБОЧЕ ЗАВДАННЯ

Набрати, странслювати,скомпонувати та налагодити підготовлену програму.

КОНТРОЛЬНІ ЗАПИТАННЯ

  1. На яку максимальну кількість байтів можна здійснювати перехід командою JMP та командами умовного переходу.

  2. У чому різниця організації процесів, що розгалужуються, для знакових та беззнакових даних.

  3. На які прапорці впливають наступні події

  • відбувся перенос:

  • результат від’ємний

  • відбулося переповнення:

  • результат нульовий.

ЛАБОРАТОРНА РОБОТА № 6

ОРГАНІЗАЦІЯ ЦИКЛІЧНИХ ПРОЦЕСІВ

Мета роботи: ознайомитись з механізмом організаціїї циклічних процесі та командами Асемблера, що для цього використовуються.

КОРОТКІ ТЕОРЕТИЧНІ ВІДОМОСТІ

Під час створення вашої програми може виникнути необхідність повторювати деяку послідовність команд задану кількість разів. Щоб не переписувати блок обнакових команд декілька разів, організується ЦИКЛІЧНИЙ ПРОЦЕС, при якому після завершення блоку команд, що повторюються, керування передається на його початок до тієї пори, доти блок команд не буде виконаний задану кількість разів.

Для організації циклічних процесів у Асемблері є команда LOOP. Крім того, цикли можна створювати за допомогою команд умовних переходів. При використанні команди LOOP кількість циклів (кількість повторень ділянки вашої програми) задається у регістрі CX. У кожному циклі команда LOOP автоматично зменшує вміст CX на 1. Доки значення CX не дорівнює нулю, керування передається на мітку, вказану у операнді команди LOOP. Коли CX стане рівним кулю, керування передається на наступну за LOOP команду.

В лабораторній роботі № 5 під час опису команди JMP був наведений приклад нескінченого циклічного процесу. Реально нескінчені цикли не використовуються. Модифікуємо цю програму для обчислення суми десятьох чисел натурального ряду.

Приклад 1.

1 0000 CODESG SEGMENT PARA 'Code'

2 ASSUME CS:CODESG, SS:CODESG, DS:CODESG

3 ORG 100H

4 0100 BEGIN PROC NEAR

5 0100 B8 0001 SUB AX, AX

6 0103 BB 0001 SUB BX, BX

7 0106 B9 000A MOV CX, 10

8 0109 A20:

9 0109 40 INC BX ; BX+1

10 010A 03 D8 ADD AX, BX

11 010C E2 FB LOOP A20

12 010E C3 RET

13 010F BEGIN ENDP

14 010F CODESG ENDS

  1. END BEGIN

Програма, що наведена у прикладі, виконує ділянку програми, що знаходиться між міткою A20 та командою LOOP, 10 разів (число 10 занесено ДО початку першого циклу у регістр CX).

Відстань від команди LOOP до мітки, що задана в якості її операнда, не повинна перевищувати -128 - +127 байт (перехід типу SHORT).

Додатково існують два різновиди команди LOOP: LOOPE (LOOPZ) та LOOPNE (LOOPNZ). Обидві команди також зменшують значення у CX на 1. Команда LOOPE (LOOPZ) передає керування за адресою операнда, якщо регістр СХ має ненульове значення та прапорець нуля встановлен (ZF=1). LOOPNE(LOOPNZ) передає керування за адресою операнда, якщо регістр СХ має ненульове значення та прапорець нуля скинутий (ZF=0).

У прикладі 2 показано, як організувати циклічний процес за допомогою команди умовного переходу.

Приклад 2.

1 0000 CODESG SEGMENT PARA 'Code'

2 ASSUME CS:CODESG,SS:CODESG,DS:CODESG

3 ORG 100H

4 0100 BEGIN PROC NEAR

5 0100 B8 0001 SUB AX, AX

6 0103 BB 0001 SUB BX, BX

7 0106 BA 000A MOV DX, 10

8 0109 A20:

9 0109 40 INC BX

10 010A 03 D8 ADD AX, BX

11 010C 4A DEC DX ; DX - 1

12 010D 75 FA JNZ A20

13 010F C3 RET

14 0110 BEGIN ENDP

15 0110 CODESG ENDS

  1. END BEGIN

Для виконання завдання цієї лабораторної роботи вам необхідно навчитись множити та ділити константу на ступінь числа 2. Виконувати такі операції доцільно за допомогою команд ссуву.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]