查表—rom表的 程序设计.asm

来自「大量常用优秀程序源代码和说明」· 汇编 代码 · 共 54 行

ASM
54
字号
      ;; 设有128个数据,所有数据均为二字节,数据指针为DATA_B1表格放于DATA_B2开始的地址单元中,所对应的控制量放于0820H开始的地址单元中,对应控制量的数据从大到小排列。根据R4、R5的内容查找比较接近的一个数据,再找出对应表格的最后结果。
      ;;;;程序清单:
    DATA_B1  EQU  0204H		;;数据指针
    DATA_B2  EQU  0200H		; 表格地址
RAED_ROM:MOV    DPTR,#DATA_B1   ;设置数据指针
	MOV	R2,#40H		;初始化
	MOV	R3,#05H		;初始化
LINE1:  CLR	C
	MOV	A,R2		;将R2内容除2再送R2
	RR	A		;R2右移一位
	MOV	R2,A
	CLR	A
	MOVC	A,@A+DPTR
	SUBB	A,R5
	MOV	A,#01H
	MOVC	A,@A+DPTR
	SUBB	A,R4		;DPTR内容减1并送R4,R5中
	JC	LINE2		    ;;有借位转LINE2执行
	MOV	A,DPL
	ADD	A,R2
	MOV	DPL,A
	MOV	A,DPH
	ADDC	A,#00H
	MOV	DPH,A		;将(DPTR)+(R2)送到DPTR中
	SJMP	LINE3		;转LINE3执行
LINE2:CLR	C
	MOV	A,DPL
	SUBB	A,R2
	MOV	DPL,A
	MOV	A.DPH
	SUBB	A,#00H
	MOV	DPH,A		;将(DPTR)-(R2)送到DPTR中
LINE3:DJNZ 	R3,LINE1	;R3不为0,转LINE1执行
	CLR	A
	CLR	C
	MOVC	A,@A+DPTR
	SUBB	A,R5
	MOV	A,#01H
	MOVC	A,@A+DPTR
 	SUBB	A,R4		;(DPTR)-(R4R5)有进位吗?
	JNC	LINE4		;无进位,转LINE4执行
	CLR	C
	MOV	A,DPL
	SUBB	A,R2
	MOV	DPL,A
	MOV	A,DPH
	SUBB	A,#00H
	MOV	DPH,A		;(DPTR)-(R2)送到DPTR中
LINE4:	MOV	A,#80H
	MOVC	A,@A+DPTR
	MOV	R6,A
	RET

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?