以前的是错误的,不过楼下的也不对,因为400已经不能再用一个字节保存了。
修改后的答复:
ORG 0000H
MOV A,#5 ;把要计算的自变量送入A
MOV DPTR,#TAB
DEC A ;减一对齐
RL A ;A乘以2
MOV B,A ;保护A
MOVC A,@A+DPTR ;高位
MOV R6,A
MOV A,B ;恢复A
INC A
MOVC A,@A+DPTR ;低位
MOV R7,A
SJMP $
ORG 1000H
TAB: DW 1,4,9,16,25,36,49,64,81,100
DW 121,144,169,196,225,256,289,324,400
END
这次应该对了,测试通过……
这个问题的重点在于 MOVC A,@A+PC
MOVC A,@A+PC将它下一条指令的PC值加上累加器A的值作为地址,把程序存储器中这个地址的内容送入累加器A。因比在使甩这条指令时,应先计算出数据表格首地址与MOVC下一条指令地址的偏移量。然后把欲查内容的检索号加上偏移量送入累加器A。使用此指令时应注意,表格长度加上偏移量不得大于256,否则应采用MOVC A,@A+DPTR指令。
例如:
地址 命令
001 MOV A,#03H (占用两个BYTE空间)
003 MOVC A,@A+PC(占用一个BYTE空间)
004 RETU:RET (占用一个BYTE空间)
005 TABLE:DB 01H 04H 09H 10H 19H (每个值占用一个BYTE)
因此在你要求平方的数字放入A,以这个例子来说你是要求3的平方,所以先做MOV A,#03H
之后MOVC A,@A+PC这个指令执行时会先将PC指到下一个指令的地址也就是004的地方,然后再把这个地址也就是004跟刚才A里面的值03相加得到7
这个7的地址存放的就是9这个值,这样我们就得到了平方的值了
以上就是关于编一采用查表法求1~20的平方数子程序。要求x在累加器A中,1<=x<=15,平方数高位存放在R6,低位放在R7全部的内容,包括:编一采用查表法求1~20的平方数子程序。要求x在累加器A中,1<=x<=15,平方数高位存放在R6,低位放在R7、麻烦高手帮忙解释下这汇编语言查表求平方程序、等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)