По команде сложения второй операнд прибавляется к первому, и результат помещается в первый операнд. Например:
ADD AL, DL
Здесь содержимое регистра DL прибавляется к содержимому регистра AL и полученная сумма помещается в AL.
ADD AL, 3; содержимое регистра AL увеличивается на 3.
ADD AL, CATS; к содержимому регистра AL добавляется содержимое; байта памяти с адресом CATS.
ADD DX, [SI]; к содержимому регистра DX прибавляется;содержимое слова памяти, адрес которого содержится в регистре SI.
ADD [SI], AL; содержимое байта памяти, адресуемое регистром SI,; увеличивается на значение, хранящееся в регистре AL.
По команде вычитания SUB процессор вычитает второй операнд из первого и результат помещает в первый операнд. Например:
SUB AL, CATS
SUB DX, [SI]
SUB CATS+2, AH
Пример.
Пусть в сегменте данных зарезервировано 5 слов со значениями: F501, 7136, 2122, 5711, 1246. Кроме того, зарезервировано 10 байт без инициализации. Необходимо получить сумму 2, 5 и 8 байтов указанной последовательности слов. Младший байт результата нужно записать в третий байт. Затем из первого слова последовательности слов вычесть третье и результат записать в пятое слова последовательности байт.
|
|
DATA SEGMENT
L1 LABLE BYTE
L2 DW 0F501h, 7136h, 2122h, 5711h, 1246h
L3 LABLE WORD
L4 DB 10 DUP(?)
DATA ENDS
ASSUME CS:CODE, DS:DATA
CODE SEGMENT
START: MOV AX, DATA; инициализации сегментного
MOV DS, AX; регистра
MOV AX, 0;обнуление регистров: в AX накапливается
MOVCX, 0; сумма: CX
;для представления считываемого байта как слова
MOV AL, L1+1; в рег. AL второй байт последов. слов
MOV CL, L1+4; в рег. CL пятый байт последов. слов
ADD AX, CX; в AX сумма 2-го и 5-го байтов
MOV CL, L1+7; в CL 8-ой байт последов. слов
ADD AX, CX; в AX сумма 2-го, 5-го и 8-го байтов
MOV L4+2, AL; младший байт рез-та заносится в 3-ий
; байт последовательности L4
MOV AX, L2; в AX заносится значение F501 – первое
;слово последовательности L2
SUB AX, L2+4; из первого слова последовательности
; вычитается третье. Результат заносится в AX
MOV L6+8, AX; результат вычитания записывается в
;пятое слово последовательности слов
RET
CODE ENDS
END START
Индивидуальные задания
Вариант 1.
Зарезервировать в сегменте данных:
1. 5 байт со значениями 88Н,234,122,АВ, FЕ, присвоить последовательности имя L1;
2. 3 слова без инициализации с именем L2;
3. 4 байта с именем L3 и значениями 11Н,55Н,44Н,ЕЕН. Обеспечить с помощью директивы LABLE доступ к этим байтам как к словам.
4. присвоить значению 250 имя L4.
Написать программу, в которой:
1. Получить сумму 1,3,5 байтов из последовательности с именем L1 и записать результат во 2 слово последовательности L2.
2. Полученный в п.1. результат сложить со значением L4, результат записать в 3 слово последовательности L2.
3. Содержимое 2 слова последовательности L2 вычесть из 3 слова этой последовательности, результат записать в первое слово.
|
|
4. Выполнить п.1., используя косвенную адресацию (см. примечание), результат записать по адресу L3.
Вариант 2.
Зарезервировать в сегменте данных:
1. 3 слова со значениями b88h, 1234h, e22h, присвоить последовательности имя М1. Обеспечить с помощью директивы LABEL доступ к этим словам как к байтам.
2. Четыре байта без инициализации с именем М2;
3. Присвоить значению 211 имя М3.
Написать программу, в которой:
1. Получить сумму 3 значений (каждого второго байта последовательности М1) и записать результат во 2 слово последовательности М2.
2. Получить сумму 2 и 3 слов последовательности М1, из которой вычесть значение М3, записать результат в 1 слово последовательности М2.
3. Получить сумму 2 и 3 байтов последовательности М2 записать результат (байт) во 2 байт последовательности М1.
4. Выполнить п.1., используя косвенную адресацию (см. примечание).
Вариант 3.
Зарезервировать в сегменте данных:
1. Цепочку символов “канитель”, присвоить последовательности имя Q1. Обеспечить с помощью директивы LABLE доступ к этим байтам как к словам.
2. Четыре слова без инициализации с именем Q2.
3. Присвоить значению 184 имя Q3.
Написать программу, в которой:
1. Получить сумму 2,3 и 4 слов последовательности Q1 и записать результат в 3 слово последовательности Q2.
2. Полученный в п.1. результат сложить с 1 байтом последовательности Q1 и вычесть значение Q3, результат записать 2 слово последовательности Q2.
3. Получить сумму 2 и 3 слов последовательности Q2, старший байт результата записать в 1 байт последовательности Q1, младший байт в 1 слово последовательности Q2.
4. Выполнить п.1., используя косвенную адресацию (см. примечание).
Вариант 4.
Зарезервировать в сегменте данных:
1. Восемь байт со значениями 88Н, присвоить последовательности имя Т1. Обеспечить с помощью директивы LABEL доступ к этим байтам как к словам.
2. Четыре слова, значение 1 слова равно CF1H, остальные слова не инициализировать, имя последовательности Т2.
3. Присвоить значению 232 имя Т3.
Написать программу, в которой:
1. Записать во 2 слово последовательности Т2 первые слова последовательности Т1.
2. Получить сумму 3 значений: первых двух слов последовательности Т2 и второго байта последовательности Т1, результат записать 3 слово последовательности Т2.
3. Получить сумму 2 и 3 слов последовательности Т2 и из результата вычесть значение Т3, результат записать 2 слово последовательности Т1.
4. Выполнить п.2., используя косвенную адресацию (см. примечание).
Вариант 5.
Зарезервировать в сегменте данных:
1. Три слова без инициализации и одно слово со значением 773FН, дать последовательности имя Р1. Обеспечить с помощью директивы LABEL доступ к этим словам как к байтам.
2. Цепочку символов “трек”, присвоить последовательности имя Р2.
3. Присвоить значению 28FН имя Р3.
Написать программу, в которой:
1. Получить сумму 2,3,4 байтов последовательности Р1 и записать результат во 2 слово последовательности Р2.
2. Получить сумму 2 и 4 слов последовательности Р1 и из результата вычесть значение Р3, полученное значение записать: старший байт результата записать в старший байт 1 слово последовательности Р1, младший байт в младший байт третьего слова этой последовательности.
3. Выполнить п.1., используя косвенную адресацию (см. примечание).
Вариант 6.
Зарезервировать в сегменте данных:
1. Пять слов со значениями ABCD,813F,4567H,8AFE,71F1. Дать последовательности имя М1. Обеспечить с помощью директивы LABEL доступ к этим словам как к байтам.
2. Цепочку символов “говорун”, именем М2.
3. Присвоить значению F86 имя М3.
Написать программу, в которой:
1. Получить сумму 7,9 и 10 байтов последовательности М1 и записать результат во 2 слово последовательности М2.
2. Получить сумму 3 и 5 слов последовательности М1 из которой вычесть значение М3. Старший байт полученного значения записать в 3 байт последовательности М2, а младший байт в 6 байт последовательности М1.
|
|
3. Выполнить п.1., используя косвенную адресацию (см. примечание).
Вариант 7.
Зарезервировать в сегменте данных:
1. Шесть байт со значениями А8, F4,22,АВ,FЕ,-77. Присвоить последовательности L1.
2. Два слова без инициализации с именем L2.
3. Четыре байта с именем L3 и значениями 34Н,АD,ЕFС,ЕЕН. Обеспечить с помощью директивы LABEL доступ к этим байтам как к словам.
4. Присвоить значению 250 имя L4.
Написать программу, в которой:
1. Получить сумму 6,3,5 байтов из последовательности с именем L1 и записать результат в 1 слово последовательности L2.
2. Полученный в первом п.1. результат сложить со значением L4, результат записать в 1 слово последовательности L2.
3. Содержимое 2 слова последовательности L2 вычесть из 3 слова последовательности L1, результат записать в 1 слово последовательности L1.
4. Выполнить п.1., используя косвенную адресацию (см. примечание), результат записать по адресу L3.
Вариант 8.
Зарезервировать в сегменте данных:
1. Четыре слова со значениями C78Н,FА4Н,ЕE2Н,234553. Присвоить последовательности имя М1. Обеспечить с помощью директивы LABEL доступ к этим словам как к байтам.
2. Четыре байта без инициализации с именем М2.
3. Присвоить значению F231 имя М3.
Написать программу, в которой:
1. Получить сумму 3 значений (каждого второго байта последовательностиМ1) и записать результат во 2 слово последовательности М2.
2. Получить сумму 2 и 4 слов последовательности М1, из которой вычесть значение М3, записать результат во 2 слово последовательности М2.
3. Получить сумму 2 и 3 байтов последовательности М2, записать результат (1 байт) в 5 байт последовательности М1.
4. Выполнить п.1., используя косвенную адресацию (см. примечание).
Вариант 9.
Зарезервировать в сегменте данных:
1. Цепочку символов “терморегулятор”, присвоить последовательности имя Q1. Обеспечить с помощью директивы LABLE доступ к этим байтам как к словам.
|
|
2. Четыре слова без инициализации с именем Q2.
3. Присвоить значению А841 имя Q3.
Написать программу, в которой:
1. Получить сумму 1,3,6 слов последовательности Q1 и записать результат в 3 слово последовательности Q2.
2. Получить в п.1. результат сложить с 1 байтом последовательности Q1 и вычесть значение Q3, результат записать во 2 слово последовательности Q2.
3. Получить сумму 2 и 3слов последовательности Q2, старший байт результата записать во 2 слово последовательности Q1, младший байт в младший байт первого слова последовательности Q2.
4. Выполнить п.1., используя косвенную адресацию (см. примечание).
Вариант 10.
Зарезервировать в сегменте данных:
1. Три байта со значением 133 и 5 байт со значением 88Н. Присвоить последовательности имя Т1. Обеспечить с помощью директивы LABLE доступ к этим байтам как к словам.
2. Четыре слова, значение первого слова равно CF1H, остальные слова не инициализировать, имя последовательностиТ2.
3. Присвоить значению 2А5 имя Т3.
Написать программу, в которой:
1. Записать во 2 слово последовательности Т2 первое слово последовательности Т1.
2. Получить сумму 3 значений: первых двух слов последовательности Т2 и шестого байта последовательности Т1, результат записать в 3 слово последовательности Т2.
3. Получить 2 и 3 слов последовательности Т2 и из результата вычесть значение Т3, результат записать в 4 слово последовательности Т1.
4. Выполнить п.2., используя косвенную адресацию (см. примечание).
Вариант 11.
Зарезервировать в сегменте данных:
1. Слово CFА2, два слова без инициализации и одно слово со значением 27CFH, дать последовательности имя Р1. Обеспечить с помощью директивы LABEL доступ к этим словам как к байтам.
2. Цепочку символов “история”, присвоить последовательности имя Р2.
3. присвоить значению 28FH имя Р3.
Написать программу, в которой:
1. Получить сумму 2,4,7 байтов последовательности Р1 и записать результат в 3 слово последовательности Р2.
2. Получить 1 и 4 слов последовательности Р1 и из результата вычесть значение Р3, полученное значение записать: старший байт результата записать в старший байт 2 слова последовательности Р1, младший байт в младший байт третьего слова этой последовательности.
3. Выполнить п.1., используя косвенную адресацию (см. примечание).
Вариант 12.
Зарезервировать в сегменте данных:
1. Пять слов со значениями 6В8D,F13F,C127,8ADE,51F4. Дать последовательности имя M1. Обеспечить с помощью директивы LABEL доступ к этим словам как к байтам.
2. Цепочку символов “солидарность” с именем M2.
3. Присвоить значению F160 имя M3.
Написать программу, в которой:
1. Получить сумму 4,7 и 9 байтов последовательности М1. Записать результат в 3 слово последовательности М2.
2. Получить сумму 1 и 4 слов последовательности М1, и из которой вычесть значение М3. Старший байт полученного значения записать в 6 байт последовательности М2, а младший байт в 7 байт последовательности М1.
3. Выполнить п.1., используя косвенную адресацию (см. примечание).