Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Лабораторная работа №1

.doc
Скачиваний:
9
Добавлен:
20.06.2014
Размер:
128.51 Кб
Скачать

2

Липецкий государственный технический университет

Кафедра автоматизированных систем управления

ЛАБОРАТОРНАЯ РАБОТА №1

по Организации ЭВМ

Архитектура фон Неймана. Основные принципы устройства и работы ЭВМ

Студент

Ключанских А.С

подпись, дата

фамилия, инициалы

Группа

АС-10

Принял

ассистент

Болдырихин О.В.

ученая степень, звание

подпись, дата

фамилия, инициалы

Липецк 2013

Цель работы

Цель работы — изучение основ устройства и принципов работы компьютера фон-неймановской архитектуры.

Вариант 23

Нахождение в массиве всех элементов, не больших заданного.

Экспериментальные результаты

Программа на языке C

#include<stdio.h>

#include<conio.h>

#include<locale.h>

void main()

{

setlocale( LC_ALL,"Russian" );

int i, a[5]={3,4,2,5,7};

int x=4;

int k=0;

printf("Исходный массив: ");

for(i=0;i<5;i++)

{

printf("%d ",a[i]);

}

printf("\n\nЗаданное число: %d\n\n",x);

printf("Число элементов, не больших заданного числа %d:",x);

for(i=0;i<5;i++)

{

if(a[i]<=x)

{

k++;

}

}

printf(" %d\n",k);

getch();

}

Программа на языке ассемблер

data segment

arr dw 3, 4, 2, 7

data ends

code segment

x dw 4

assume cs:code, ds:data

begin:

mov ax, data

mov ds, ax

mov bx, offset arr

mov cx, 4

cycle:

mov ax, [bx]

cmp ax, x

ja metka

inc dx

metka:

add bx,2

loop cycle

mov ax, 4C00h

int 21h

code ends

end begin

Машинный код программы

1 0000 data segment

2 0000 0003 0004 0002 0007 arr dw 3, 4, 2, 7

3 0008 data ends

4 0000 code segment

5 0000 0004 x dw 4

6 assume cs:code, ds:data

7 0002 begin:

8 0002 B8 0000s mov ax, data

9 0005 8E D8 mov ds, ax

10 0007 BB 0000r mov bx, offset arr

11 000A B9 0004 mov cx, 4

12 000D cycle:

13 000D 8B 07 mov ax, [bx]

14 000F 2E: 3B 06 0000r cmp ax, x

15 0014 77 01 ja metka

16 0016 42 inc dx

17 0017 metka:

18 0017 83 C3 02 add bx,2

19 001A E2 F1 loop cycle

20 001C B8 4C00 mov ax, 4C00h

21 001F CD 21 int 21h

22 0021 code ends

23 end begin

Обработка и анализ результатов работы

Таблица состояния системы после выполнения каждой команды программы

Адрес (IP)

Команда на машинном языке

Команда на языке ассемблера

Регистр команд

Регистры

1

0005

8ED8

mov ds,ax

8E

ax=1033

bx=0000

cx=0000

dx=0000

si=0000

di=0000

bp=0000

sp=0000

ds=1023

es=1023

ss=1033

cs=1034

ip=0005

2

0007

BB0000

mov bx,0000

BB

ax=1033

bx=0000

cx=0000

dx=0000

si=0000

di=0000

bp=0000

sp=0000

ds=1033

es=1023

ss=1033

cs=1034

ip=0007

3

0009

B90500

mov cx,0005

B9

ax=1033

bx=0000

cx=0000

dx=0000

si=0000

di=0000

bp=0000

sp=0000

ds=1033

es=1023

ss=1033

cs=1034

ip=000А

4

000D

8B07

mov ax,[bx]

8B

ax=1033

bx=0000

cx=0005

dx=0000

si=0000

di=0000

bp=0000

sp=0000

ds=1033

es=1023

ss=1033

cs=1034

ip=000D

5

000F

2E3B060000

cmp ax,cs:[0000]

2E

ax=0003

bx=0000

cx=0005

dx=0000

si=0000

di=0000

bp=0000

sp=0000

ds=1033

es=1023

ss=1033

cs=1034

