Ассемблер не плохой язык программирования. Одновременно и мощный и сложный, но не такой сложный как можно подумать. Предлагаю развенчать мифы об этом. Вспомнить наши корни и попробовать написать программу на ассемблере под ARM Cortex-M3
, в качестве подопытного будем использовать отладку с алиэкспрес для микроконтроллера stm32f103c8
.
Если заинтересовал - читайте дальше.
Сегодня мы рассмотрим, как написать простейший перехватчик прерывания под ДОС. Зачем это надо в наше время? Ответ прост - для того, чтобы лучше разобраться как работает машина на низком уровне, общего развития и расширения кругозора, ну и некоторым для написания курсачей. Возможно этот материал будет полезен желающим попробовать написать свою ОС - почему бы и нет?
Интересно? Мы начинаем!
Арифметические операции
Операция |
Пример |
Описание |
|
|
ADD |
ADD R0, R1, Operand2 ADD R0, R1, 12bit const. |
Сложение R0 = R1 + R2 |
N, Z, C, V |
S |
ADC |
ADC R0, R1, R2 ADC R0, R1, 8bit const |
Сложение с учётом переноса R0 = R1 + R2 + C |
N, Z, C, V |
S |
ADDW |
ADD R0, R1, 12bit const. |
Сложение с 12bit константой |
N, Z, C, V |
|
SUB |
SUB R0, R1, R2 SUB R0, R1, 12bit const. |
Вычитание R0 = R1 - R2 |
N, Z, C, V |
S |
SBC |
SBC R0, R1, R2 SBC R0, R1, 8bit const. |
Вычитание с учётом переноса R0 = R1 - R2 - C |
N, Z, C, V |
S |
SUBW |
SUB R0, R1, 12bit const. |
Вычитание с 12bit константой |
N, Z, C, V |
|
RSB |
RSB R0, R1, R2 RSB R0, R1, 8bit const. RSB R0, R1, R2, ASR#23 |
Вычитание с противоположным порядком аргументов. R0 = R2 - R1 или R0 = 8bit const - R1 |
N, Z, C, V |
S |