Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
td-asm-19-fev-2014.doc
Скачиваний:
28
Добавлен:
10.05.2015
Размер:
225.28 Кб
Скачать

Арифметические операции. Битовые команды.

Цель работы:

  • изучить арифметические операции языка ассемблера;

  • научить их использование при составлении программ;

  • дать понятие о битовых командах и их применение;

Задание

Задача заключается в вычислении результата выполнения арифметического выражения, в котором некоторые числа постоянны, а другие переменные.

Формула вычислений: X = (A * 2 + B * C ) / (D - 3)

Приведенная Программа сначала резервирует ячейки памяти под переменные, затем выполняет умножение однобайтовых чисел (A * 2), результат умножения - двухбайтовое число в регистре AX, сохраняется в регистре СХ, далее выполняется умножение однобайтовых чисел (В * С), результат - двухбайтовое число хранится в аккумуляторе AX. После сложения двух сомножителей и вычисления знаменателя (D-3) выполняется деление. Результат присваивается переменной Х.

1. Наберите приведенную программу 1, запишите исходный файл с расширением *.ASM, получите файл с расширением *.EXE.

2. Загрузите программу в отладчик TURBODEBUG (команда TURBODEBUG *.exe). Выполните программу по шагам, команда F7(F8), посмотрите, как она работает, получите результат.

3. Выполните программу с 5 вариантами различных начальных значений переменных A,B,C,D по шагам (см. таблицу 1) и запишите результат выполнения в таблицу 2 (в регистре AL - частное, AH - остаток). Переведите результат в десятичную систему.

Таблица 1

Вариант

1

2

3

4

5

Значения

A

3

0AH

20

60

20H

B

4

5H

4

16

9H

C

2

8H

15

5

4H

D

5

9H

6

18

1CH

Частное AL

7

7

Ah

10

21h

33

0Dh

13

4

4

Остаток AH

0

0

0

0

1

1

5

5

0

0

;программа 1

;x =(a*2+b*c)/(d-3)

.model small

.stack 100h

.data

a db ?

b db ?

c db ? ;Резервируем память для переменных

d db ? ; A,B,C,D,X

X dw ?

.code

start:

mov ax,@data

mov ds,ax

mov a,3

mov b,4

mov c,2

mov d,5

mov al,2

mul a

mov cx,ax

mov al,b

mul c

add ax,cx

mov cl,d

sub cl,3

div cl

mov x,ax

mov ah,4ch

Int 21h

end start

Файл ассемблерной программы имеет имя Lab31.asm, исполняемый файл имеет имя Lab31.exe.

По полученному файлу Lab31.lst определяем смещения адресов переменных в сегменте DS: a=0Ah,b=0Bh,c=0Ch,d=0Dh,x=0Eh.

Прогоняем файл Lab31.exe в отладчике td.exe и заполняем Таблицу 1, изменяя значения переменных прямо в памяти в сегменте DS и возвращаясь каждый раз на IP=19h (начало вычислений по заданной формуле).

4. Наберите приведенную программу 2, запишите исходный файл с расширением *.Asm, получите файл с расширением *.Exe.

5. Загрузите программу в отладчик TURBODEBUG (команда TURBODEBUG *.exe). Выполните программу по шагам, команда F7(F8), посмотрите, как она работает, получите результат. Обратите внимание на флаг CF.

6. Выполните программу с 5 вариантами различных начальных значений регистра al. Переведите результат запишите в таблицу 2 в двоичной и десятичной системе.

;программа 2

.model tiny

.stack 100h

.code

start:

mov ah, 01001101b

shr ah,1

mov ah, 01001101b

shl ah,1

mov ah, 01001101b

sar ah,1

mov ah, 01001101b

ror ah,1

mov ah, 01001101b

rol ah,1

mov ax,4c00h

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]