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

lab2 / report_lr2

.doc
Скачиваний:
10
Добавлен:
10.02.2019
Размер:
159.23 Кб
Скачать

МИНОБРНАУКИ РОССИИ

Санкт-Петербургский государственный

электротехнический университет

«ЛЭТИ» им. В.И. Ульянова (Ленина)

Кафедра МОЭВМ

отчет

по лабораторной работе №2

по дисциплине «Организация ЭВМ и систем»

Тема: Изучение режимов адресации основной памяти

Студент гр. 3303

Преподаватель

Санкт-Петербург

2018

Цель работы.

Ознакомиться с режимом работы адресации основной памяти в языке Ассемблер.

Ход работы.

  1. Из файла lr2.dat взят вариант значений исходных данных (массивов) vec1, vec2 и matr и занесены вместо значений, указанных в приведённой для образца программе.

Вариант 1

vect 1

1,2,3,4,8,7,6,5

vect 2

-10,-20,10,20,-30,-40,30,40

matr

1,2,3,4,-4,-3,-2,-1,5,6,7,8,-8,-7,-6,-5

  1. Программа была протранслированна и был получен список предупреждений и ошибок.

  • mov mem3,[bx]

LR2_COMP.ASM(55): error A2052: Improper operand type

Эта команда переводит информацию из сегмента памяти в другой, что невозможно сделать напрямую в языке Assembler.

  • mov cx,vec2[di]

LR2_COMP.ASM(62): warning A4031: Operand types must match

Различный объём операндов - объем регистра ax составляет 2 байта, а размер элемента в массиве составляет 1 байт.

  • mov cx,matr[bx][di]

LR2_COMP.ASM(66): warning A4031: Operand types must match

Различный объём операндов - объем регистра сx составляет 2 байта, а размер элемента в массиве составляет 1 байт.

  • mov ax,matr[bx*4][di]

LR2_COMP.ASM(67): error A2055: Illegal register value

Нельзя умножать 16 битные регистры

  • mov ax,matr[bp+bx]

LR2_COMP.ASM(87): error A2046: Multiple base registers

В базированной адресации необходимо указывать базовый регистр, затем производить смещение с помощью индексного. А в данном случае оба регистра базовые.

  • mov ax,matr[bp+di+si]

LR2_COMP.ASM(88): error A2047: Multiple index registers

В базированной адресации необходимо указывать базовый регистр, затем производить смещение с помощью индексного. А в данном случае один регистр базовый, а 2 индексные.

  1. Запуск программы

Стартовые значения регистров приведены в табл.1

Таблица 1 – стартовые значения регистров

CS =119C

AX =0000

SI =0000

IP =0100

DS =119C

BX =0000

DI =0000

HS =119C

SS =119C

CX =087B

BP =0000

FS =119C

ES =119C

DX =0000

SP =FFFD

FLAGS =00100000

Таблица 2 - прогон программы в отладчике

Адрес команды

Символический код команды

16-ричный код команды

Содержимое регистров и ячеек памяти

До выполнения

После выполнения

0000

Push DS

1E

SP = 0018

DS = 119C

IP = 0000

Stack +0 0000

+2 0000

+4 0000

+6 0000

SP = 0016

DS = 119C

IP = 0001

Stack +0 119C

+2 0000

+4 0000

+6 0000

0001

Sub AX, AX

2BC0

IP = 0001

AX = 0000

IP = 0003

AX = 0000

0003

Push AX

50

SP = 0016

IP = 0003

Stack +0 119C

+2 0000

+4 0000

+6 0000

SP = 0014

IP = 0004

Stack +0 0000

+2 119C

+4 0000

+6 0000

0004

Mov AX, 11AE

B8AE11

AX = 0000

IP = 0004

AX = 11AE

IP = 0007

0007

Mov DS, AX

8ED8

DS = 119C

IP = 0007

DS = 11AE

IP = 0009

0009

Mov AX, 01F4

B8F401

AX = 11AE

IP = 0009

AX = 01F4

IP = 000C

000C

Mov CX, AX

8BC8

CX = 00B6

IP = 000C

CX = 01F4

IP = 000E

000E

Mov BL, 24

B324

BX = 0000

IP = 000E

BX = 0024

IP = 0010

0010

Mov BH, CE

B7CE

BX = 0024

IP = 0010

BX = CE24

IP = 0012

0012

Mov [0002], FFCE

C7060200CEFF

IP = 0012

DS:0002 = 00

DS:0003 = 00

IP = 0018

DS:0002 = CE

DS:0003 = FF

