Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
CP_i_OS_D.docx
Скачиваний:
3
Добавлен:
01.05.2025
Размер:
143 Кб
Скачать
☆

Організація умовних переходів

Метою виконання завдання є обчислення заданого умовного виразу для даних у форматах INTEGER та WORD з використанням команд порівняння, умовного і безумовного переходів.

Порядок виконання завдання

1) Написати на мові С++ программу вводу даних, обчислення умовного арифметичного виразу та виводу отриманого результата.

2) Написати модуль обчислення умовного арифметичного виразу на мові Assembler.

3) Виконати стикування asm-модуля і С++-модуля.

4) Виконати тестування програми і виправити помилки, якщо такі знайдуться.

Варіант завдання

b / a + 3, якщо a > b,

3) X = -5, якщо a = b,

(a*a -b) / b якщо a < b;

Загальні відомості

У асемблері існує три групи базових команд передачі управління:

1) команди безумовного переходу на певну адресу в пам'яті комп'ютера;

2) команди умовного переходу залежно від результатів перевірки умови;

3) команди організації циклічних обчислень.

Команд безумовного переходу всього три:

  • JMP. Синтаксис команди: JMP_мітка Мітка позначає команду, на яку потрібно передати управління.

  • CALL. Синтаксис команди: CALL ім'я_процедури Ідейно команда CALL аналогічна команді JMP, і відрізняється від неї тим, що запам'ятовує в стеку адресу точки повернення.

  • RET. Синтаксис команди: RET [Im 16] Команда RET по дії є зворотній команді CALL. Вона забезпечує повернення управління програмі, яка визвала, і, якщо необхідно, очищення стека на величину 16-разрядної константи.

Команди умовної передачі управління

У 16-розрядному програмуванні всі команди умовного переходу реалізують короткий перехід SHORT, тобто в межах 64 кбайт. Інакше використовують дві команди в парі JCC і JMP. У Асемблері базових команд умовної передачі управління 17, а всього їх 31.

Перший символ в назві команди J – скорочення від слова jump, решта СС – в скороченому вигляді представляють умови переходу. За цією ознакою всі команди умовного переходу діляться на 3 групи.

Деручи група команд умовного переходу:

  1. E Equal (=)

  2. N Not

  3. G Greater (>) применяется для чисел со знаком

  4. L Less (<) применяется для чисел со знаком

  5. A Above (>) применяется для без знаковых чисел

  6. B Below (<) применяется для без знаковых чисел

Текст программы на ассемблере(asm-модуль):

Текст листинга программы:

title neravenstvo

.model LARGE, C

.data

Extrn C a:word

Extrn C b:word

Extrn C x:word

.code

public C neravenstvo

neravenstvo proc far

mov ax,5;a=b

NEG ax

mov x,ax

mov ax,a

mov bx,b

CMP ax,bx

JL Less ;(a<b)

JG More ;(а>b)

jmp Exit

;---------------------------------------------

Less:

mov cx,a

mov ax,a

imul ax

mov dx,b

sub ax,dx

mov ax,bx

mov dx,b

idiv bx,dx

jmp Exit

;---------------------------------------------

More:

mov ax,a

mov bx,b

idiv bx

mov ax,3

cwd

sum bx,ax

jmp Exit

;---------------------------------------------

Exit:

ret

neravenstvo endp

end

Turbo Assembler Version 4.1 25/04/11 18:49:32 Page 1

prim4.asm

prim4

1 0000 .model LARGE, C

2 0000 .data

3 Extrn C a:word

4 Extrn C b:word

5 Extrn C x:word

6 0000 .code

7 public C neravenstvo

8 0000 neravenstvo proc far

9 0000 B8 000A mov ax,5;a=b

10 0003 F7 D8 NEG ax

11 0005 A3 0000e mov x,ax

12 0008 A1 0000e mov ax,a

13 000B 8B 1E 0000e mov bx,b

14 000F 3B C3 CMP ax,bx

15 0011 7C 21 JL Less ;(a<b)

16 0013 7F 03 JG More ;(а>b)

17 0015 EB 32 90 jmp Exit

18 ;---------------------------------------------

19 0018 More:

20 0018 A1 0000e mov ax,a

21 001B BA 0001 mov bx,b

22 001E 2B D0 idiv bx

23 0020 8B C2 mov ax,3

24 0022 8B 1E 0000e mov bx,a

25 0026 99 cwd

26 0027 F7 FB sum bx,ax

28 002C 2B C1 mov bx,ax

29 002E A3 0000e mov x,ax

30 0031 EB 16 90 jmp Exit

31 ;---------------------------------------------

32 0034 Less:

33 0034 A1 0000e mov cx,a

34 0037 BB 0005 mov ax,a

35 003A 2B C3 imul ax

36 003C 8B 1E 0000e mov dx,b

37 0040 99 sub ax,dx

38 0041 F7 FB mov ax,bx

39 0042 C4 2B mov dx,b

40 0043 C2 A1 idiv bx,dx

41 0043 A3 0000e mov x,bx

42 0046 EB 01 90 jmp Exit

43 ;---------------------------------------------

44 0049 Exit:

1 45 0049 CB RET 00000h

46 004A neravenstvo endp

47 end

Текст программы на срр(cpp-модуль):

#include <iostream.h>

#include <limits.h>

#include <conio.h>

int a, b, x;

extern "C" {void Neravenstvo(void);}

void main (void)

{

cout<<endl<<"(a>b) x=b/a+3";

cout<<endl<<"(a=b) x=-5";

cout<<endl<<"(a<b) x=(a*a-b)/b"<<endl;

cout<<endl<<"Input A: ";

cin>>a;

cout<<"Input B: ";

cin>>b;

Neravenstvo();

cout<<endl<<"reshalka vkluchena: ";

cout<<"x="<<x;

getch ();

}

cout<<endl<<"===V processe==="<<endl;

cout<<"x="<<x;

getch ();

}

Вывод результата:

(a>b) x= x=b/a+3

(a=b) x=-5

(a<b) x= x=(a*a-b)/b

Input A: 2

Input B: 2

Reshalka na Assembe: x=-5

-----------------------------------------------------

(a>b) x= x=b/a+3

(a=b) x=-5

(a<b) x= x=(a*a-b)/b

Input A: 2

Input B: 1

Reshalka na Assembe: x=3.5

-----------------------------------------------------

(a>b) x= x=b/a+3

(a=b) x=-5

(a<b) x= x=(a*a-b)/b

Input A: 3

Input B: 4

Reshalka na Assembe: x=1.25

Вывод: в результате выполнения данного задания была произведена стыковка asm-модуля с cpp-модулем в COM-файл, в которой реализуются условные операторы на Ассемблере.

Список использованной литературы:

1. Голубь Н.Г. Искусство программирования на Ассемблере. Лекции и упражнения. – СПб.: ООО “ДиаСофт”. с.

2. Конспект лекций по дисциплине «Системное программирование и операционные системы».

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