51单片机 汇编语言 常用数据处理程序设计 查表送寄存器

作者&投稿:尚世 (若有异议请与网页底部的电邮联系)
51单片机 汇编语言 常用数据处理程序设计 求16个无符号数的最大值~

查找最大值的程序,不是很简单的吗?
如下即可:

ORG 0H
MOV R0, #30H
ACALL ZI
SJMP $
;-----------------------------------
ZI:
MOV B, #0 ;先用0当做最大值.
MOV R7, #16 ;比较16次.
LOOP: MOV A, @R0 ;取来一个数字.
CJNE A, B, B1 ;比较.
B1: JC B2 ;有借位转移.
MOV B, A ;够减则存到B中.
B2: INC R0 ;转到下一个.
DJNZ R7, LOOP ;循环16遍.
RET
;-----------------------------------
END

DB 指令以表达式的值的字节形式初始化代码空间。
格式: [标号:] DB 表达式表
表达式中可包含符号、字符串、或表达式等项,
各个项之间用逗号隔开,字符串应用引号括起来。
括号内的标号是可选项,如果使用了标号,
则标号的值将是表达式表中第一字节的地址。
DB 指令必须位于 CODE 段之内,否则将会发生错误。

TABLE:
DB 0C0H, 0F9H, 0A4H
TABLE1:
DB " WEINA "
(引自伟纳电子)

ORG 0000H
MOV DPTR,#TABLE
MOV R2,A (暂存A中原来的参数)
MOVC A,@A+DPTR ;到表头地址加A中的偏移量处取数
MOV R0,A (把取来的第一个数放在R0中)
XCH A,R2 (把原暂存的A值和和才取的数进行交换存贮)
INC A (因是二字节的这准备取下一个字节的数)
MOVC A,@A+DPTR
MOV R1,A (把取的第二个字放在的R1中)
SJMP $
ORG 2000H
TABLE: DW 0,1,4,9,16,25,36,49,64,81,100,121,144,169
DW
196,225,256,289,324,361,400,441,484,529,576,625,676,729,784,841,900
END

1、
ORG 0000H
MOV DPTR,#TABLE
MOV R2,A ;待查表参数暂存R2
MOVC A,@A+DPTR
MOV R0,A ;查表得到的第一个字节数据(低8位)送入R0
XCH A,R2 ;从R2取回待查表参数(等同 MOV A,R2)
INC A ;带查表参数+1,获得双字节表的下一个偏移地址
MOVC A,@A+DPTR
MOV R1,A ;查表得到的第二个字节数据(高8位)送入R1
SJMP $
ORG 2000H
TABLE: DW 0,1,4,9,16,25,36,49,64,81,100,121,144,169
DW
196,225,256,289,324,361,400,441,484,529,576,625,676,729,784,841,900
END

2、
MOVC A,@A+DPTR
MOV R0,A (???)
XCH A,R2 (???)
INC A (???)
MOVC A,@A+DPTR
MOV R1,A (???)