Главная » Все файлы » Просмотр файлов из архивов » Документы » Пояснения к семинарским занятиям по машинным программам

Пояснения к семинарским занятиям по машинным программам

2019-04-28СтудИзба

Описание файла

Документ из архива "Пояснения к семинарским занятиям по машинным программам", который расположен в категории "". Всё это находится в предмете "практика расчётов на пэвм" из 1 семестр, которые можно найти в файловом архиве МГУ им. Ломоносова. Не смотря на прямую связь этого архива с МГУ им. Ломоносова, его также можно найти и в других разделах. .

Онлайн просмотр документа "Пояснения к семинарским занятиям по машинным программам"

Текст из документа "Пояснения к семинарским занятиям по машинным программам"

Пояснения к семинарским занятиям по машинным программам

Общие замечания:

1) Основная цель занятий - познакомиться с особенностями архитектуры различных ЭВМ (главным образом, с теми особенностями, что имеются в ПК) с помощью составления машинных программ и моделирования на языке Паскаль работы центрального процессора.

2) Приводимые характеристики ЭВМ и системы команд соответствуют тем, что рассматриваются на лекциях (на лекциях, однако, рассказывается не обо всех командах).

3) Считается, что в ЭВМ используются только целые числа (без знака и со знаком). Операции ввода-вывода не рассматриваются; считается, что к началу выполнения программы исходные данные уже находятся в нужных ячейках, а под выводом понимается запись результата в нужную ячейку.

Тема: Машинное представление целых чисел.

План занятия:

1. Системы счисления (воспоминания).

2. Представление беззнаковых (неотрицательных) целых чисел.

3. Представление знаковых целых чисел в прямом и дополнительном кодах. Недостатки прямого кода (два представления нуля, сложение в два этапа) и достоинства дополнительного кода.

4. На примере ПК объяснить алгоритмы сложения и вычитания беззнаковых чисел и знаковых чисел в дополнительном коде и правила формирования флагов переноса (CF), переполнения (OF), знака (SF) и нуля (ZF).

5. Описать на Паскале процедуру сложения целых чисел и изменения флагов (процедуру вычитания задать на дом).

Тема: Трехадресная ЭВМ (УМ-3).

Описание УМ-3

Размер ячеек - 56 двоичных разрядов (14 шестнадцатиричных цифр)

Объем памяти - 216 ячеек;

Адреса - от 0000 до FFFF16

Представление целых чисел (каждое число - одна ячейка):

беззнаковые числа - в прямом коде,

знаковые числа - в дополнительном коде

Формат команд:

КОП А1 А2 А3 (КОП - 8 разрядов, Аi - по 16 разрядов)

Система команд:

Название КОП Операция Примечание

останов 99 стоп А1,А2,А3 - любые адреса

пересылка 00 А1  А3 А2 - любой адрес

арифметические:

сложение 01 А1+А2  А3 числа со знаком и без знака

вычитание 02 А1-А2  А3 - " -

умножение:

со знаком 03 А1*А2  А3

без знака 13 - " -

деление:

со знаком 04 А1 div А2  А3, А1 mod А2  А3+1

без знака 14 - " -

переходы:

безусловный 80 перейти к А3 А1,А2 - любые адреса

по = 81 при А1=А2 перейти к А3 числа со знаком и без знака

по  82 при А1А2 перейти к А3 - " -

по < с/зн 83 б/зн 93 при А1<А2 перейти к А3

по  с/зн 84 б/зн 94 при А1А2 перейти к А3

по > с/зн 85 б/зн 95 при А1>А2 перейти к А3

по  с/зн 86 б/зн 96 при А1А2 перейти к А3

Моделирование работы ЦП.

Ниже на языке Паскаль описаны процедура, моделирующая такт работы устройства управления (УУ) процессора УМ-3, и процедуры, моделирующие работу блоков сложения и вычитания целых чисел (со знаком и без знака) из арифметико-логического устройства (АЛУ) процессора.

Используемые соглашения:

1) 16-ричные числа записываются как в Турбо Паскале: $F, $6A05 и т.п.

2) Для выделения части машинного слова - с n-го разряда по k-ый (нумерация слева направо начиная с 1) - используется конструкция X[n..k]. Например, если X=$123567, то X[1..8]=$12 (=00010010b), X[9..9]=X[9]=$0.

type

машслово=0..$FFFFFFFFFFFFFF;

адрес=0..$FFFF;

var

ПАМ: array[address] of машслово; {оперативная память}

{регистры процессора:}

СА: адрес; {счетчик адреса}

РК: машслово; {регистр команды}

КОП: 0..$FF; {код операции команды}

А1,А2,А3: адрес; {адреса команды}

ОП1,ОП2: машслово; {регистры 1-го и 2-го операндов}