ip=000F

6

0014

7701

ja 0017

77

ax=0003

bx=0000

cx=0005

dx=0000

si=0000

di=0000

bp=0000

sp=0000

ds=1033

es=1023

ss=1033

cs=1034

ip=0014

7

0016

42

inc dx

42

ax=0003

bx=0000

cx=0005

dx=0000

si=0000

di=0000

bp=0000

sp=0000

ds=1033

es=1023

ss=1033

cs=1034

ip=0016

8

0017

83C302

add bx, 0002

83

ax=0003

bx=0000

cx=0005

dx=0001

si=0000

di=0000

bp=0000

sp=0000

ds=1033

es=1023

ss=1033

cs=1034

ip=0017

9

001A

E2F1

loop 000D

E2

ax=0003

bx=0002

cx=0005

dx=0001

si=0000

di=0000

bp=0000

sp=0000

ds=1033

es=1023

ss=1033

cs=1034

ip=001A

10

000D

8B07

mov ax, [bx]

8B

ax=0003

bx=0002

cx=0004

dx=0001

si=0000

di=0000

bp=0000

sp=0000

ds=1033

es=1023

ss=1033

cs=1034

ip=000D

11

000F

2E3B060000

cmp ax, cs:[0000]

2E

ax=0004

bx=0002

cx=0004

dx=0001

si=0000

di=0000

bp=0000

sp=0000

ds=1033

es=1023

ss=1033

cs=1034

ip=000F

12

0014

7701

ja 0017

77

ax=0004

bx=0002

cx=0004

dx=0001

si=0000

di=0000

bp=0000

sp=0000

ds=1033

es=1023

ss=1033

cs=1034

ip=0014

13

0016

42

inc dx

42

ax=0004

bx=0002

cx=0004

dx=0001

si=0000

di=0000

bp=0000

sp=0000

ds=1033

es=1023

ss=1033

cs=1034

ip=0016

14

0017

83C302

add bx, 0002

83

ax=0004

bx=0002

cx=0004

dx=0002

si=0000

di=0000

bp=0000

sp=0000

ds=1033

es=1023

ss=1033

cs=1034

ip=0017

15

001A

E2F1

loop 000D

E2

ax=0004

bx=0004

cx=0004

dx=0002

si=0000

di=0000

bp=0000

sp=0000

ds=1033

es=1023

ss=1033

cs=1034

ip=001A

16

000D

8B07

mov ax,[bx]

8B

ax=0004

bx=0004

cx=0003

dx=0002

si=0000

di=0000

bp=0000

sp=0000

ds=1033

es=1023

ss=1033

cs=1034

ip=000D

17

000F

2E3B060000

cmp ax, cs:[0000]

2E

ax=0002

bx=0004

cx=0003

dx=0002

si=0000

di=0000

bp=0000

sp=0000

ds=1033

es=1023

ss=1033

cs=1034

ip=000F

18

0014

7701

ja 0017

77

ax=0002

bx=0004

cx=0003

dx=0002

si=0000

di=0000

bp=0000

sp=0000

ds=1033

es=1023

ss=1033

cs=1034

ip=0014

19

0016

42

inc dx

42

ax=0002

bx=0004

cx=0003

dx=0002

si=0000

di=0000

bp=0000

sp=0000

ds=1033

es=1023

ss=1033

cs=1034

ip=0016

20

0017

83C302

add bx, 0002

83

ax=0002

bx=0004

cx=0003

dx=0003

si=0000

di=0000

bp=0000

sp=0000

ds=1033

es=1023

ss=1033

cs=1034

ip=0017

21

001A

E2F1

loop 000D

E2

ax=0002

bx=0006

cx=0003

dx=0003

si=0000

di=0000

bp=0000

sp=0000

ds=1033

es=1023

ss=1033

cs=1034

ip=001A

22

000D

8B07

mov ax,[bx]

8B

ax=0002

bx=0006

cx=0002

dx=0003

si=0000

di=0000

bp=0000

sp=0000

ds=1033

es=1023

ss=1033

cs=1034

ip=000D

23

000F

2E3B060000

cmp ax,cs:[0000]

2E

ax=0007

bx=0006

cx=0002

dx=0003

