У вас вопросы?
У нас ответы:) SamZan.net

модуль обчислення-підрахунку- арифметичного виразу-вираження- на мові-язиці- Асемблер; написати модуль об

Работа добавлена на сайт samzan.net: 2015-07-05

Поможем написать учебную работу

Если у вас возникли сложности с курсовой, контрольной, дипломной, рефератом, отчетом по практике, научно-исследовательской и любой другой работой - мы готовы помочь.

Предоплата всего

от 25%

Подписываем

договор

Выберите тип работы:

Скидка 25% при заказе до 5.4.2025

SM: Приклад оформлення звіту. 

Практична робота №5 .

Обчислення|підрахунок| цілочисельних виразів

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

Порядок|лад| виконання роботи

  1.  написати модуль обчислення|підрахунку| арифметичного виразу|вираження| на мові|язиці| Асемблер;
  2.  написати модуль обчислення|підрахунку| арифметичного виразу|вираження| на мові|язиці| Сі;
  3.  провести тестові перевірки, відзначити нормальні і аномальні результати, зробити аналіз результатів.

Завдання|задавання| для виконання. Варіант №39.

  1.   Скласти програму, яка обчислює|обчисляє| значення цілочисельного виразу|вираження| для початкових|вихідних| даних в знакових форматах завдовжки 8  біт, використовуючи арифметичні операції ADD|, INC|, SUB|, | DEC|, NEG|, IMUL|, IDIV|.

(25/c-d| + 2)/(d + a*a-l|)

  1.  Зробити цей приклад|зразок| в двох варіантах реалізації з|із| залученням мов|язиків| Сі і Асемблер.

Розробка алгоритму.

    Алгоритм розв’язання задачі – лінійний. Обчислення почнемо із знаменника. Потім обчислимо чисельник. Через те, що в знаменнику використовується операція множення а*а, 8-бітове число  d  необхідно розширити до слова (16 біт), щоб не втратити старшу частину добутку. Таким чином, знаменник виходить завдовжки 16 біт, значить, чисельник має бути 32-бітовим. Результат обчислення арифметичного виразу  буде 16-бітовий.

Визначення змінних програми

Для розв’язання задачи нам знадобляться змінні для представлення кожного параметра формул - а,c,d і для представлення результату - result. Крім того, доведеться ввести додаткові змінні znamen і  chisl для зберігання проміжних результатів: знаменника і чисельника. Вони  необхідні  для відладки програми.

Початкові|вихідні| дані мають розмір 1 байт. Виділимо під змінні а, с, d по 2 байти для наочності. Літера „с” – зарезервоване слово. Тому, число с будемо зберігати в змінній с1.

Текст програми на мові|язиці| Асемблер

include irvine32.inc

.data

a byte 1,0

c1 byte -1,0

d byte 255,0

chisl word ?

znamen word ?

result word ?

.code

main proc

 ;-------------------- знаменатель

 mov eax,0

 mov al,a

 imul al  ; результат в ax

 mov bx,ax

 mov al,d

 cbw

 add ax,bx  ; d=a*a

 dec ax

 mov znamen,ax

 ;---------------------числитель 

 mov ax,25

 idiv c1  ; результат в al

 sub al,d

 add al,2

 cbw

 mov chisl,ax

 ;--------------------- результат

 cwd

 idiv znamen

 mov result,ax

 exit

main endp

end main        

Текст програми на мові|язиці| Сі

#include <iostream>

#include <windows.h>

using namespace std;

void main()

{

SetConsoleCP(1251);

SetConsoleOutputCP(1251);

char a,c,d;

short int znamen, chisl, result;

int temp;

char otv;

do

{

 //----------------------------------------ввод данных---------

 cout<<"Введите a: ";

 cin>>temp;

 a=temp;

 cout<<"Введите c: ";

 cin>>temp;

 c=temp;

 cout<<"Введите d: ";

 cin>>temp;

 d=temp;

 //----------------------------------------вывод данных---------

 cout<<"\nВы ввели:\n";

 cout<<"\ta\t:"<<dec<<(short int)a<<"\t"<<hex<<(short int)a<<endl;

 cout<<"\tc\t:"<<dec<<(short int)c<<"\t"<<hex<<(short int)c<<endl;

 cout<<"\td\t:"<<dec<<(short int)d<<"\t"<<hex<<(short int)d<<endl;

 //---------------------------------------------------------------

 znamen=d+a*a-1;

 chisl=25/c-d+2;

 result=chisl/znamen;

 //----------------------------------------вывод результата---------

 cout<<"\nРезультат:\n";

 cout<<"\tchisl \t: "<<dec<<chisl<<"\t"<<hex<<chisl<<endl;

 cout<<"\tznamen \t: "<<dec<<znamen<<"\t"<<hex<<znamen<<endl;

 cout<<"\tresult \t: "<<dec<<result<<"\t"<<hex<<result<<endl;

 cout<<endl<<endl;

 cout<<endl<<endl;

 cout<<"Продолжить? ";

 cin>>otv;

} while (otv=='y');

 

system("pause");

}


Відладка програми

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

Введите a: 0

Введите c: 1

Введите d: 0

Вы ввели:

       a  : 0    0

       c  : 1    1

       d  : 0    0

Результат:

 chisl   : 27     1b

       znamen  : -1     ffff

       result  : -27    ffe5

Введите a: 127

Введите c: -1

Введите d: -128

Вы ввели:

       a  : 127  7f

       c  : -1   ffff

       d  : -128      ff80

Результат:

 chisl   : 105    69        

 znamen  : 16000  3e80

      result  : 0      0

Введите a: 0

Введите c: -1

Введите d: 127

Вы ввели:

       a  : 0    0

       c  : -1   ffff

       d  : 127  7f

Результат:

       chisl   : -150  ff6a

 znamen  : 126   7e

       result  : -1    ffff

Введите a: 1

Введите c: -1

Введите d: 255

Вы ввели:

       a  : 1    1

       c  : -1   ffff

       d  : -1   ffff

Результат:

       znamen  : -1    ffff

       chisl   : -22   ffea

       result  : 22    16

 Висновки.

За результатами|за наслідками| тестування Асемблер і|та| С|із|++ працюють нормально.

У 4-му варіанті тестування результат невірний  -   знакове число 255 не поміщається в коміку пам’яті розміром 1 байт.


Для беззнакового формата:

char a,c,d;

unsigned short int znamen, chisl, result;

unsigned short int temp;

char otv;

//----------------------------------------вывод данных---------

cout<<"\nВы ввели:\n";

cout<<"\ta\t:"<<dec<<(unsigned short int)a<<"\t"<<hex<<(unsigned short int)a<<endl;

cout<<"\tc\t:"<<dec<<(unsigned short int)c<<"\t"<<hex<<(unsigned short int)c<<endl;

cout<<"\td\t:"<<dec<<(unsigned short int)d<<"\t"<<hex<<(unsigned short int)d<<endl;

Введите a: 0

Введите c: 1

Введите d: 0

Вы ввели:

       a  : 0    0

       c  : 1    1

       d  : 0    0

Результат:

 chisl   : 27     1b

       znamen  : -1     ffff

       result  : -27    ffe5

Введите a: 127

Введите c: 1

Введите d: 255

Вы ввели:

       a       :127    7f

       c       :1      1

       d       :65535  ffff

Результат:

       chisl   : 28    1c

       znamen  : 16127 3eff

       result  : 0     0

Компилятор выполнил преобразование  неправильно!!!

Введите a: 128

Введите c: 127

Введите d: 126

Вы ввели:

       a       :65408  ff80

       c       :127    7f

       d       :126    7e

Результат:

       chisl   : 65412 ff84

       znamen  : 16509 407d

        result  : 3     3

Перевірити, чи правильно ці віріанти працюють на Асемблері.  Зробити висновки.

PAGE  4

DATE \@ "M/d/yyyy" 12/6/2012




1. Основания и фундаменты
2. Особенности тематических спортивных программ в и их место в российском телевидении
3. театр уж полон человек триста с зонтиками на случай дождя сидят на скамейках амфитеатром сходящих с холм
4. ХАКИМА АЛЬКАХТАНИ ДА СОХРАНИТ ЕГО АЛЛАХПеревод с арабского Омар абу АбдуЛлах Вся хвала принадлежит Алл
5. на тему- ldquo;Производство сдобного хлеба из муки 1го сорта в хозяйстве ООО Агрофирма им
6. Микроконтроллер MCS 296
7. практикум з фізики частина 2 коливання і хвилі оптика Міністерство освіти та науки України В
8. Основная причина развития бронхитов а алкоголизм б курение в бактериальная и вирусная инфекция г
9. Братья Рони
10. Звали ее Аврора В школе была отличницей а университет окончила на высший балл