S: машслово; {регистр результата (сумматор)}

S1: машслово; {дополнительная часть результата (при делении)}

F1: boolean; {если true, то (S,S1) ==> (А3,А3+1) - для деления}

CF,OF,ZF,SF: 0..1; {флаги}

{блоки АЛУ:}

procedure add; forward; {S:=ОП1+ОП2 и установка флагов}

procedure sub; forward; {S:=ОП1-ОП2 и установка флагов}

procedure imul; forward; {S:=ОП1*ОП2 и установка флагов}

...

procedure divide; forward; {S:=ОП1 div ОП2; S1:=ОП1 mod ОП2; F1:=true}

{------------- такт работы УУ ---------------}

procedure cpu;

label 1, 2, 3, 999;

var omega: boolean;

begin

1: {выполнение команды по адресу из СА}

F1:=false;

РК:=ПАМ[СА]; {сама выполняемая команда}

СА:=СА+1; {адрес следующей команды}

КОП:=РК[1..8]; {КОП команды}

А1:=РК[9..24]; {1-й адрес}

А2:=РК[25..40]; {2-й адрес}

А3:=РК[41..56]; {3-й адрес}

{0-адресные команды:}

if КОП=$99 {останов} then goto 999;

{1-адресные команды:}

if КОП=$80 then {безусл. переход} begin СА:=А3; goto 3 end;

{2-адресные команды:}

ОП1:=ПАМ[А1]; {1-й операнд}

if КОП=$00 {пересылка} then begin S:=ОП1; goto 2 end;

{3-адресные команды:}

ОП2:=ПАМ[А2]; {2-й операнд}

if КОП <= $14 then {арифметические операции}

case КОП of

$01 {сложение}: add;

$02 {вычитание}: sub;

...

$14 {деление знаковых чисел}: divide; {F1:=true}

end

else {условные переходы}

begin

sub; {вычитание S:=ОП1-ОП2 и установка флагов}

case КОП of

{для чисел со знаком и без знака}

$81 {по = }: omega:=ZF=1;

$82 {по <>}: omega:=ZF=0;

{для чисел со знаком}

$83 {по < }: omega:=SF<>OF;

$84 {по >=}: omega:=SF=OF

$85 {по > }: omega:=(SF=OF) and (ZF=0);

$86 {по <=}: omega:=(SF<>OF) or (ZF=1);

{для чисел без знака}

$93 {по < }: omega:=CF=1;

$94 {по >=}: omega:=CF=0;

$95 {по > }: omega:=(CF=0) and (ZF=0);

$96 {по <=}: omega=(CF=1) or (ZF=1);

end;

if omega then СА:=А3;

goto 3;

end;

2: {запись результата в память}

ПАМ[А3]:=S; if F1 then ПАМ[А3+1]:=S1;

3: {конец такта} goto 1;

999: {останов процессора}

end; {of cpu}

{-------- блоки АЛУ сложения и вычитания целых чисел --------}

procedure add; {сложение S:=ОП1+ОП2 (чисел без знака и со знаком) и установка флагов}

var sum:0..3; i:integer;

begin

CF:=0; ZF:=1;

for i:=56 downto 1 do

begin

sum:=ОП1[i]+ОП2[i]+CF;

CF:=sum div 2; {CF - перенос в следующий (слева) разряд}

S[i]:=sum mod 2; if S[i]=1 then ZF:=0;

end;

SF:=S[1]; {знаковый бит}

{переполнение мантиссы (OF=1), если у операндов одинаковые знаки,

а у результата знак иной:}

if (ОП1[1]=ОП2[1]) and (SF<>ОП2[1]) then OF:=1 else OF:=0;

end;

procedure sub; {вычитание S:=ОП1-ОП2 (чисел без знака и со знаком) и установка флагов}

var dif:0..3;

begin

CF:=0; ZF:=1;

for i:=56 downto 1 do

begin

dif:=2+ОП1[i]-ОП2[i]-CF;

CF:=1-(dif div 2); {CF - нужен ли заем от левого разряда}

S[i]:=dif mod 2; if S[i]=1 then ZF:=0;

end;

SF:=S[1]; {знаковый бит}

{переполнение мантиссы (OF=1), если у операндов разные знаки

и знак результата совпал со знаком 2-го операнда:}

if (ОП1[1]<>ОП2[1]) and (SF=ОП2[1]) then OF:=1 else OF:=0;

end;

Программирование на УМ-3.

Возможные примеры для составления программ:

1. y:=-x5-(100x4+x)

2. c:=max(a2 mod b, -16+a2 div b)

3. По номеру некоторого года определить, високосный он или нет.

4. h, m, s - час, минута и секунда некоторого момента времени; прибавить к этому времени 1 секунду.

