Материал: Larin_Anton_OEVM_21_2_

Внимание! Если размещение файла нарушает Ваши авторские права, то обязательно сообщите нам

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]; невозможно п

еремещать значения из памяти в память

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 ;mov cx,vec2[di]; несоответс

твие типов. попытка поместить байт в сл

ово

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

ванием

71 002D BB 0003 mov bx,3

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

73 ;mov cx,matr[bx][di]; несоот

ветствие типов. попытка поместить байт

в слово

74 ;mov ax,matr[bx*4][di]; реги

стр dx нельзя умножать

75

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

В

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

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

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

80 0037 8E C0 mov es, ax

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

82 003C B8 0000 mov ax, 0

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

84 003F 8E C0 mov es, ax

85 0041 1E push ds

86 0042 07 pop es

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

88 0047 91 xchg cx,ax

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

90 0048 BF 0002 mov di,ind

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

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

93 004E 8B EC mov bp,sp

94 ;mov ax,matr[bp+bx]; в опера

#Microsoft (R) Macro Assembler Version 5.10 9/19/19 03:20:28

Page 1-3

нде нельзя использовать более одного ба

зового регистра

95 ;mov ax,matr[bp+di+si]; в оп

еранде нельзя использовать более одного

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

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

97 0050 FF 36 0000 R push mem1

98 0054 FF 36 0002 R push mem2

99 0058 8B EC mov bp,sp

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

101 005D CB ret

102 005E Main ENDP

103 005E CODE ENDS

104 END Main

#Microsoft (R) Macro Assembler Version 5.10 9/19/19 03:20:28

Symbols-1

Segments and Groups:

N a m e Length Align Combine Class

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

CODE . . . . . . . . . . . . . . 005E 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 = 005E

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_INIT

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

97 Source Lines

97 Total Lines

19 Symbols

47272 + 457941 Bytes symbol space free

0 Warning Errors

0 Severe Errors

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 38,37,36,35,31,32,33,34

vec2 DB 70,80,-70,-80,50,60,-50,-60

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

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]; регистр dx нельзя умножать

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

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

; ------ вариант 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

30