差異處
這裏顯示兩個版本的差異處。
| 兩邊的前次修訂版前次修改 下次修改 | 前次修改 | ||
| wiki:自动化与科技指导:minecoprocessors:示范程序 [2023/12/07 15:35] – [延时器] nikoqw | wiki:自动化与科技指导:minecoprocessors:示范程序 [2023/12/08 10:43] (目前版本) – nikoqw | ||
|---|---|---|---|
| 行 1: | 行 1: | ||
| ====== 示范程序 ====== | ====== 示范程序 ====== | ||
| - | ===== 「标准库」 ===== | ||
| - | 提供一些通用的功能,如延时等。 | ||
| - | <code ASM> | ||
| - | ; 【作用】 | ||
| - | ; 延时 | ||
| - | ; 【参数】 | ||
| - | ; a[I][int]:延时的 cycles 数目,> | ||
| - | ; 【内部使用的寄存器】 | ||
| - | ; b[int]:延时计数 | ||
| - | sleep: | ||
| - | PUSH b | ||
| - | |||
| - | ; Init reg | ||
| - | MOV b, 0 | ||
| - | |||
| - | ; main logic | ||
| - | sleep__loop: | ||
| - | ADD b, 1 | ||
| - | CMP b, a | ||
| - | JNZ sleep_loop | ||
| - | |||
| - | POP b | ||
| - | RET | ||
| - | |||
| - | |||
| - | ; 【作用】 | ||
| - | ; 等待某个红石输入寄存器得到高电平 | ||
| - | ; 【参数】 | ||
| - | ; a[I][int]:红石寄存器 ID | ||
| - | wait_in_high: | ||
| - | CMP a, 0 | ||
| - | JZ wait_in_high__pf | ||
| - | CMP a, 1 | ||
| - | JZ wait_in_high__pb | ||
| - | CMP a, 2 | ||
| - | JZ wait_in_high__pl | ||
| - | CMP a, 3 | ||
| - | JZ wait_in_high__pr | ||
| - | HLT ; a 非法 | ||
| - | |||
| - | wait_in_high__pf: | ||
| - | CMP pf, 0x00 | ||
| - | JZ wait_in_high__pf | ||
| - | RET | ||
| - | |||
| - | wait_in_high__pb: | ||
| - | CMP pb, 0x00 | ||
| - | JZ wait_in_high__pf | ||
| - | RET | ||
| - | |||
| - | wait_in_high__pl: | ||
| - | CMP pl, 0x00 | ||
| - | JZ wait_in_high__pf | ||
| - | RET | ||
| - | |||
| - | wait_in_high__pr: | ||
| - | CMP pr, 0x00 | ||
| - | JZ wait_in_high__pf | ||
| - | RET | ||
| - | </ | ||
| - | |||
| - | |||
| - | |||
| ===== 延时器 ===== | ===== 延时器 ===== | ||
| - | 类似于中继器,但得到高电平输入时,立刻输出高电平。 | + | 类似于中继器,但区别在于:得到高电平输入时,立刻输出高电平而不等待,只在已输出高电平和恢复输出低电平之间等待固定时长。 |
| **引脚作用**(trispc) 后引脚:输入,前引脚:输出 | **引脚作用**(trispc) 后引脚:输入,前引脚:输出 | ||
| - | < | + | <code-splitter> |
| + | _start: | ||
| MOV ports, 0010b | MOV ports, 0010b | ||
| - | _start: | + | wait_in: |
| - | ; wait_in_high(1) { | + | ; wait_in_high(1) |
| + | ; { | ||
| MOV a, 1 | MOV a, 1 | ||
| CALL wait_in_high | CALL wait_in_high | ||
| 行 82: | 行 21: | ||
| ; }; | ; }; | ||
| MOV pf, 0x00 | MOV pf, 0x00 | ||
| - | JMP _start | + | JMP wait_in |
| - | </ | + | </code-splitter> |