
лабораторная работа / лабораторные работы по ASSAMBLER / лаб№1 вар13
.doc
Цель работы: изучение операций сложения, вычитания, умножения и деления двоичных чисел на языке Ассемблер.
ЗАДАНИЕ ДЛЯ ЛАБОРАТОРНОЙ РАБОТЫ
1) Написать программу на языке Ассемблер, реализующей заданное выражение из таблицы. Номер варианта соответствует номеру по списку.
2) Проассамблировать программу.
-
Отладить и проследить пошаговое выполнение программы с помощью отладчика DEBUG либо TURBO DEBUGER. Результат представить в виде таблицы:
Выполняемая команда |
Значения регистров |
Значения флагов |
|
|
|
Задание:
№ варианта |
Выражение |
13 |
Y = ((a - b)*4 - d) / c |
В таблице : A - № по списку + дата рождения (0-31)
B - № по списку – месяц рождения (0-12)
C - № по списку * год рождения (00-99)
D - № по списку * 2
А=12+27=39
В=12-6=6
С=12*84=1008=10
D=12*2=24
Программа, написанная на языке Ассемблер:
lab segment
assume cs:lab,ds:lab
org 100h
beg:
wert1 db 3
wert2 db 4
mov ax,39
add ax,24
mul wert1
mov bx,24
sub bx,6
mov dx,ax
mul wert2
mov bx,ax
div bx
ret
lab ends
end beg
Проассемблированная программа:
Turbo
Assembler Version 3.1 13/03/04 10:07:29 Page 1
23.asm
1 0000 lab segment
2 assume cs:lab,ds:lab
3 org 100h
4 0100 beg:
5 0100 03 wert1 db 3
6 0101 04 wert2 db 4
7 0102 B8 0027 mov ax,39
8 0105 05 0018 add ax,24
9 0108 F6 26 0100r mul wert1
10 010C BB 0018 mov bx,24
11 010F 83 EB 06 sub bx,6
12 0112 8B D0 mov dx,ax
13 0114 F6 26 0101r mul wert2
14 0118 8B D8 mov bx,ax
15 011A F7 F3 div bx
16 011C C3 ret
17 011D lab ends
Turbo Assembler Version 3.1 13/03/04 10:07:29 Page 2
Symbol Table
Symbol Name Type Value
??DATE Text "13/03/04"
??FILENAME Text "23 "
??TIME Text "10:07:29"
??VERSION Number 030A
@CPU Text 0101H
@CURSEG Text LAB
@FILENAME Text 23
@WORDSIZE Text 2
BEG Near LAB:0100
WERT1 Byte LAB:0100
WERT2 Byte LAB:0101
Groups & Segments Bit Size Align Combine Class
LAB 16 011D Para none
Отлаженная программа:
Выполняемая команда |
Значения регистров |
Значения флагов |
add ax,[si] |
|
|
mov ax,0027 |
ax 60CE ip=0102 |
с=0 z=0 s=0 p=0 d=1 |
add ax,0018 |
ax 0027 ip 0106 |
|
mul byte ptr[0100] |
ax 003F ip 0108 |
p=1 |
mov bx,0018 |
ax 00BD ip 010C |
|
sub bx,0006 |
bx 0018 ip 010F |
|
mov dx,ax |
bx 0012 ip 0112 |
|
mul byte ptr[0100] |
dx 00BD ip 0114 |
|
mov bx,ax |
ax 02F4 ip0118 |
с=1 d=1 |
div bx |
bx 02F4 ip 011A |
|
ret |
ax 4001 dx 0000 ip 011C |
|
Вывод: мы изучили операции сложения, вычитания, умножения и деления двоичных чисел на языке Ассемблер.
Результат, полученный вычислениями на языке Ассемблера, совпадает с результатами, выполненными вручную.