0018

Mov BX, 0006

BB0600

BX = CE24

IP = 0018

BX = 0006

IP = 001B

001B

Mov [0000], AX

A30000

IP = 001B

DS:0000 = 00

DS:0001 = 00

IP = 001E

DS:0000 = F4

DS:0001 = 01

001E

Mov AL, [BX]

8A07

AX = 01F4

IP = 001E

AX = 0115

IP = 0020

0020

Mov AL, [BX+03]

8A4703

AX = 0115

IP = 0020

AX = 0118

IP = 0023

0023

Mov CX, [BX+03]

8B4F03

CX = 01F4

IP = 0023

CX = 1C18

IP = 0026

0026

Mov DI, 0002

BF0200

DI = 0000

IP = 0026

DI = 0002

IP = 0029

0029

Mov AL, [DI+000E]

8A850E00

AX = 0118

IP = 0029

AX = 01D8

IP = 002D

002D

Mov CX, [DI+000E]

8B8D0E00

CX = 1C18

IP = 002D

CX = CED8

IP = 0031

0031

Mov BX, 0003

BB0300

BX = 0006

IP = 0031

BX = 0003

IP = 0034

0034

Mov AL, [BX+DI+0016]

8A811600

AX = 01D8

IP = 0034

AX = 0108

IP = 0038

0038

Mov CX, [BX+DI+0016]

8B891600

CX = CED8

IP = 0038

CX = FA08

IP = 003C

003C

Mov AX, 11AE

B8AE11

AX = 0108

IP = 003C

AX = 11AE

IP = 003F

003F

Mov ES, AX

8EC0

ES = 119C

IP = 003F

ES = 11AE

IP = 0041

0041

Mov AX, ES:[BX]

268B07

AX = 11AE

IP = 0041

AX = 00FF

IP = 0044

0044

Mov AX, 0000

B80000

AX = 00FF

IP = 0044

AX = 0000

IP = 0047

0047

Mov ES, AX

8EC0

ES = 11AE

IP = 0047

ES = 0000

IP = 0049

0049

Push DS

1E

SP = 0014

IP = 0049

Stack +0 0000

+2 119C

+4 0000

+6 0000

SP = 0012

IP = 004A

Stack +0 11AE

+2 0000

+4 119C

+6 0000

004A

Pop ES

07

SP = 0012

ES = 0000

IP = 004A

Stack +0 11AE

+2 0000

+4 119C

+6 0000

SP = 0014

ES = 11AE

IP = 004B

Stack +0 0000

+2 119C

+4 0000

+6 0000

004B

Mov CX, ES:[BX–01]

268B4FFF

CX = FA08

IP = 004B

CX = FFCE

IP = 004F

004F

Xchg AX, CX

91

AX = 0000

CX = FFCE

IP = 004F

AX = FFCE

CX = 0000

IP = 0050

0050

Mov DI, 0002

BF0200

IP = 0050

DI = 0002

IP = 0053

DI = 0002

0053

Mov ES:[BX+DI], AX

268901

IP = 0053

DS:0005 = 00

DS:0006 = 15

IP = 0056

DS:0005 = CE

DS:0006 = FF

0056

Mov BP, SP

8BEC

BP = 0000

IP = 0056

BP = 0014

IP = 0058

0058

Push [0000]

FF360000

SP = 0014

IP = 0058

Stack +0 0000

+2 119C

+4 0000

+6 0000

SP = 0012

IP = 005C

Stack +0 01F4

+2 0000

+4 119C

+6 0000

005C

Push [0002]

FF360200

SP = 0012

IP = 005C

Stack +0 01F4

+2 0000

+4 119C

+6 0000

SP = 0010

IP = 0060

Stack +0 FFCE

+2 01F4

+4 0000

+6 119C

0060

Mov BP, SP

8BEC

BP = 0014

IP = 0060

BP = 0010

IP = 0062

0062

Mov DX, [BP+02]

8B5602

DX = 0000

IP = 0062

DX = 01F4

IP = 0065

0065

Ret Far

CB

SP = 0010

CS = 11B1

IP = 0065

Stack +0 FFCE

+2 01F4

+4 0000

+6 119C

SP = 0014

CS = 01F4

IP = FFCE

Stack +0 0000

+2 119C

+4 0000

+6 0000

Вывод:

В ходе данной лабораторной работы мною были изучены режимы адресации основной памяти

Приложение А

Код программы lr2_comp.asm

; Учебная программа лабораторной работы №2 по дисциплине "Архитектура компьютера"

;

;

EOL EQU '$'