5. Найти наибольший общий делитель двух натуральных чисел.

6. f=n! (n0)

7. y:=1*x19+2*x18+...+19*x+20

Тема: Двухадресная ЭВМ с регистрами (УМ-Р).

Пояснения:

1) Хотя все арифметические, логические и т.п. команды по смыслу являются трехадресными, очень часто эти команды оказываются двухадресными: обычно результат команды записывается на место одного из двух первых операндов. Поэтому для сокращения размера команд можно убрать из них третий адрес и договориться, что результат записывается по 1-му (или 2-му) адресу команды: А1:=А1А2. Так получается двухадресная ЭВМ.

2) При выполнении каждой команды приходится многократно обращаться к ячейкам памяти, что замедляет выполнение команд. Сделать "быстрыми" все ячейки памяти - дорого, однако можно сделать "быстрыми" небольшое число ячеек (порядка 10-20), расположив их вне памяти, а в самом процессоре (их называют регистрами), и в основном работать с этими регистрами. Так получается регистровая ЭВМ.

3) С переходом на двухадресные команды операцию условного перехода приходится выполнять в две команды: в первой - команде сравнения - сравниваются два числа (из первого вычитается второе без записи куда-либо разности) и формируются флаги, а во второй проверяются флаги и выполняется, если надо, собственно переход.

Описание УМ-Р

Размер ячейки - 16 двоичных разрядов (4 шестнадцатиричных цифр)

Размер памяти - 220 ячеек

Адреса - от 0 до FFFFF16

Представление целых чисел: как в УМ-3, но на каждое число отводится 2 соседние ячейки (адрес числа - адрес его первой ячейки)

Имеется 16 регистров с номерами от 0 до F16

Размер регистра - 32 разрядов (= размер числа)

Форматы команд: КОП R1 A2 (регистр-память, 2 ячейки)

КОП R1 R2 (регистр-регистр, 1 ячейка)

(КОП - 8 р., R1,R2 - по 4 р., A2 - 20 р.)

Система команд (флаги меняются как в УМ-3):

(запись (A2,A2+1) обозначает число, находящееся в двух соседних ячейках - с адресами A2 и A2+1)

Название КОП Регистр-память КОП Регистр-регистр

останов 99 стоп

пересылки 00 R1:=(A2,A2+1) 20 R1:=R2

10 R1  (A2,A2+1)

арифметические:

сложение 01 R1:=R1+(A2,A2+1) 21 R1:=R1+R2

вычитание 02 R1:=R1-(A2,A2+1) 22 R1:=R1-R2

умножение:

со знаком 03 R1:=R1*(A2,A2+1) 23 R1:=R1*R2

без знака 13 - " - 33 - " -

деление:

со знаком 04 R1:=R1 div (A2,A2+1) 24 R1:=R1 div R2

(R1+1):=R1 mod (A2,A2+1) (R1+1):=R1 mod R2

без знака 14 - " - 34 - " -

сравнение 05 R1=(A2,A2+1)? 25 R1=R2?

переходы по адресу A2 (все - формата регистр-память, R1 - любой):

безусловный 80

по = 81

по  82

по < с/зн 83 б/зн 93

по  с/зн 84 б/зн 94

по > с/зн 85 б/зн 95

по  с/зн 86 б/зн 96

Возможные примеры для составления программ

- как для УМ-3.

Тема: ЭВМ с модификаторами (УМ-М).

Пояснения:

При работе с массивами требуется, чтобы на разных шагах цикла одна и та же команда обращалась к ячейкам с разными адресами (к разным элементам массива). Этого можно добиться, если в командах помимо адреса указывать номер некоторого регистра, а при выполнении команды формировать (исполнительный) адрес как сумму адреса, указанного в команде, и содержимого этого регистра и именно с этим адресом работать: поскольку содержимое регистра можно менять, то на разных шагах цикла одна и та же команда будет выполняться при разных адресах. Сам процесс вычисления исполнительного адреса называется модификацией адреса, а регистры, которые используются в этих целях, называются модификаторами (в УМ-М модификаторами могут быть любые регистры). Если модификатор используется для хранения индекса некоторого элемента массива, то такой регистр принято называть индексным, а модификацию адреса в таком случае - индексированием.

Описание УМ-М

УМ-М совпадает с УМ-Р, но есть следующие отличия:

1) Размер памяти уменьшается до 216 ячеек (адреса - от 0 до FFFF).

2) Меняется формат команд типа "регистр-память":

КОП R1 М2 A2 (КОП - 8 р., R1 и М2 - по 4 р., A2 - 16 р.).

Перед выполнением команды процессор вычисляет исполнительный адрес:

A2исп = (A2+[М2]) mod 216, если М20

= A2, если М2=0 (адрес не модифицируется)

