
- •Курсова робота
- •Пояснювальна записка
- •Содержание:
- •Внутреннее представление целочисленных данных
- •1 ;Prim.Asm
- •2 0000 .Model tiny
- •3 0000 .Data
- •Задание №2: Внутреннее представление вещественных данных
- •22 0050 Bfdd495182a9930c aid dq -0.4570
- •24 0060 Bfdd2bd3c3611340 dq -0.4564
- •Вычисление целочисленных арифметических выражений
- •Організація умовних переходів
22 0050 Bfdd495182a9930c aid dq -0.4570
23 0058 3FDD2BD3C3611340 DQ 0.4564
24 0060 Bfdd2bd3c3611340 dq -0.4564
25 0068 3FDD495182A9930C DQ 0.4570
26 0070 40515D495182A993 DQ 63.4570
27 0078 C049BA57A786C226 DQ -57.4564
28 0080 4049BA57A786C226 DQ 57.4564
29 0088 C0515D495182A993 DQ -63.4570
30 ;------------long_double----------------
31 0090 40058A00000000000000 at DT 63.0
32 009A 4004CC00000000000000 DT 57.0
33 00A4 C0058A00000000000000 bld DT -63.0
34 00AE C004CC00000000000000 DT -57.0
35 00B8 BFFDEA4A8C154C985F07 ail DT -0.4570
36 00C2 3FFDE95E9E1B089A0275 DT 0.4564
37 00CC BFFDE95E9E1B089A0275 DT -0.4564
38 00D6 3FFDEA4A8C154C985F07 DT 0.4570
39 00E0 40058AEA4A8C154C985F DT 63.4570
40 00EA C004CDD2BD3C36113405 DT -57.4564
41 00F4 4004CDD2BD3C36113405 DT 57.4564
42 00FE C0058AEA4A8C154C985F DT -63.4570
43 END
Висновок:
в
результаті
виконання
другого
завдання
курсової
роботи
були
перекладені
матеріальні
числа
з
десятичної
до
двоїчної
системи
счислення
і
визначене
їх
внутрішнє
уявлення
відповідно
до
форматів
типу
Single
(float,
double, long double
)
Задание
№3:
Вычисление целочисленных арифметических выражений
Метою виконання завдання є обчислення цілочисельних арифметичних виразів для вхідних даних в знакових форматах довжиною 16 біт Integer з використанням арифметичних операцій ADD, ADC, INC, SUB, SBB, DEC, NEG, IMUL, IDIV, CBW, CWD, SAL, SAR.
Порядок виконання завдання
1) Написати модуль обчислення арифметичного виразу на мові Assembler.
2) Написати на мові С++ програму уводу вхідних даних, обчислення арифметичного виразу та виводу отриманого результата.
3) Виконати стикування asm-модуля і С++-модуля.
4) Виконати тестування програми і виправити помилки, якщо такі знайдуться.
Варіант завдання
(2*c-d*82) / (a/4 -1)
Общие сведение:
Для осуществления стыковки модули должны удовлетворять следующим условиям:
Требования к срр-модулю:
- имена внешних переменных и функций необходимо объявлять как глобальные;
- имена внешних функций должны быть уникальными (то есть не допускается использование внешних функций с одинаковыми именами в разных модулях);
- к именам внешних функций необходимо применить спецификатор сборки extern для их интерпретации в стиле языка С, а не С++;
- константы должны быть локальными;
- вызов внешних функций выполняется по обычным правилам языка С++.
Требования к asm-модулю:
- для модели памяти желательно установить тип Large с обязательным указанием языка программирования С, а не С++;
- внешние переменные, которые передаются из срр-модуля в asm-модуль, разрешается описывать как в сегменте кода, так и в сегменте данных с использованием ключевого слова-модификатора Extrn;
- описание констант необходимо повторить, они должны быть локальными и могут размещаться как в сегменте данных, так и в сегменте кода;
- внешние функции должны быть описаны при помощи директивы описания внешних имен Public с обязательным указанием языка программирования С, а не С++;
для стыковки срр и asm модулей при использовании компиляторов bcc и tasm описание сегментов программы разрешается выполнять как в стиле MASM, так и в стиле IDEAL.
После создания модулей с учетом выше перечисленных правил их стыковка осуществляется следующим образом:
компиляция asm-модуля и создание объектного модуля (.obj) с обязательным указанием ключа /ml (для устранения противоречий из-за чувствительности языка С++ к регистру символов) и дополнительным указанием ключа /l (для создания листинга):
tasm /ml /l имя.asm
В результате получаем объектный модуль (имя.obj).
стыковка модулей, сборка программы и создание исполняемого файла (.exe).
bcc –ml имя1.cpp имя.obj
В результате получаем исполняемый модуль (имя1.exe).
Текст програми task.asm (asm-модуль ):
;y=(2*c-d*82) / (a/4 -1)
title Variant3
.model Large, C
.data
Extrn C a:word
Extrn C b:word
Extrn C c:word
Extrn C d:word
Extrn C y:word
Extrn C v1:word
Extrn c v2:word
.code
Public C prim3
prim3 proc far
mov cx,82
mov ax,d
cwd
imul cx
mov v1,ax
mov cx, 2
mov ax,c
imul ax
mov bx, v1
sub bx, ax
mov v1,bx
mov cx,4
mov ax,a
cbw
idiv cx
mov dx, ax
mov bx, 1
sub dx, bx
mov v2, dx
mov v1,ax
mov v2,cx
cbw
idiv cx
mov y, cx
ret
variant3 endp
end
Turbo Assembler Version 4.1 25/04/11 21:41:46 Page 1
prim31.asm
prim3
1 0000 .model Large, C
2 0000 .data
3 Extrn C a:word
4 Extrn C b:word
5 Extrn C c:word
6 Extrn C d:word
7 Extrn C y:word
8 Extrn C v1:word
9 Extrn c v2:word
10 0000 .code
11 Public C prim3
12 0000 prim3 proc far
13 0000 B9 0003 mov cx,82
14 0003 A1 0000e mov ax,d
15 0006 99 cwd
16 0007 F7 F9 imul ax
17 0009 A3 0000e mov v1,ax
18 000C B9 0002 mov cx, 2
19 000F A1 0000e mov ax,c
20 0012 F7 E8 imul ax
21 0014 8B 1E 0000e mov bx, v1
22 0018 2B D8 sub bx, ax
23 001A
89 1E 0000e mov v1,bx
24 001E B9 0004 mov cx,4
25 0021 A1 0000e mov ax,a
26 0024 98 cbw
27 0025 F7 F9 idiv cx
28 0027 8B D8 mov bx, ax
29 0029 8B 16 0000e mov dx, 1
30 002D 2B D3 sub bx, dx
31 002F 89 16 0000e mov v2, dx
32 0033 A3 0000e mov v1,ax
33 0036 89 0E 0000e mov v2,cx
34 003A 98 cbw
35 003B F7 F9 idiv cx
36 003D 89 0E 0000e mov y, cx
1 37 0041 CB RET 00000h
38 0042 prim3 endp
39 end
Текст
программы на срр(cpp-модуль):
#include <iostream.h>
#include <limits.h>
#include <conio.h>
int a, c, d, y, v1, v2;
extern "C"
{void vartiant3 (void);}
void main (void)
{
cout<<endl<<"y=(2*C-D*82)/(A/4 - 1)"<<endl;
cout<<endl<<"Input A: ";
cin>>a;
cout<<"Input C: ";
cin>>c;
cout<<"Input D: ";
cin>>d;
y=(2*c-d*82)/(a/4-1);
cout<<endl<<"reshalka na C++: ";
cout<<"y="<<y;
y=0;
variant3 ();
cout<<endl<<"start vichisleniy assemblera: ";
cout<<"y="<<y;
getch ();
}
Вывод результата:
y=(2*C-D*82)/(A/4-1)
Input A: 16
Input C: 100
Input D: 2
Calculation in C++: y=12
Calculation in Assembler: y=12
Вывод: в результате выполнения данного задания была воспроизведена стыковка asm-модуля с cpp-модулем в COM-файл, который производит вычисление данного уравнения.
Задание №4