Скачиваний:
73
Добавлен:
11.02.2014
Размер:
33.79 Кб
Скачать

Цель работы: изучение операций сложения, вычитания, умножения и деления двоичных чисел на языке Ассемблер.

ЗАДАНИЕ ДЛЯ ЛАБОРАТОРНОЙ РАБОТЫ

1) Написать программу на языке Ассемблер, реализующей заданное выражение из таблицы. Номер варианта соответствует номеру по списку.

2) Проассамблировать программу.

  1. Отладить и проследить пошаговое выполнение программы с помощью отладчика 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

Вывод: мы изучили операции сложения, вычитания, умножения и деления двоичных чисел на языке Ассемблер.

Результат, полученный вычислениями на языке Ассемблера, совпадает с результатами, выполненными вручную.