и затем выполняет команду при этом исполнительном адресе (содержимое регистра-модификатора М2 рассматривается как число без знака).

3) Введена команда загрузки (исполнительного) адреса в регистр:

11 R1 М2 A2 (R1:=A2исп)

Возможные примеры для составления программ:

1. Найти максимальный элемент массива.

2. Циклически сдвинуть на одну позицию элементы массива.

3. Неотрицательные элементы некоторого массива скопировать в начало второго массива (того же размера), а отрицательные - в конец.

4. По массиву X[0..49] построить массив Y[1.48] согласно правилу:

y[i]:=x[i-1]-2*x[i]+x[i+1]

5. Проверить, симметричен ли массив.

6. Поменять местами максимальный и минимальный элементы массива.

7. Обнулить 100 ячеек, адрес первой из которых находится в регистре R4.

3


Свежие статьи
Популярно сейчас
Зачем заказывать выполнение своего задания, если оно уже было выполнено много много раз? Его можно просто купить или даже скачать бесплатно на СтудИзбе. Найдите нужный учебный материал у нас!
Ответы на популярные вопросы
Да! Наши авторы собирают и выкладывают те работы, которые сдаются в Вашем учебном заведении ежегодно и уже проверены преподавателями.
Да! У нас любой человек может выложить любую учебную работу и зарабатывать на её продажах! Но каждый учебный материал публикуется только после тщательной проверки администрацией.
Вернём деньги! А если быть более точными, то автору даётся немного времени на исправление, а если не исправит или выйдет время, то вернём деньги в полном объёме!
Да! На равне с готовыми студенческими работами у нас продаются услуги. Цены на услуги видны сразу, то есть Вам нужно только указать параметры и сразу можно оплачивать.
Отзывы студентов
Ставлю 10/10
Все нравится, очень удобный сайт, помогает в учебе. Кроме этого, можно заработать самому, выставляя готовые учебные материалы на продажу здесь. Рейтинги и отзывы на преподавателей очень помогают сориентироваться в начале нового семестра. Спасибо за такую функцию. Ставлю максимальную оценку.
Лучшая платформа для успешной сдачи сессии
Познакомился со СтудИзбой благодаря своему другу, очень нравится интерфейс, количество доступных файлов, цена, в общем, все прекрасно. Даже сам продаю какие-то свои работы.
Студизба ван лав ❤
Очень офигенный сайт для студентов. Много полезных учебных материалов. Пользуюсь студизбой с октября 2021 года. Серьёзных нареканий нет. Хотелось бы, что бы ввели подписочную модель и сделали материалы дешевле 300 рублей в рамках подписки бесплатными.
Отличный сайт
Лично меня всё устраивает - и покупка, и продажа; и цены, и возможность предпросмотра куска файла, и обилие бесплатных файлов (в подборках по авторам, читай, ВУЗам и факультетам). Есть определённые баги, но всё решаемо, да и администраторы реагируют в течение суток.
Маленький отзыв о большом помощнике!
Студизба спасает в те моменты, когда сроки горят, а работ накопилось достаточно. Довольно удобный сайт с простой навигацией и огромным количеством материалов.
Студ. Изба как крупнейший сборник работ для студентов
Тут дофига бывает всего полезного. Печально, что бывают предметы по которым даже одного бесплатного решения нет, но это скорее вопрос к студентам. В остальном всё здорово.
Спасательный островок
Если уже не успеваешь разобраться или застрял на каком-то задание поможет тебе быстро и недорого решить твою проблему.
Всё и так отлично
Всё очень удобно. Особенно круто, что есть система бонусов и можно выводить остатки денег. Очень много качественных бесплатных файлов.
Отзыв о системе "Студизба"
Отличная платформа для распространения работ, востребованных студентами. Хорошо налаженная и качественная работа сайта, огромная база заданий и аудитория.
Отличный помощник
Отличный сайт с кучей полезных файлов, позволяющий найти много методичек / учебников / отзывов о вузах и преподователях.
Отлично помогает студентам в любой момент для решения трудных и незамедлительных задач
Хотелось бы больше конкретной информации о преподавателях. А так в принципе хороший сайт, всегда им пользуюсь и ни разу не было желания прекратить. Хороший сайт для помощи студентам, удобный и приятный интерфейс. Из недостатков можно выделить только отсутствия небольшого количества файлов.
Спасибо за шикарный сайт
Великолепный сайт на котором студент за не большие деньги может найти помощь с дз, проектами курсовыми, лабораторными, а также узнать отзывы на преподавателей и бесплатно скачать пособия.
Популярные преподаватели
Добавляйте материалы
и зарабатывайте!
Продажи идут автоматически
5258
Авторов
на СтудИзбе
421
Средний доход
с одного платного файла
Обучение Подробнее