- •Дагестанкий государтвенный технический университет
- •Махачкала 1997 г.
- •Лабораторная работа №1
- •1.1.Создание выполнимого файла, работа в отладчике, изучение оператора пересылки mov.
- •1.2. Оператор mov.
- •1.3. Основные команды отладчика afd.
- •1.4. Индивидуальные задания.
- •2.1. Сегментация памяти, директивы ассемблера
- •2.3. Косвенная адресация
- •2.4. Директива assume
- •2.5. Индивидуальные задания
- •2.2. Прямая адресация
- •Лабораторная работа №3
- •3.1. Директивы equ, label, команды сложения и вычитания
- •3.1.1. Директивы equ
- •3.1.2. Директива label
- •3.2. Команды сложения и вычитания
- •3.3. Индивидуальные задания Вариант 1.
- •Вариант 2.
- •Вариант 3.
- •Вариант 4.
- •Вариант 5.
- •Вариант 6.
- •Вариант 7.
- •Вариант 8.
- •Вариант 9.
- •Вариант 10.
- •Вариант 11.
- •Вариант 12.
- •3.4. Примечание
- •Лабораторная работа №4
- •4.1. Изучение операторов обмена xchg и xlat
- •. Индивидуальные задания Вариант 1.
- •Вариант 2.
- •Вариант 3.
- •Вариант 4.
- •Вариант 5.
- •Вариант 6.
- •Вариант 7.
- •Вариант 8.
- •Вариант 9.
- •Вариант 10.
- •Вариант 11.
- •Вариант 12.
- •4.3. Приложение
- •Литература
- •Оглавление
- •Хачумов Вячbслав Михайлович Исмаилов Шейх-Магомед Абдулаевич Лагиева Марият Тагировна
2.2. Прямая адресация
Наиболее естественный способ адресации данных – это прямая адресация, когда адрес нужной ячейки памяти является частью команды, например: MOV АL, А
Здесь содержимое ячейки с адресом А помещается в регистр АL. Аналогичным способом можно произвести и обратное действие: MOV А, АL содержимое регистра АL пересылается в ячейку памяти, адрес которой определяется в результате трансляции ассемблером символического имени А.
2.3. Косвенная адресация
Существует способ адресации памяти, при котором исполнительный адрес выбирается из некоторого регистра, а не из самой команды.
Например, в команде MOV АL, [DI] исполнительный адрес содержится в регистре DI; квадратные скобки указывают на то, что содержимое регистра DI является адресом некоторой ячейки памяти. Описанным способом можно использовать любой четырех регистров SI,DI,BX,BP.
Чтобы занести адрес в один из указанных регистров можно использовать конструкцию offset:
mov BX, offset AB
Благодаря присутствию здесь оператора offset в регистр BX загрузится адрес области памяти с именем АВ. Команда mov АX, [ВХ] занесет в регистр АХ (аккумулятор)значение 3145Н. Если дважды инкрементировать (т.е. увеличить на единицу) содержимое регистра ВХ и снова выполнить эту же команду в регистре АХ окажется значение 4456Н:
INC BX
INC BX
MOV AX, [BX]; в регистре АХ значение 4456Н.
Напишем простую программу, выполнение которой будем наблюдать в отладчике. Пусть в сегменте данных резервируется два слова. Запишем в первое слово значение 27FC, во второе 573А.
dat SEGMENT; начало сегмента данных
A DW 2 dup(?)
dat ENDS; конец сегмента данных
ASSUME CS: cod, DS: dat
cod SEGMENT; начало кодового сегмента
START: mov AX, dat; инициализация
mov DS,AX; сегментного регистра
mov A, 27FCH;запись числа в первое зарезервированное слово
mov A+2, 573AH; запись числа во второе зарезервированное слово
RET
cod ENDS; конец кодового сегмента
END START
2.4. Директива assume
Директива ASSUME сообщает Ассемблеру назначение каждого сегмента. Так в директиве ASSUME приведенной программы показывается, что сегмент с именем cod является кодовым сегментом (в нем содержится программа), а сегмент с именем dat является сегментом данных и он соотносится с регистром DS.
2.5. Индивидуальные задания
Написать программу, в которой в сегменте данных резервируется память под следующие данные:
Имя |
Вариант 1 |
Вариант 2 |
Вариант 3 |
Вариант 4 |
Вариант 5 |
Т1 |
5 слов без инициал-и (исп. dup) |
строка симво-лов «веселый день» |
1 дв.слово без инициал-и |
1 байт без инициал-и |
2 слова без инициал-и (исп. dup) |
Т2 |
строка сим-в «кислые щи» |
6 слова без инициал-и (исп. dup) |
послед. 4 байт: 82Н,137,А5Н, 1100111В |
4 слова со знач.Е48АН (исп. dup) |
послед. 4 слов: А83Н,F47H, 892,101110111B |
Т3 |
3 слова со знач.А584АН (исп. dup) |
послед. 6 байт: 89Н,10010010В, 254,ААН, -112, 7FH |
5 слова со знач. ЕF3AH (исп. dup) |
строка сим-в «промозглая сырость» |
строка сим-в «острова в океане» |
Т4 |
послед. 4 байт:4АН,F7H, -54,111101В |
послед. 2 слов: 7777Н,8888Н |
строка сим-в «Кошкин дом» |
послед. 3 байт: 84Н, -111,СЕН |
4 байт со знач. 55Н (исп. dup) |
Имя |
Вариант 6 |
Вариант 7 |
Вариант 8 |
Вариант 9 |
Вариант 10 |
Т5 |
6 слов без инициал-и (исп. dup) |
строка сим-в «бедная овечка» |
1 дв.слово без инициал-и |
1 байт без инициал-и |
2 слова без инициал-и (исп. dup) |
Т6 |
строка сим-в «литературный вечер» |
3 слова без инициал-и (исп. dup) |
послед. 4 байт: 82Н,137,А5Н, 1100111В |
4 слова со знач.Е48АН (исп. dup) |
послед. 4 слов: А83Н,F47H, 892,101110111B |
Т7 |
2 слова со знач.А584АН (исп. dup) |
послед. 5 байт: АЕН,1011011В, 135, F4H,-96 |
4 слова со знач. Е73AH (исп. dup) |
строка сим-в «паук каракурт» |
строка сим-в «муха цокотуха» |
Т8 |
послед. 5 байт: 7ЕН,В5Н, -103, 1110100В,250 |
послед. 3 слов: ЕЕF7Н,12А8Н, СА34Н |
строка сим-в «ночь в опере» |
послед. 3 байт: -35Н, -1107, FАН |
6 байт со знач. F4H (исп.dup) |
При выполнении последующих пунктов задания использовать оператор MOV.
Инициализировать сегментные регистры DS,ES
Записать по адресу
-
Вариант 1
Вариант 2
Вариант 3
Вариант 4
Вариант 5
Т3+2
слово 3333Н
Т2+2
слово 4444Н
Т3+4
слово 7777Н
Т1
байт FАH
Т4+1
байт FАH
Вариант 6
Вариант 7
Вариант 8
Вариант 9
Вариант 10
Т5+4
слово ВССВН
Т6+4
слово FАFАH
Т7+6
слово АА56Н
Т5
байт 7АН
Т8+3
байт FАH
Занести в указанный регистр адрес ячейки, используя синтаксическую конструкцию с “OFFSET”:
-
Вариант 1
Вариант 2
Вариант 3
Вариант 4
Вариант 5
BX, T1+4
SI, T2
DI, T1+2
BX, T2+6
SI, T3+1
Вариант 6
Вариант 7
Вариант 8
Вариант 9
Вариант 10
BX, T7+2
SI, T6
DI, T7+4
BX, T8+2
SI, T5+3
Занести в регистр АХ содержимое указанного сегментного регистра
-
Вариант 1
Вариант 2
Вариант 3
Вариант 4
Вариант 5
DS
SS
ES
CS
DS
Вариант 6
Вариант 7
Вариант 8
Вариант 9
Вариант 10
ES
CS
DS
SS
ES
Записать в память значение аккумулятора (слово), адресуемое указанным регистром
-
Вариант 1
Вариант 2
Вариант 3
Вариант 4
Вариант 5
BX
SI
DI
BX
SI
Вариант 6
Вариант 7
Вариант 8
Вариант 9
Вариант 10
BX
SI
DI
BX
SI
Инкрементировать дважды значение адреса в регистре, указанном в предыдущем пункте. Инкрементировать значение аккумулятора. Использовать оператор INC reg.
Повторить пункт 5.
Используя, оператор MOV изменить 6-ю букву в строке символов на букву “W”.
Пример оформления программы приведен ниже.
assume cs: code, ds: dat
dat segment
t1 bd ’тучи над городом’
t2 dw 7 dup(?)
t3 dw 1f47h,1222h,10011011b,1345h,6789
t4 dw ?
t5 dw 0a45h
dat ends
code segment
start:
mov ax, dat
mov ds, ax
mov t4, 2222h
mov ax, ds
mov cx, ofsset t3
MOV bx, cx
mov dx, [bx]
mov t3+6,1111; в память по адресу Т3+6 (т.е.30)
;заносится значение 1111.
mov si, offset t2; в регистр заносится адрес Т2,
;который равен 16
mov ax, 1112h
mov [si], ax; в память по адресу, хранящемуся в SI
;заносится знач. аккум.
inc si; инкрементирование содержимого регистра SI
; (содержимое SI увелич. на 1)
inc si
inc ax
MOV ax, cx
mov [si]
ret
code ends
end start
