OPDLab4/Pass
This commit is contained in:
@@ -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 ?
|
||||
@@ -76,7 +76,7 @@
|
||||
|
||||
- Также можно передавать аргументы для подпрограммы и используя регистры общего назначения (к сожалению, в БЭВМ он только один, и это AC).
|
||||
|
||||
- Третьим способом будет использование косвенной адресации. Для этого сразу под командой CALL можно указать заранее определённое подпрограммой количество аргументов. При этом в самой подпрограмме можно выгрузить вершину стека (которая в тот момент времени будет являться адресом первого аргумента), а после косвенной адресацией (а точнее, косвенной постинкрементацией) загрузить и использовать эти аргументы в подпрограмме. Далле остаётся только обратно загрузить уже увеличенное значение возврата подпрограммы, и программа начнет выполнение команд, которые идут уже после аргументов.
|
||||
- Третьим способом будет использование косвенной адресации. Для этого сразу под командой CALL можно указать заранее определённое подпрограммой количество аргументов. При этом в самой подпрограмме можно выгрузить вершину стека (которая в тот момент времени будет являться адресом первого аргумента), а после косвенной адресацией (а точнее, косвенной постинкрементацией) загрузить и использовать эти аргументы в подпрограмме. Далее остаётся только обратно загрузить уже увеличенное значение возврата подпрограммы, и программа начнет выполнение команд, которые идут уже после аргументов.
|
||||
|
||||
## Команды
|
||||
|
||||
@@ -176,10 +176,11 @@
|
||||
|
||||
- По спаду запишет это значение в регистр состояния.
|
||||
|
||||
- 4 такт: **MEM(AR) -> DR**
|
||||
- 4 такт: **SP + 1 -> SP**
|
||||
|
||||
- По фронту находит по адресу ячейку.
|
||||
- По спаду записывает значение этой ячейки в регистр данных.
|
||||
- По фронту пустит значение указателя стека в АЛУ и прибавит 1.
|
||||
|
||||
- По спаду запишет полученное значение в указатель стека.
|
||||
|
||||
*Флаги, соответственно, возьмутся из регистра состояния.*
|
||||
|
||||
|
||||
BIN
Binary file not shown.
Reference in New Issue
Block a user