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).
|
- Также можно передавать аргументы для подпрограммы и используя регистры общего назначения (к сожалению, в БЭВМ он только один, и это 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