Это да, при доступе к dram по границам 16 байт (или 4 байт, если смотреть на одну 8-битную линейку озу) всегда N. DMA (видео, звук) всегда выровнены и N+S+S+S, а в доступ проца число S максимум 3.
Вид для печати
Ну а куда людям податься?
Я вот ни одного русскоязычного форума по Архимедам не знаю :(
Те ARM - которые сейчас - это сильно другие ARM(хоть и развитие), и память к ним подключается совсем другая, другие скорости, другая периферия...
И с другой стороны организация памяти и скорость доступа представляют определённый интерес любителям PDP-11(для меня, например), так как тут можно идеи почерпнуть и для PDP-11 :)
декримент регистра и условный переход на метку, например по не нулю (в системной макробиблиотеке RT-11 есть даже такая макрокоманда, кою используют, если процессор не поддерживает SOB), как ноль - так завершение цикла.
Так же возможны варианты инкримента отрицательного значения в регистре... Можно условие в условном переходе поменять условие как хочется, когда значение положительно, когда станет отрицательно...
И вообще команда условного перехода может быть выставлена по любой комбинации флагов слова состояния процессора. И ещё, используя эту особенность народ делал самомодифицирующийся код, так процессоры без диспетчера памяти вполне позволяли такие проделки :) А уж поддержка I/D пространств - экзотика большая. Только "Электроника-79" и компьютеры на базе 1831(J-11)
- - - Добавлено - - -
Код:
MOV #1000,R1 ; ОТКУДА
MOV #2000,R2 ; КУДА
MOV #100,R0 ; СКОЛЬКО (100 ВОСМЕРИЧНОЕ СЛОВ)
LABEL: MOV (R1)+,(R2)+ ; КОПИРУЕМ
SOB R0,LABEL ; ПОКА НЕ ОБНУЛЁН RO УХОДИМ НА LABEL:
Без SOB на одно слово более кода:
MOV (PC)+,R1 ; ТО ЖЕ САМОЕ, ЧТО В ПРОШЛЫЙ РАЗ, ПРОСТО ДРУГАЯ ФОРМА ЗАПИСИ,
L: .WORD 1000 ;НАПРИМЕР, СЮДА МОЖНО МЕТКУ ПОСТАВИТЬ
MOV (PC)+,R2
.WORD 2000
MOV (PC)+,R0
.WORD 100
LABEL: MOV (R1)+,(R2)+
DEC R0 ; КАК ТОЛЬКО ОБНУЛИТСЯ R0, УСТАНОВИТСЯ ФЛАГ Z
BNE LABEL ; ПОКА НЕ ВЗВЕДЁН ФЛАГ Z ВОЗВРАТ НА LABEL:
Ну это ты загнул. Одной командой для некоторых сценариев не обойтись. Ну-ка, для примера, под вариант C=1 и N=1 - какая у нас команду условного перехода? ;)
Вот все варианты:
- - - Добавлено - - -Код:or (isOpBNE and (not basePSW.Even.OpStatus.Z))
or (isOpBEQ and basePSW.Even.OpStatus.Z)
or (isOpBGE and (basePSW.Even.OpStatus.N = basePSW.Even.OpStatus.V))
or (isOpBLT and (basePSW.Even.OpStatus.N /= basePSW.Even.OpStatus.V))
or (isOpBGT and ((not basePSW.Even.OpStatus.Z) and (basePSW.Even.OpStatus.N = basePSW.Even.OpStatus.V)))
or (isOpBLE and ( basePSW.Even.OpStatus.Z or (basePSW.Even.OpStatus.N /= basePSW.Even.OpStatus.V)))
or (isOpBPL and (not basePSW.Even.OpStatus.N))
or (isOpBMI and basePSW.Even.OpStatus.N)
or (isOpBHI and (not basePSW.Even.OpStatus.Z) and (not basePSW.Even.OpStatus.C))
or (isOpBLOS and ( basePSW.Even.OpStatus.Z or basePSW.Even.OpStatus.C))
or (isOpBVC and (not basePSW.Even.OpStatus.V))
or (isOpBVS and basePSW.Even.OpStatus.V)
or (isOpBHIS and (not basePSW.Even.OpStatus.C))
or (isOpBLO and basePSW.Even.OpStatus.C) then
Среди наших процов - да, среди DEC - ещё 44 и 45-50-55 (это, по сути, один и тот же проц)
Там в команде условного перехода просто битовая маска, коя сравнивается с флагами процессора ...
Совпало поехали в одну сторону, не совпало - в другую :) Только совпадение хитрое...
Это я в какой-то книжке вычитал по PDP-11 :)
Там написано было, что команд на условный переход более по факту, чем мнемоник в асемблере ... Но используют сильно менее, так как не надо ...
Учитывая, что у PDP-11 флаги взводятся почти после каждой команды, появляются как свои плюсы, так и минусы .
Не ведаю точно , надо смотреть коды операций и разбираться. Если очень надо - можно вычислить и написать директивой .WORD
Потом сделать макрос...
Но по факту, редко кто на такое идёт ...
- - - Добавлено - - -
Там биты и логика операции...
И ещё, надо учесть , что некоторые процессоры могут отрабатывать такие команды по 10 вектору...
Так как команды не задокументированы(Это уже моё личное мнение)