si=0000

di=0000

bp=0000

sp=0000

ds=1033

es=1023

ss=1033

cs=1034

ip=000F

24

0014

7701

ja 0017

77

ax=0007

bx=0006

cx=0002

dx=0003

si=0000

di=0000

bp=0000

sp=0000

ds=1033

es=1023

ss=1033

cs=1034

ip=0014

25

0017

83C302

add bx, 0002

83

ax=0007

bx=0006

cx=0002

dx=0003

si=0000

di=0000

bp=0000

sp=0000

ds=1033

es=1023

ss=1033

cs=1034

ip=0017

26

001A

E2F1

loop 000D

E2

ax=0007

bx=0008

cx=0002

dx=0003

si=0000

di=0000

bp=0000

sp=0000

ds=1033

es=1023

ss=1033

cs=1034

ip=001A

27

000D

8B07

mov ax,[bx]

8B

ax=0007

bx=0008

cx=0001

dx=0003

si=0000

di=0000

bp=0000

sp=0000

ds=1033

es=1023

ss=1033

cs=1034

ip=000D

28

000F

2E3B060000

cmp ax,cs:[0000]

2E

ax=0005

bx=0008

cx=0001

dx=0003

si=0000

di=0000

bp=0000

sp=0000

ds=1033

es=1023

ss=1033

cs=1034

ip=000F

29

0014

7701

ja 0017

77

ax=0005

bx=0008

cx=0001

dx=0003

si=0000

di=0000

bp=0000

sp=0000

ds=1033

es=1023

ss=1033

cs=1034

ip=0014

30

0017

83C302

add bx,0002

83

ax=0005

bx=0008

cx=0001

dx=0003

si=0000

di=0000

bp=0000

sp=0000

ds=1033

es=1023

ss=1033

cs=1034

ip=0017

31

001A

E2F1

loop 000D

E2

ax=0005

bx=000A

cx=0001

dx=0003

si=0000

di=0000

bp=0000

sp=0000

ds=1033

es=1023

ss=1033

cs=1034

ip=001A

32

001C

B8004C

mov ax,4C00

B8

ax=0005

bx=000A

cx=0000

dx=0003

si=0000

di=0000

bp=0000

sp=0000

ds=1033

es=1023

ss=1033

cs=1034

ip=001C

33

001F

CD21

int 21

CD

ax=4C00

bx=000A

cx=0000

dx=0003

si=0000

di=0000

bp=0000

sp=0000

ds=1033

es=1023

ss=1033

cs=1034

ip=001F

Вывод

В данной лабораторной работе я написал программу для нахождения в массиве всех элементов, меньших или равных заданному числу. В ней я объявил переменные двумя способами – в сегменте данных и в сегменте кода.

Так же для работы с массивом были использованы команды mov bx, offset arr для получения исполнительного (эффективного) адреса массива и mov ax,[bx] для загрузки в регистр элементов массива, что означает пересылку в аккумулятор содержимого ячейки памяти с адресом, находящимся в регистре bx. Так же выяснил что все, что заключено в квадратные скобки, интерпретируется Турбо Ассемблером как адрес.

Суть программы заключается в поэлементном сравнении всех элементов массива с заданным числом. Результат заносится в регистр dx. Для повторных сравнений я использовал команду loop, предварительно занес количество элементов массива в регистр cx, который будет указывать на количество повторений тела цикла. По достижению команды loop, содержимое регистра cx автоматически уменьшается на 1. Пока содержимое регистра cx не равно нулю, управление передается на метку, указанную в операнде. В противном случае управление передается на следующую после loop команду, а именно add bx,2 что означает переход к следующему элементу массива.

Также я выяснил, что если операнд находится в команде, то он следует "непосредственно" за кодом операции. Такая адресация называется непосредственной. Пример — команды передачи непосредственных данных в регистр. В моей программе этому соответствует команда mov cx,4.

Если операнд находится в памяти данных, то указать его местоположение можно двумя способами.

  • поместить его адрес в команду. Такая адресация называется прямой.

  • поместить его адрес в регистр процессора. Такая адресация называется косвенной или косвенно-регистровой.

В моей программе этому соответствует команда mov aх,[bx].