
- •Однокристальная микроЭвм мс68нс05с8.
- •Практическая часть.
- •1. Арифметические команды. Команды сложения.
- •Команды вычитания.
- •Команды инкремента и декремента.
- •Команды умножения и арифметического дополнения.
- •2. Команды байтовой логики.
- •3. Команды сдвига.
- •Команды логического (или последовательного) сдвига.
- •Команды арифметического сдвига.
- •Команды циклического сдвига.
- •4. Команды работы с битами.
- •5. Команды сравнения и тестирования. Команды сравнения.
- •Команды тестирования.
- •Контрольные вопросы.
- •Задания.
Практическая часть.
В данной лабораторной работе изучаются следующие группы команд:
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.
1. Арифметические команды. Команды сложения.
Команда ADD (ADDition) складывает содержимое аккумулятора и значение из памяти, либо непосредственно заданный операнд. Результат помещается в аккумулятор. При выполнении командыADC (ADdition with Carry) в сложении также принимает участие флагC регистраCC.
Пример использования команды 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в регистреCC.
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.