前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >51单片机汇编程序实例一

51单片机汇编程序实例一

作者头像
用户4645519
发布2020-09-07 10:58:11
8000
发布2020-09-07 10:58:11
举报
文章被收录于专栏:嵌入式学习

已知程序执行前有A=02H,SP=52H,(51H)=FFH,(52H)=aaH. ORG 0000H MOV A, #02H MOV 51H, #0xFF MOV 52H, #0xaa MOV SP, #52H POP DPH ;SP=51H POP DPL ;SP=50H mov dpl, #0xfe mov dph, #0x21 inc dptr inc dptr ;POP SP ;sp 会置为 0 MOV DPTR, #4000H ;DPTR=#4000H RL A ;A=04H(02H*2) MOV B,A ;B=04H MOVC A,@A+DPTR ;查表A=30H ;//这里怎么得出A=30H? PUSH ACC ;SP=51H,(51H)=#30H这里为什么SP=51H?然后(51H)=#30H又是怎么得出的? MOV A,B ;A=04H INC A ;A=05H MOVC A,@A+DPTR ;查表A=50H PUSH ACC ;SP=52H,(52H)=#50H RET ORG 4000H DB 10H,80H,30H,50H,30H,50H end

这就是个查表并把查得数据进行压栈的程序。

ORG 4000H是定义的伪指令,定义了存放表中数据的首地址在4000H,由于数据类型是DB即只占用了一个字节,所以储存单元及其内容是4000H存放数据10H,4001H存放80H……4004H存放30H,4005H存放50H。该伪指令使得编译时地址分配按照以上实现。起初两次弹栈后SP=50H,50H是指堆栈地址。

第一次MOVC A,@A+DPTR,MOVC是个查表指令,它实现把A+DPTR地址所指的数据查找到并赋给累加器A,由于A=04H,此时A+DPTR=4004H,对应数据30H。

PUSH ACC则把累加器A中的数据进行压栈,由于SP=50H,故30H被存在压栈寄存器50H所指地址上,即(50H)=30H。该指令执行完后,SP会自动+1,改为指向地址51H。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2018/08/04 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档