- •Лабораторная работа №1 Начало работы на языке ассемблера
- •Просмотр работы программы в Турбоотладчике (Td.Exe);
- •Задания
- •Int 21h
- •Int 21h
- •7. Напишите в отчете основные отличия в создании
- •Команды пересылки данных. Стек.
- •Задание
- •Арифметические операции. Битовые команды.
- •Задание
- •X dw ?
- •Int 21h
- •4. Наберите приведенную программу 2, запишите исходный файл с расширением *.Asm, получите файл с расширением *.Exe.
- •Int 21h
Арифметические операции. Битовые команды.
Цель работы:
изучить арифметические операции языка ассемблера;
научить их использование при составлении программ;
дать понятие о битовых командах и их применение;
Задание
Задача заключается в вычислении результата выполнения арифметического выражения, в котором некоторые числа постоянны, а другие переменные.
Формула вычислений: 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