ind EQU 2

n1 EQU 500

n2 EQU -50

; Стек программы

AStack SEGMENT STACK

DW 12 DUP(?)

AStack ENDS

; Данные программы

DATA SEGMENT

; Директивы описания данных

mem1 DW 0

mem2 DW 0

mem3 DW 0

vec1 DB 1,2,3,4,8,7,6,5

vec2 DB -10,-20,10,20,-30,-40,30,40

matr DB 1,2,3,4,-4,-3,-2,-1,5,6,7,8,-8,-7,-6,-5

DATA ENDS

; Код программы

CODE SEGMENT

ASSUME CS:CODE, DS:DATA, SS:AStack

; Головная процедура

Main PROC FAR

push DS

sub AX,AX

push AX

mov AX,DATA

mov DS,AX

; ПРОВЕРКА РЕЖИМОВ АДРЕСАЦИИ НА УРОВНЕ СМЕЩЕНИЙ

; Регистровая адресация

mov ax,n1

mov cx,ax

mov bl,EOL

mov bh,n2

; Прямая адресация

mov mem2,n2

mov bx,OFFSET vec1

mov mem1,ax

; Косвенная адресация

mov al,[bx]

mov mem3,[bx]

; Базированная адресация

mov al,[bx]+3

mov cx,3[bx]

; Индексированная адресация

mov di,ind

mov al,vec2[di]

mov cx,vec2[di]

; Адресация с базированием и индексированием

mov bx,3

mov al,matr[bx][di]

mov cx,matr[bx][di]

mov ax,matr[bx*4][di]

; ПРОВЕРКА АДРЕСАЦИИ С УЧЕТОМ СЕГМЕНТОВ

; Переопределение сегмента

; ------ вариант 1

mov ax, SEG vec2

mov es, ax

mov ax, es:[bx]

mov ax, 0

; ------ вариант 2

mov es, ax

push ds

pop es

mov cx, es:[bx-1]

xchg cx,ax

; ------ вариант 3

mov di,ind

mov es:[bx+di],ax

; ------ вариант 4

mov bp,sp

mov ax,matr[bp+bx]

mov ax,matr[bp+di+si]

; Использование сегмента стека

push mem1

push mem2

mov bp,sp

mov dx,[bp]+2

ret

Main ENDP

CODE ENDS

END Main

Приложение Б

Листинг lr2.lst

1 ; Учебная программа лабораторной работ

ы №2 по дисциплине "Архитектура компьют

ера"

2 ;

3 ;

4 = 0024 EOL EQU '$'

5 = 0002 ind EQU 2

6 = 01F4 n1 EQU 500

7 =-0032 n2 EQU -50

8

9 ; Стек программы

10

11 0000 AStack SEGMENT STACK

12 0000 000C[ DW 12 DUP(?)

13 ????

14 ]

15

16 0018 AStack ENDS

17

18 ; Данные программы

19

20 0000 DATA SEGMENT

21

22 ; Директивы описания данных

23

24 0000 0000 mem1 DW 0

25 0002 0000 mem2 DW 0

26 0004 0000 mem3 DW 0

27 0006 08 07 06 05 01 02 vec1 DB 1,2,3,4,8,7,6,5

28 03 04

29 000E E2 D8 1E 28 F6 EC vec2 DB -10,-20,10,20,-30,-40,30,40 30 0A 14

31 0016 FF FE FD FC 08 07 matr DB 1,2,3,4,-4,-3,-2,-1,5,6,7,8,-8,-7,-6,-5

32 06 05 FB FA F9 F8

33 04 03 02 01

34

35 0026 DATA ENDS

36

37 ; Код программы

38

39 0000 CODE SEGMENT

40 ASSUME CS:CODE, DS:DATA, SS:A

Stack

41

42 ; Головная процедура

43 0000 Main PROC FAR

44 0000 1E push DS

45 0001 2B C0 sub AX,AX

46 0003 50 push AX

47 0004 B8 ---- R mov AX,DATA

48 0007 8E D8 mov DS,AX

49

Microsoft (R) Macro Assembler Version 5.10 10/5/18 08:35:03

Page 1-2

50 ; ПРОВЕРКА РЕЖИМОВ АДРЕСАЦИИ НА УРОВНЕ

СМЕЩЕНИЙ

51 ; Регистровая адресация

52 0009 B8 01F4 mov ax,n1

53 000C 8B C8 mov cx,ax

54 000E B3 24 mov bl,EOL

55 0010 B7 CE mov bh,n2

56 ; Прямая адресация

