第十讲
外部RAM传送 举例
例1. 设工作寄存器R0的内容为12H,R1的内容为34H,片外RAM34H单元的内容为56H。执行指令:
MOVX A, @R1 ;(34H)=56H—>A
MOVX @R0 A ;(A)=56H—>片外12H单元中
执行结果为片外RAM的(34H)=56H, (12H)=56H
例2:某应用程序外扩了8k字节RAM,要求把内部RAM的20H单元内容发送到外部RAM的800H单元中。
MOV DPTR,800H ;外部数据存储器地址指针
MOV R0, #20H ;内部数据存储器的地址指针
MOV A, @R0 ;取内部数据存储器20H单元内容
MOVX A, @DPTR ;外部数据存储器800H单元
程序存储器传送指令(查表指令)
MOVC A, @A+PC ;(A)<—((A)+(PC))
MOVC A, @A+DPTR ;(A)<—((A)+(DPTR))
.功能:从程序存储器中读取数据(如表格、常数等)
.特点:执行过程相同,基址不同,适用范围不同。
累加器A为变址寄存器,PC、DPTR为基址寄存器。
DPTR为基址寄存器时,允许数表存放在程序存储器的任意单元,称为远程查表,编程比较直观;
而PC为基址存储器时,数据表中只能放在该指令单元往下的256个单元中,称为近程查表。编程时需计算A值与数表首址的编程量。
查表指令 举例
例1.求平方数(远程查表法),(A)=i ,i=0-9
MOV DPTR, #TABLE ;指向表址
MOVC A, @A+DPTR ;查表得到平方数
MOV 20H, A ;存平方数
HERE:SJMP HERE
TABLE:DB 00H, 01H, 04H, 09H;平方表0^2-9^2
DB 16H, 25H, 36H
DB49H, 64H, 81H
注:rel=TABLE—(查表指令地址+1)
MOVC指令为单字节
字节交换指令
.XCH A, Rn ;(A)<---->(Rn),(direct)、((Ri))
XCH A, direct
XCH A, @Ri
.功能:将累加器A与源操作数的字节内容互换。
.源操作器有寄存器寻址、直接寻址和寄存器间寻址等寻址方式。
例:设(R0)=30H,(A)=3FH, 片内(30H)=3FH
执行指令 XCH A,@R0
执行结果(A)=BBH,(30H)=3FH
3.3.2 算术运算类指令
.算术运算类指令都是通过算术逻辑运算单元ALU进行数据运算处理的指令,包括加、减、乘除四则运算。
. 使用的助记符为ADD,ADDC,INC,DA,SUBB,DEC,MUL,DIV等八种。
. 执行结果影响进位标志(CY),辅助进位(AC),溢出标志(OV)及奇偶标志(P).
.加1和减1指令不影响这些标志。
ADD A, Rn ;(A)+(Rn)-->(A)
ADD A, drect ;(A)+(direct)-->(A)
ADD A, @Ri ;(A)+(Ri)-->(A)
ADD A, #data ;(A)+data-->(A)
. 源操作数:R你,direct、@Ri或立即数
.目的操作数:累加器A
. 功能:将工作寄存器Rn,片内RAM单元中选择的内容,间接地址存储器中的8位无符号二进制数及立即数与累加器A中的内容相加,想家的结果仍存放在A中。