单片机89C51汇编问题。亲们帮我看看那里出错了

MOVA,#34HMOV@R0,#56HMOVR6,#29HXCHA,R6SWAPAXCHA,R6XCHDA,@R0END最后结果是A=36H,((R0))=54H程序运... MOV A,#34H
MOV @R0,#56H
MOV R6,#29H
XCH A,R6
SWAP A
XCH A,R6
XCHD A,@R0
END
最后结果是A=36H,((R0))=54H
程序运行到倒数第二行,显示A=34H,((R0))=56H.
为什么执行完以后却显示A=30H,((R0))=56H
展开
 我来答
yes__mcu
2013-04-14 · TA获得超过923个赞
知道小有建树答主
回答量:387
采纳率:0%
帮助的人:445万
展开全部
51单片机也可以用C语言编程的。
因为你程序中的R0没有赋初值,仿真的时候RAM的值默认为0的
所以在这一句之后MOV @R0,#56H,R0的值为56H
XCHD A,@R0执行这一句的时候,其实是和56H内值做交换
下面是详细的步骤:
MOV A,#34H ACC = #34H
MOV @R0,#56H 因为R0本来为0,所以这一句就等同于MOV 00H,#56H,也就是R0 = #56H
MOV R6,#29H R6 = #29H
XCH A,R6 ACC = #29H,R6 = #34H
SWAP A ACC = #92H
XCH A,R6 ACC = #34H,R6 = #92H
XCHD A,@R0 ACC和@R0的低4位互换,也就是和地址56H的值互换,56H的内容默认为零,所以执行完这一句之后,ACC = #30H,R0 = #56H,@R0 = #04H
追问
哦,真是太谢谢你了,我知道错在哪儿了,这是老师留的作业:
假设A中内容为34H,R0指向单元内容为56H,执行下面指令后看到结果:
MOV R6,#29H
XCH A,R6
SWAP A
XCH A,R6
XCHD A,@R0 ;结果是A=#36H,((R0))=#54H
那要怎么编写程序才能实现结果是A=#36H,((R0))=#54H
追答
在执行前,需要给R0赋一个确定值的,这个值可以是除R0所在地址和R6所在地址以外的任何值,如果PSW的RS1:RS0 = 00,那么R0可以赋除了00H和06H以外的任意值
MOV R0,#30H ;R0 = #30H
MOV A,#34H ;ACC = #34H
MOV @R0,#56H ; @R0 = #56H,也就是地址30H = #56H
MOV R6,#29H ;R6 = #29H
XCH A,R6 ;ACC = #29H,R6 = #34H
SWAP A ;ACC = #92H
XCH A,R6 ;ACC = #34H,R6 = #92H
XCHD A,@R0 ; ACC = #36H,R0 = #30H,@R0 = #54H,也就是地址30H = #54H
END
lcxsh323
2013-04-14 · TA获得超过1221个赞
知道小有建树答主
回答量:553
采纳率:66%
帮助的人:471万
展开全部
程序运行到倒数第二行(即光标停在第二行,但还没执行),显示A=34H,((R0))=56H。运行完第二行后结果是A=36H,((R0))=54H。
你的最后一句话问的是什么意思?与倒数第三句话表述有矛盾。你都说了最后结果是A=36H,((R0))=54H,然后再问为什么执行完以后却显示A=30H,((R0))=56H?
追问
谢谢您提供帮助。
这是个错误的程序,题目是:
假设A中内容为34H,R0指向单元内容为56H,执行下面指令后看到结果:
MOV R6,#29H
XCH A,R6
SWAP A
XCH A,R6
XCHD A,@R0
结果本来该是A=#36H,((R0))=#54H,但是编错了,执行后结果是A = #30H,R0 = #56H,@R0 = #04H。怎么才能得到A=#36H,((R0))=#54H
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
hewulin8
2013-04-14 · TA获得超过3102个赞
知道大有可为答主
回答量:2042
采纳率:82%
帮助的人:322万
展开全部
程序出错了。但是你最好C语言编程
追问
单片机只能用汇编语言编程
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
zbm1993
2013-04-14
知道答主
回答量:98
采纳率:0%
帮助的人:32.9万
展开全部
之前的程序能发下嘛,R0指针指向的那个单元啊
追问
这个,不知道指向哪儿,作业题目是:
假设A中内容为34H,R0指向单元内容为56H,执行下面指令后看到结果:
MOV R6,#29H
XCH A,R6
SWAP A
XCH A,R6
XCHD A,@R0 ;结果是A=36H,((R0))=54H
题目就是这样,然后我在前面加了几句
程序运行到倒数第二行,显示A=34H,((R0))=56H.

XCHD是半字节交换指令,交换后该是A=36H,((R0))=54H

但是结果却是A=30H,((R0))=56H
我也不知道R0开始指向哪里。。。谢谢
追答
你再在前面加条指令,把R0指向的单元确定下来试试,看能出来那个结果不。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
xuling4253000
2013-04-14 · TA获得超过474个赞
知道小有建树答主
回答量:897
采纳率:13%
帮助的人:159万
展开全部
看不懂了,还是用C语言吧!
追问
单片机只能用汇编语言编程,没办法啊。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(3)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式