57 0012 C7 06 0002 R FFCE mov mem2,n2

58 0018 BB 0006 R mov bx,OFFSET vec1

59 001B A3 0000 R mov mem1,ax

60 ; Косвенная адресация

61 001E 8A 07 mov al,[bx]

62 mov mem3,[bx]

LR2_COMP.ASM(55): error A2052: Improper operand type

63 ; Базированная адресация

64 0020 8A 47 03 mov al,[bx]+3

65 0023 8B 4F 03 mov cx,3[bx]

66 ; Индексированная адресация

67 0026 BF 0002 mov di,ind

68 0029 8A 85 000E R mov al,vec2[di]

69 002D 8B 8D 000E R mov cx,vec2[di]

LR2_COMP.ASM(62): warning A4031: Operand types must match

70 ; Адресация с базированием и индексиро

ванием

71 0031 BB 0003 mov bx,3

72 0034 8A 81 0016 R mov al,matr[bx][di]

73 0038 8B 89 0016 R mov cx,matr[bx][di]

LR2_COMP.ASM(66): warning A4031: Operand types must match

74 003C 8B 85 0022 R mov ax,matr[bx*4][di]

LR2_COMP.ASM(67): error A2055: Illegal register value

75

76 ; ПРОВЕРКА АДРЕСАЦИИ С УЧЕТОМ СЕГМЕНТО

В

77 ; Переопределение сегмента

78 ; ------ вариант 1

79 0040 B8 ---- R mov ax, SEG vec2

80 0043 8E C0 mov es, ax

81 0045 26: 8B 07 mov ax, es:[bx]

82 0048 B8 0000 mov ax, 0

83 ; ------ вариант 2

84 004B 8E C0 mov es, ax

85 004D 1E push ds

86 004E 07 pop es

87 004F 26: 8B 4F FF mov cx, es:[bx-1]

88 0053 91 xchg cx,ax

89 ; ------ вариант 3

90 0054 BF 0002 mov di,ind

91 0057 26: 89 01 mov es:[bx+di],ax

92 ; ------ вариант 4

93 005A 8B EC mov bp,sp

94 005C 3E: 8B 86 0016 R mov ax,matr[bp+bx]

LR2_COMP.ASM(87): error A2046: Multiple base registers

95 0061 3E: 8B 83 0016 R mov ax,matr[bp+di+si]

LR2_COMP.ASM(88): error A2047: Multiple index registers

96 ; Использование сегмента стека

97 0066 FF 36 0000 R push mem1

98 006A FF 36 0002 R push mem2

99 006E 8B EC mov bp,sp

100 0070 8B 56 02 mov dx,[bp]+2

Microsoft (R) Macro Assembler Version 5.10 10/5/18 08:35:03

Page 1-3

101 0073 CB ret

102 0074 Main ENDP

LR2_COMP.ASM(95): error A2006: Phase error between passes

103 0074 CODE ENDS

104 END Main

Microsoft (R) Macro Assembler Version 5.10 10/5/18 08:35:03

Symbols-1

Segments and Groups:

N a m e Length Align Combine Class

ASTACK . . . . . . . . . . . . . 0018 PARA STACK

CODE . . . . . . . . . . . . . . 0074 PARA NONE

DATA . . . . . . . . . . . . . . 0026 PARA NONE

Symbols:

N a m e Type Value Attr

EOL . . . . . . . . . . . . . . NUMBER 0024

IND . . . . . . . . . . . . . . NUMBER 0002

MAIN . . . . . . . . . . . . . . F PROC 0000 CODE Length = 0074

MATR . . . . . . . . . . . . . . L BYTE 0016 DATA

MEM1 . . . . . . . . . . . . . . L WORD 0000 DATA

MEM2 . . . . . . . . . . . . . . L WORD 0002 DATA

MEM3 . . . . . . . . . . . . . . L WORD 0004 DATA

N1 . . . . . . . . . . . . . . . NUMBER 01F4

N2 . . . . . . . . . . . . . . . NUMBER -0032

VEC1 . . . . . . . . . . . . . . L BYTE 0006 DATA

VEC2 . . . . . . . . . . . . . . L BYTE 000E DATA

@CPU . . . . . . . . . . . . . . TEXT 0101h

@FILENAME . . . . . . . . . . . TEXT LR2_COMP

@VERSION . . . . . . . . . . . . TEXT 510

97 Source Lines

97 Total Lines

19 Symbols

47296 + 459964 Bytes symbol space free

2 Warning Errors

5 Severe Errors

14

Соседние файлы в папке lab2