lab3 / report_lr3
.doc
МИНОБРНАУКИ РОССИИ
Санкт-Петербургский государственный
электротехнический университет
«ЛЭТИ» им. В.И. Ульянова (Ленина)
Кафедра МОЭВМ
отчет
по лабораторной работе №3
по дисциплине «Организация ЭВМ и систем»
Тема: Изучение организации ветвлений в программах на языке Ассемблера
Студент гр. 3303 |
|
|
Преподаватель |
|
|
Санкт-Петербург
2018
Цель работы.
Ознакомиться с организации ветвлений в программах на языке Ассемблер.
Постановка задачи.
Разработать на языке Ассемблер программу, которая по заданным целым значениям a,b,i,k, размером 1 слово, вычисляет:
-
значение i1 = f1(a,b,i)
-
значение i2 = f2(a,b,i)
-
значение res = f3(i1,i2,k)
где функции из варианта 12 имеют вид:
Значения a,b,i,k являются исходными данными, которые должны выбираться студентом самостоятельно и задаваться в процессе исполнения программы в режиме отладки. При этом следует рассмотреть все возможные комбинации параметров a, b и k, позволяющие проверить различные маршруты выполнения программы.
Требования к программе:
-
при разработке программы не использовать фрагменты, представленные на ЯВУ, в частности, для ввода-вывода данных. Исходные данные должны вводится, а результаты контролироваться в режиме отладки;
-
при вычислении функций f1 и f2 вместо операции умножения следует использовать арифметический сдвиг и, возможно, сложение;
при вычислении функций f1 и f2 не использовать процедуры;
-
при разработке программы следует минимизировать длину кода.
Ход работы.
-
Была написан программа lab3.asm. Программа протранслированна с созданием файла листинга l3.lst и объектного файла l3.obj. Код программы и файл листинга приведены в приложении А и Б.
-
Программа была слинкована и был получен загрузочный модуль l3.exe.
-
Программа l3.exe выполнена в пошаговом режиме под управлением отладчика afd.
Результат тестирования программы представлен в табл.1
Таблица 1 – тестирование программы на различные исходные данный
Исходные данные |
Результат |
Ожидаемый результат |
|||
a |
b |
i |
k |
res |
|
2 |
1 |
1 |
1 |
-1 |
-1 |
2 |
1 |
1 |
-1 |
2 |
2 |
1 |
2 |
1 |
1 |
-6 |
-6 |
1 |
2 |
1 |
-1 |
-1 |
2 |
Рисунок 1 – пример работы программы
На рисунке 1 программа отработала с исходными данными a = 2; b =1; i=1; k =1 и получила корректный ответ.
Вывод:
В ходе данной лабораторной работы я ознакомился с организацией ветвлений в программах на языке Ассемблера.
Приложение А
Код программы lab3.asm
AStack SEGMENT STACK
DW 12 DUP(?)
AStack ENDS
DATA SEGMENT
a DW 2
b DW 1
i DW -1
k DW 1
i1 DW ?
i2 DW ?
res DW ?
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
; f1 and f2 a>b
mov AX,a
cmp AX,b
jle f12
mov AX,i
shl AX,1
shl AX,1
neg AX
sub AX,3
mov i1,AX
add AX,8
mov i2,AX
jmp f1end
f12:
mov AX,i
add AX,i
add AX,i
sub AX,10
neg AX
mov i2,AX
neg AX
shl AX,1
add AX,10
mov i1,AX
f1end:
; f3
cmp k,0000h
jl f3
mov AX,i2
neg AX
cmp AX,-6h
jge f3end
mov AX,-6h
jmp f3end
f3:
mov AX,i1
sub AX,i2
cmp AX,0000h
jg f31
neg AX
f31:
cmp AX,2h
jle f3end
mov AX,2h
f3end:
mov res,AX
ret
Main ENDP
CODE ENDS
END Main
Приложение Б
Листинг lr3.lst
0000 AStack SEGMENT STACK
0000 000C[ DW 12 DUP(?)
????
]
0018 AStack ENDS
0000 DATA SEGMENT
0000 0002 a DW 2
0002 0001 b DW 1
0004 FFFF i DW -1
0006 0001 k DW 1
0008 0000 i1 DW ?
000A 0000 i2 DW ?
000C 0000 res DW ?
000E DATA ENDS
0000 CODE SEGMENT
ASSUME CS:CODE, DS:DATA ,SS:AStack
0000 Main PROC FAR
0000 1E push DS
0001 2B C0 sub AX,AX
0003 50 push AX
0004 B8 ---- R mov AX,DATA
0007 8E D8 mov DS,AX
; f1 and f2 a>b
0009 A1 0000 R mov AX,a
000C 3B 06 0002 R cmp AX,b
0010 7E 18 jle f12
0012 A1 0004 R mov AX,i
0015 D1 E0 shl AX,1
0017 D1 E0 shl AX,1
0019 F7 D8 neg AX
001B 2D 0003 sub AX,3
001E A3 0008 R mov i1,AX
0021 05 0008 add AX,8
0024 A3 000A R mov i2,AX
0027 EB 1E 90 jmp f1end
002A f12:
002A A1 0004 R mov AX,i
002D 03 06 0004 R add AX,i
0031 03 06 0004 R add AX,i
0035 2D 000A sub AX,10
0038 F7 D8 neg AX
003A A3 000A R mov i2,AX
003D F7 D8 neg AX
003F D1 E0 shl AX,1
0041 05 000A add AX,10
0044 A3 0008 R mov i1,AX
0047 f1end:
; f3
0047 83 3E 0006 R 00 cmp k,0000h
004C 7C 10 jl f3
004E A1 000A R mov AX,i2
0051 F7 D8 neg AX
0053 3D FFFA cmp AX,-6h
0056 7D 1C jge f3end
0058 B8 FFFA mov AX,-6h
005B EB 17 90 jmp f3end
005E f3:
005E A1 0008 R mov AX,i1
0061 2B 06 000A R sub AX,i2
0065 3D 0000 cmp AX,0000h
0068 7F 02 jg f31
006A F7 D8 neg AX
006C f31:
006C 3D 0002 cmp AX,2h
006F 7E 03 jle f3end
0071 B8 0002 mov AX,2h
0074 f3end:
0074 A3 000C R mov res,AX
0077 CB ret
0078 Main ENDP
0078 CODE ENDS
END Main
Segments and Groups:
N a m e Length Align Combine Class
ASTACK . . . . . . . . . . . . . 0018 PARA STACK
CODE . . . . . . . . . . . . . . 0078 PARA NONE
DATA . . . . . . . . . . . . . . 000E PARA NONE
Symbols:
N a m e Type Value Attr
A . . . . . . . . . . . . . . . L WORD 0000 DATA
B . . . . . . . . . . . . . . . L WORD 0002 DATA
F12 . . . . . . . . . . . . . . L NEAR 002A CODE
F1END . . . . . . . . . . . . . L NEAR 0047 CODE
F3 . . . . . . . . . . . . . . . L NEAR 005E CODE
F31 . . . . . . . . . . . . . . L NEAR 006C CODE
F3END . . . . . . . . . . . . . L NEAR 0074 CODE
I . . . . . . . . . . . . . . . L WORD 0004 DATA
I1 . . . . . . . . . . . . . . . L WORD 0008 DATA
I2 . . . . . . . . . . . . . . . L WORD 000A DATA
K . . . . . . . . . . . . . . . L WORD 0006 DATA
MAIN . . . . . . . . . . . . . . F PROC 0000 CODE Length = 0078
RES . . . . . . . . . . . . . . L WORD 000C DATA
@CPU . . . . . . . . . . . . . . TEXT 0101h
@FILENAME . . . . . . . . . . . TEXT LAB3
@VERSION . . . . . . . . . . . . TEXT 510
81 Source Lines
81 Total Lines
21 Symbols
47982 + 461325 Bytes symbol space free
0 Warning Errors
0 Severe Errors