diff --git a/add.asm b/add.asm new file mode 100644 index 0000000..916e372 --- /dev/null +++ b/add.asm @@ -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 ? \ No newline at end of file diff --git a/guide.md b/guide.md index cd40763..3dc48f7 100644 --- a/guide.md +++ b/guide.md @@ -76,7 +76,7 @@ - Также можно передавать аргументы для подпрограммы и используя регистры общего назначения (к сожалению, в БЭВМ он только один, и это AC). -- Третьим способом будет использование косвенной адресации. Для этого сразу под командой CALL можно указать заранее определённое подпрограммой количество аргументов. При этом в самой подпрограмме можно выгрузить вершину стека (которая в тот момент времени будет являться адресом первого аргумента), а после косвенной адресацией (а точнее, косвенной постинкрементацией) загрузить и использовать эти аргументы в подпрограмме. Далле остаётся только обратно загрузить уже увеличенное значение возврата подпрограммы, и программа начнет выполнение команд, которые идут уже после аргументов. +- Третьим способом будет использование косвенной адресации. Для этого сразу под командой CALL можно указать заранее определённое подпрограммой количество аргументов. При этом в самой подпрограмме можно выгрузить вершину стека (которая в тот момент времени будет являться адресом первого аргумента), а после косвенной адресацией (а точнее, косвенной постинкрементацией) загрузить и использовать эти аргументы в подпрограмме. Далее остаётся только обратно загрузить уже увеличенное значение возврата подпрограммы, и программа начнет выполнение команд, которые идут уже после аргументов. ## Команды @@ -176,10 +176,11 @@ - По спаду запишет это значение в регистр состояния. -- 4 такт: **MEM(AR) -> DR** +- 4 такт: **SP + 1 -> SP** - - По фронту находит по адресу ячейку. - - По спаду записывает значение этой ячейки в регистр данных. + - По фронту пустит значение указателя стека в АЛУ и прибавит 1. + + - По спаду запишет полученное значение в указатель стека. *Флаги, соответственно, возьмутся из регистра состояния.* diff --git a/report.pdf b/report.pdf index f36c4d3..a36c696 100644 Binary files a/report.pdf and b/report.pdf differ