Препод Мукасеева В. Н. 3-й семестр / Lab 2 / Лаба№2
.docМинистерство образования Российской Федерации
УФИМСКИЙ ГОСУДАРСТВЕННЫЙ АВИАЦИОННЫЙ ТЕХНИЧЕСКИЙ УНИВЕРСИТЕТ
Кафедра технической кибернетики
Лабораторная работа № 2
Режимы адресации
Выполнили:
студенты гр.
.
Проверил преподаватель:
Мукасеева В. Н.
Уфа 2005
Лабораторная работа № 2
Режимы адресации
1. ЦЕЛЬ РАБОТЫ
Целью работы является разработка простой программы преобразования данных для приобретения практических навыков программирования на языке ассемблера и закрепления знаний по режимам адресации.
2. ХОД РАБОТЫ
Задание:
Создать вектор из десяти 2-х байтовых элементов. Заполнить положительными, отрицательными и нулевыми значениями. Заменить нулевые значения вектора средним арифметическим значением его соседей. Среднее получать сдвигом вправо на один байт.
Решение:
1. Блок схема программы
2. Код программы
TITLE EX_PROG
PAGE ,132
STACKSEG SEGMENT PARA PUBLIC ‘STACK’
DW 64 DUP(0)
STACKSEG ENDS
DSEG SEGMENT PARA PUBLIC 'DATA'
SOURCE DW 0, 20, 0,30, 0, 40, -50, 0,10,0
DSEG ENDS
SUBTTL ОСНОВНАЯ ПРОГРАММА
PAGE
CSEG SEGMENT PARA PUBLIC 'CODE'
ASSUME CS:CSEG, DS:DSEG, SS:STACKSEG
OUR_PROG PROC FAR
PUSH DS
SUB AX,AX
PUSH AX
MOV AX,DSEG
MOV DS,AX
MOV SI,0
MOV CX,10
CYCLE:
CMP SOURCE[SI],0
JNE L1
CMP SI,0
JNE L3
MOV AX,SOURCE[SI+2]
SAR AX,1
MOV SOURCE[SI],AX
JMP L1
L3: CMP SI,9
JNE L2
MOV AX,SOURCE[SI-2]
SAR AX,1
MOV SOURCE[SI],AX
JMP L1
L2: MOV AX,SOURCE[SI-2]
ADD AX,SOURCE[SI+2]
SAR AX,1
MOV SOURCE[SI],AX
L1:ADD SI,2
LOOP CYCLE
RET
OUR_PROG ENDP
CSEG ENDS
END OUR_PROG1.
3. Листинг трансляции:
IBM Macro Assembler/2 Version 1.00 11/9/5EX_PROG Page 1-1
TITLE EX_PROG
PAGE ,132
0000 STACKSEG SEGMENT PARA PUBLIC 'STACK'
0000 0040[ DW 64 DUP(0) ; Область стека
0000
]
0080 STACKSEG ENDS
0000 DSEG SEGMENT PARA PUBLIC 'DATA'
0000 0000 0014 0000 FFE2 SOURCE DW 0,20,0,30, 0, 40, -50, 0,10,0
0000 0028 FFCE 003C
000A 0000
0014 DSEG ENDS
SUBTTL ОСНОВНАЯ ПРОГРАММА
IBM Macro Assembler/2 Version 1.00 11/9/5EX_PROG Page 1-2
ОСНОВНАЯ ПРОГРАММА
PAGE
0000 CSEG SEGMENT PARA PUBLIC 'CODE'
ASSUME CS:CSEG, DS:DSEG, SS:STACKSEG
0000 OUR_PROG PROC FAR
0000 1E PUSH DS
0001 2B C0 SUB AX,AX
0003 50 PUSH AX
0004 B8 ---- R MOV AX,DSEG
0007 8E D8 MOV DS,AX
0009 BE 0000 MOV SI,0
000C B9 000A MOV CX,10
000F CYCLE:
000F 83 BC 0000 R 00 CMP SOURCE[SI],0
0014 75 32 JNE L1
0016 83 FE 00 CMP SI,0
0019 75 0D JNE L3
001B 8B 84 0002 R MOV AX,SOURCE[SI+2]
001F D1 F8 SAR AX,1
0021 89 84 0000 R MOV SOURCE[SI],AX
0025 EB 21 90 JMP L1
0028 83 FE 09 L3: CMP SI,9
002B 75 0D JNE L2
002D 8B 84 FFFE R MOV AX,SOURCE[SI-2]
0031 D1 F8 SAR AX,1
0033 89 84 0000 R MOV SOURCE[SI],AX
0037 EB 0F 90 JMP L1
003A 8B 84 FFFE R L2: MOV AX,SOURCE[SI-2]
003E 03 84 0002 R ADD AX,SOURCE[SI+2]
0042 D1 F8 SAR AX,1
0044 89 84 0000 R MOV SOURCE[SI],AX
0048 83 C6 02 L1:ADD SI,2
004B E2 C2 LOOP CYCLE
004D CB RET
OUR_PROG ENDP
004E CSEG ENDS
END OUR_PROG
IBM Macro Assembler/2 Version 1.00 11/9/5EX_PROG Symbols-1
Segments and Groups:
N a m e Size Align Combine Class
CSEG . . . . . . . . . . . . . . 004E PARA PUBLIC 'CODE'
DSEG . . . . . . . . . . . . . . 0014 PARA PUBLIC 'DATA'
STACKSEG . . . . . . . . . . . . 0080 PARA PUBLIC 'STACK'
Symbols:
N a m e Type Value Attr
CYCLE . . . . . . . . . . . . . L NEAR 000F CSEG
L1 . . . . . . . . . . . . . . . L NEAR 0048 CSEG
L2 . . . . . . . . . . . . . . . L NEAR 003A CSEG
L3 . . . . . . . . . . . . . . . L NEAR 0028 CSEG
OUR_PROG . . . . . . . . . . . . F PROC 0000 CSEG Length = 004E
SOURCE . . . . . . . . . . . . . L WORD 0000 DSEG
55 Source Lines
55 Total Lines
12 Symbols
46772 Bytes symbol space free
0 Warning Errors
0 Severe Errors
4. Дамп памяти
Даны числа: 0, 20, 0, 30,
0, 40, -50, 0, 10, 0
После замены элементов в соответствии с условиями задачи:
Вывод: В ходе лабораторной работы овладели базовыми приемами программирования на языке Ассемблер с использованием условной адресации.