📄 fcount.asm
字号:
;*************************************************
; 人口频率放在R4R5R6R7中
; 出口控制字在R4R5R6R7中
; TZL 2005.3
;************************************************
ORG 00H
AJMP MAIN
ORG 30H
MAIN: NOP
MOV SP, #70H
MOV 6BH, R4 ;参数传递(入口频率)
MOV 6AH, R5
MOV 69H, R6
MOV 68H, R7
MOV R1, #95H ;初始化除数
MOV R2, #0BAH
MOV R3, #0AH
CALL MUL_24
CALL DIV7_3
AJMP $
;****************************************
;频率乘以2^24次方
;入口f放在68H—6B的四个单元中
;出口结果就是被除数放在50H开头的单元中
;****************************************
MUL_24: MOV A, 6BH
XCH A, 56H
MOV A, 6AH
XCH A, 55H
MOV A, 69H
XCH A, 54H
MOV A, 68H
XCH A, 53H
MOV 52H, #0
MOV 51H, #0
MOV 50H, #0
RET
;************************************;
;被除数/除数
;被除数放在以50H—56H7个单元
;除数放在R1R2R3中
;除数缓存在以57H—5DH开头的7个单元
;5EH 外循环计数器
;5FH 内循环计数器
;一级商缓存在以60H—63H的4个单元
;二级商缓存在以64H—67H的4个单元:
;************************************;
DIV7_3: MOV 5EH, #0
MOV 60H, #0 ;商清零
MOV 61H, #0
MOV 62H, #0
MOV 63H, #0
MOV 64H, #0 ;商缓存清零
MOV 65H, #0
MOV 66H, #0
MOV 67H, #0
LOOP: MOV A, 64H ;累加商
ADD A, 60H
XCH A, 60H
MOV A, 65H
ADDC A, 61H
XCH A, 61H
MOV A, 66H
ADDC A, 62H
XCH A, 62H
MOV A, 67H
ADDC A, 63H
XCH A, 63H
CLR C
MOV A, #32
SUBB A, 5EH
XCH A, 5FH
MOV 57H, R1 ;恢复除数
MOV 58H, R2
MOV 59H, R3
MOV 5AH, #0
MOV 5BH, #0
MOV 5CH, #0
MOV 5DH, #0
MOV A, 50H ;被除数-除数
SUBB A, 57H
MOV A, 51H
SUBB A, 58H
MOV A, 52H
SUBB A, 59H
MOV A, 53H
SUBB A, 5AH
MOV A, 54H
SUBB A, 5BH
MOV A, 55H
SUBB A, 5CH
MOV A, 56H
SUBB A, 5DH
JNC LOOP11
;余数做四舍五入处理
CLR C ;除数除以2
MOV A, R3
RRC A
XCH A, R3
MOV A, R2
RRC A
XCH A, R2
MOV A, R1
RRC A
XCH A, R1
CLR C ;余数减除数除以2
MOV A, 50H
SUBB A, R1
MOV A, 51H
SUBB A, R2
MOV A, 52H
SUBB A, R3
JC DIV_END
MOV A, 60H
ADD A, #1
XCH A, 60H
MOV A, 61H
ADDC A, #0
XCH A, 61H
MOV A, 62H
ADDC A, #0
XCH A, 62H
MOV A, 63H
ADDC A, #0
XCH A, 63H
DIV_END:MOV R7, 60H ;存商
MOV R6, 61H
MOV R5, 62H
MOV R4, 63H
RET
;商上2^0次方
LOOP11: MOV 64H, #1
MOV 65H, #0
MOV 66H, #0
MOV 67H, #0
;除数乘2
LOOP1: CLR C
MOV A, 57H ;从最低位开始移
RLC A
XCH A, 57H
MOV A, 58H
RLC A
XCH A, 58H
MOV A, 59H
RLC A
XCH A, 59H
MOV A, 5AH
RLC A
XCH A, 5AH
MOV A, 5BH
RLC A
XCH A, 5BH
MOV A, 5CH
RLC A
XCH A, 5CH
MOV A, 5DH
RLC A
XCH A, 5DH
;被除数-除数
CLR C
MOV A, 50H
SUBB A, 57H
MOV A, 51H
SUBB A, 58H
MOV A, 52H
SUBB A, 59H
MOV A, 53H
SUBB A, 5AH
MOV A, 54H
SUBB A, 5BH
MOV A, 55H
SUBB A, 5CH
MOV A, 56H
SUBB A, 5DH
JC NEXT1
;商乘以2
CLR C
MOV A, 64H
RLC A
XCH A, 64H
MOV A, 65H
RLC A
XCH A, 65H
MOV A, 66H
RLC A
XCH A, 66H
MOV A, 67H
RLC A
XCH A, 67H
DJNZ 5FH, LOOP1
JMP NEXT2
;除数除以2
NEXT1: CLR C
MOV A, 5DH ;从最高位开始移
RRC A
XCH A, 5DH
MOV A, 5CH
RRC A
XCH A, 5CH
MOV A, 5BH
RRC A
XCH A, 5BH
MOV A, 5AH
RRC A
XCH A, 5AH
MOV A, 59H
RRC A
XCH A, 59H
MOV A, 58H
RRC A
XCH A, 58H
MOV A, 57H
RRC A
XCH A, 57H
;被除数-除数保存差值
NEXT2: CLR C
MOV A, 50H ;取被除数
SUBB A, 57H
XCH A, 50H ;差值覆盖被除数
MOV A, 51H
SUBB A, 58H
XCH A, 51H
MOV A, 52H
SUBB A, 59H
XCH A, 52H
MOV A, 53H
SUBB A, 5AH
XCH A, 53H
MOV A, 54H
SUBB A, 5BH
XCH A, 54H
MOV A, 55H
SUBB A, 5CH
XCH A, 55H
MOV A, 56H
SUBB A, 5DH
XCH A, 56H
INC 5EH
JMP LOOP
END
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -