Команды сложения и вычитания

По команде сложения второй операнд прибавляется к первому, и результат помещается в первый операнд. Например:

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., используя косвенную адресацию (см. примечание).


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: