51单片机汇编中,使用MOV DPTR,#TAB,可以查表,但是能不能用DPTR这个指针来修改TAB表呢?

51单片机汇编中,使用MOV DPTR,#TAB,可以查表,但是能不能用DPTR这个指针来修改TAB表呢?,第1张

不能,51不支持在应用可编程,如果需要修改的话只能放到数据段里。至少51的片内flash是不能被程序改写的。MOV DPTR,#TAB,只是给DPTR赋值,访问数据要通过MOVC(程序存储器)或MOVX(数据存储器),其中MOVC是只读的,根本没有写指令。如果需要不断读取和修改TAB表,可以把表建在外部RAM里,程序启动是先从ROM里载入初始值。

ORG 1000H ;伪指令,指定后面的程序从1000H单元开始存放,本指令不占用存储单元。
TAB1 EQU 1234H ;伪指令,定义程序中出现的TAB1的值是1234H,本指令不占用存储单元。
TAB2 EQU 3000H ;伪指令,定义程序中出现的TAB2的值是3000H,本指令不占用存储单元。
DB “MAIN” ;伪指令,指定1000H--1003H单元依次存放四个大写字母 M A I N 的ASCII码值4DH, 41H, 49H, 4EH。
DW TAB1,TAB2,70H ;伪指令,指定1004H--1008H单元依次存放TAB1,TAB2,0070H。即1234H,3000H,0070H(因为DW定义的是字,故字节70H前要加00H变成字0070H),也就是12H,34H,30H,00H,00H,70H 。
所以然答案为:4DH, 41H, 49H, 4EH, 12H,34H,30H,00H,00H,70H

MOV DPTR,#TAB
MOVC A,@A+DPTR
CPL A ;理解这句
MOV P0,A
MOV DPTR,#TAB 这句是将TAB处的内容的地址移入DPTR寄存器(51单片机中唯一的一个16位的)
MOVC A,@A+DPTR 这句将(A寄存器中的内容+DPTR)中的地址处的数据移入A
比如此时 A=0,DPTR=300,这时就将300+0寄存器里的数据移到A
如果A=2,DPTR=300,这时就将(300+2)寄存器里的数据移到A
CPL A ; A求反,
MOV P0,A 将A的值移入P0口,用数码管等显示出来结果

cpu内部结构!辅助运算器工作的编码器!节约时间的,程序在处理的时候从累加器A简称ACC,累加器A为8位寄存器,通过暂存器与ALU相连,是最常用的寄存器,功能较多,既可以存放 *** 作数,也可以存放中间结果,一些双 *** 作数指令中!


欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/yw/13217142.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-06-22
下一篇 2023-06-22

发表评论

登录后才能评论

评论列表(0条)

保存