阅读:1438回复:2
用最少的时钟周期,实现for循环
在下有一段z80的程序,由于以前没有学过,时间又不够,相烦哪位老兄看一下,可不可以用?(实际上是一个for循环,要求用最少的时钟周期)
#define MAX_SCAN_NUM 6 main(){ char i; char nIOReg; char AnIOBuf[6]; while(1){ #asm push af push hl LoopFor: ld hl, (i) ex de, hl ld hl, AnIOBuf add hl, de ioi ld a, (nIOReg) ioi ld (hl), a ld hl, MAX_SCAN_NUM ex de, hl ld hl, (i) inc hl ; increment counter ld (i), hl sbc hl, de jp nz, LoopFor ExitFor: pop hl pop af #endasm printf(\"AnIOBuf[%d] is %d\", i, AnIOBuf); } } :D |
|
|
沙发#
发布于:2002-08-05 03:37
更正:
#define MAX_SCAN_NUM 6 main(){ char i; char nIOReg; char AnIOBuf[6]; i = 0; while(1){ #asm push af push hl LoopFor: ld hl, (i) ex de, hl ld hl, AnIOBuf add hl, de ioi ld a, (nIOReg) ioi ld (hl), a ld hl, MAX_SCAN_NUM ex de, hl ld hl, (i) inc hl ; increment counter ld (i), hl sbc hl, de jp nz, LoopFor ExitFor: pop hl pop af #endasm printf(\"AnIOBuf[%d] is %d\", i, AnIOBuf); } } |
|
|
板凳#
发布于:2002-08-07 00:51
各位大虾,我准备这样写了:
; nIOReg - IO 口的地址 ; AnIOBuf- 缓存数组 ; nScanCount- 单位时间内的扫描数 ; MS_TIMER- 系统维护的定时器 ; nEndMs- 结束时间 #asm push af push hl push de LoopFor: ioi ld a, (nIOReg) ;11 ld hl, AnIOBuf ; 6 ld de, (nScanCount) ;13 add hl, de ; 2 ld (hl), a ; 6 ld a, (nScanCount) ; 9 inc a ; 2 ld (nScanCount), a ;10 ld a, (MS_TIMER) ; 9 ld h, a ; 2 ld a, (nEndMs) ; 9 sub h ; 2 jp nz, LoopFor ; 7 // total 88 cycles ExitFor: pop de pop hl pop af #endasm* |
|
|