OPDLab4/Pass

This commit is contained in:
LeterZP
2026-04-24 01:10:46 +03:00
parent ad863a274a
commit ac3927c31a
3 changed files with 50 additions and 4 deletions
+45
View File
@@ -0,0 +1,45 @@
org 0x0000
a: word $array
b: word ?
i: word ?
j: word ?
start: ld #5
dec
st i
ld a
inc
st b
A: ld i
st j
B: ld (a)
push
ld (b)
push
call $sort
pop
st (b)+
pop
st (a)+
loop j
jump B
ld a
sub i
st a
ld b
sub i
st b
loop i
jump A
hlt
org 0x0020
array: word 0x0016, 0x41AA, 0x9120, 0x0004, 0xFF12
org 0x0100
sort: ld (sp+2)
cmp (sp+1)
blt z
swam (sp+1)
st (sp+2)
z: ret
x: word ?
+5 -4
View File
@@ -76,7 +76,7 @@
- Также можно передавать аргументы для подпрограммы и используя регистры общего назначения (к сожалению, в БЭВМ он только один, и это AC). - Также можно передавать аргументы для подпрограммы и используя регистры общего назначения (к сожалению, в БЭВМ он только один, и это AC).
- Третьим способом будет использование косвенной адресации. Для этого сразу под командой CALL можно указать заранее определённое подпрограммой количество аргументов. При этом в самой подпрограмме можно выгрузить вершину стека (которая в тот момент времени будет являться адресом первого аргумента), а после косвенной адресацией (а точнее, косвенной постинкрементацией) загрузить и использовать эти аргументы в подпрограмме. Далле остаётся только обратно загрузить уже увеличенное значение возврата подпрограммы, и программа начнет выполнение команд, которые идут уже после аргументов. - Третьим способом будет использование косвенной адресации. Для этого сразу под командой CALL можно указать заранее определённое подпрограммой количество аргументов. При этом в самой подпрограмме можно выгрузить вершину стека (которая в тот момент времени будет являться адресом первого аргумента), а после косвенной адресацией (а точнее, косвенной постинкрементацией) загрузить и использовать эти аргументы в подпрограмме. Далее остаётся только обратно загрузить уже увеличенное значение возврата подпрограммы, и программа начнет выполнение команд, которые идут уже после аргументов.
## Команды ## Команды
@@ -176,10 +176,11 @@
- По спаду запишет это значение в регистр состояния. - По спаду запишет это значение в регистр состояния.
- 4 такт: **MEM(AR) -> DR** - 4 такт: **SP + 1 -> SP**
- По фронту находит по адресу ячейку. - По фронту пустит значение указателя стека в АЛУ и прибавит 1.
- По спаду записывает значение этой ячейки в регистр данных.
- По спаду запишет полученное значение в указатель стека.
*Флаги, соответственно, возьмутся из регистра состояния.* *Флаги, соответственно, возьмутся из регистра состояния.*
BIN
View File
Binary file not shown.