- •Лабораторная работа №3.
- •Inc Инкремент
- •3.2. Практическая часть.
- •3.2.1. Арифметические команды. Команды сложения.
- •Команды вычитания.
- •Команды инкремента и декремента.
- •Команды умножения и арифметического дополнения.
- •3.2.2. Команды байтовой логики.
- •3.2.3. Команды сдвига.
- •Команды логического (или последовательного) сдвига.
- •Команды арифметического сдвига.
- •Команды циклического сдвига.
- •3.2.4. Команды работы с битами.
- •3.2.5. Команды сравнения и тестирования. Команды сравнения.
- •Команды тестирования.
- •3.3. Контрольные вопросы.
- •3.4. Задания.
3.2. Практическая часть.
В данной лабораторной работе изучаются следующие группы команд:
1. Арифметические команды:
ADC, ADD, SBC, SUB, MUL, NEG, INC, DEC.
2. Команды байтовой логики:
AND, ORA, EOR, COM.
3. Команды сдвига :
ASL, ASR, LSL, LSR, ROL, ROR.
4. Команды работы с битами:
BCLR, BSET.
5. Команды сравнения и тестирования:
CMP, CPX, TST, BIT.
3.2.1. Арифметические команды. Команды сложения.
Команда ADD (ADDition) складывает содержимое аккумулятора и значение из памяти, либо непосредственно заданный операнд. Результат помещается в аккумулятор. При выполнении команды ADC (ADdition with Carry) в сложении также принимает участие флаг C регистра признаков.
Пример использования команды ADD. В примере складываются два числа, расположенные в ячейках памяти с адресами $50 и $51. Результат помещается в ячейку с адресом $52.
0100 B6 50 LDA $50 Загрузить в аккумулятор первое слагаемое из ячейки с адресом $50.
0102 BB 51 ADD $51 Прибавить второе слагаемое, находящееся в ячейке с адресом $51.
0104 B7 52 STA $52 Поместить результат в ячейку с адресом $52.
Перед выполнением программы необходимо занести слагаемые в ячейки памяти и установить точку установа по адресу $0106. Рекомендуется выполнить пример с разными значениями в ячейках $50 и $51, обращая внимание на получившийся в ячейке $52 результат и устанавливаемые в регистре CC флаги. Ниже приведен список тестов для этого примера:
Значение в ячейке $50 |
Значение в ячейке $51 |
Результат в ячейке $52 |
Содержимое регистра CC |
$12 |
$7A |
$8C |
111.xN..* |
$3E |
$D7 |
$15 |
111Hx..C |
$A1 |
$19 |
$BA |
111.xN.. |
$2F |
$D1 |
$00 |
111Hx.ZC |
*x-значение флага никогда не меняется после выполнения команды.
Пример использования команды ADC. Основное назначение этой команды-корректно обрабатывать перенос бита переполнения из младшего байта в более старший при сложении чисел, занимающих несколько байт. Рассмотрим пример сложения двухбайтовых чисел, в котором первое число располагается в ячейках $50 и $51, второе-в ячейках $52 и $53. Результат помещается в ячейки $54 и $55. В соответствии с принятым фирмой Motorola способом хранения чисел, старший байт в слове находится по младшему адресу. Программу рекомендуется выполнить в пошаговом режиме, обращая внимание на флаг C в регистре признаков.
0100 B6 51 LDA $51 Загрузить в аккумулятор младший байт первого слагаемого из ячейки $51.
0102 BB 53 ADD $53 Прибавить младший байтвторого слагаемого, находящийся в ячейке $53. Возможное переполнение будет зафиксиро- вано установкой флагаC.
0104 B7 55 STA $55 Сохранить младший байт результата в ячейке $55.
0106 B6 50 LDA $50 Загрузить в аккумулятор старший байт первого слагаемого из ячейки с адресом $50.
0108 B9 52 ADC $52 Прибавить старший байт второго слагаемого, находящийся в ячейке $52, учитывая возможное переполнение от предыдущего сложения.
010A B7 54 STA $54 Сохранить старший байт результата в ячейке $54.
Список тестов:
Значение в ячейках $50 и $51 |
Значение в ячейках $52 и $53 |
Содержимое регистра CC после команды ADD. |
Результат в ячейках $54 и $55 |
Содержимое регистра CC после команды ADC. |
$1234 |
$5FED |
111Hx..C |
$7221 |
111Hx... |
$32BE |
$ABCD |
111HxN.C |
$DE8B |
111.xN.. |
$FE01 |
$1009 |
111.x... |
$0E0A |
111.x..C |
$BBBB |
$4445 |
111Hx.ZC |
$0000 |
111Hx.CZ |
$10AA |
$2058 |
111Hx..C |
$3102 |
111.x...* |
*Если бы в программе по адресу $0108 стояла бы команда ADD, то получился бы неверный результат $3002.