[程序源码] 懂汇编的前辈请指点一下!

[复制链接]
2805|22
 楼主| wang168506 发表于 2015-7-3 10:33 | 显示全部楼层 |阅读模式
首先谢谢各位大侠,汇编不大懂,请大家指点一下:
1、这部分数据是从其他单片机传过来的,也就是说目前这块是接收方,接收后存储于E0-EFH的缓冲区内;
2、发送的时候对其中的7个数据做了校验和 存储于第16个字节内,接收到后也就是在EFH内;
3、麻烦各位大侠看看我的代码正确与否,如图所示;
4、代码目的在于,把接收到7个数据相加,并与EFH作比较。如果相等,说明正确,那么就转存到96  97  94 95 9D 9C 91中去,否则就清零;

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

×
受不了了 发表于 2015-7-3 12:10 | 显示全部楼层
不正确,L76处混淆了间接寻址和直接寻址,高位地址空间直接寻址就寻到寄存器了,后面L201处楼主都意识到这个的呀
    MOV    R0,#0E3H
    MOV    A,@R0
    MOV    B,A
    MOV    R0,#0E4H
    MOV    A,@R0
    ADD    A,B
    MOV    B,A
    MOV    R0,#0E5H
 楼主| wang168506 发表于 2015-7-3 13:28 | 显示全部楼层
受不了了 发表于 2015-7-3 12:10
不正确,L76处混淆了间接寻址和直接寻址,高位地址空间直接寻址就寻到寄存器了,后面L201处楼主都意识到这 ...

程序不是自己写的,反汇编得来的?前辈能说细点么?
受不了了 发表于 2015-7-3 13:39 | 显示全部楼层
又细看了一下,你那个MOV R0,0E3H就有问题,普通51的0E3H单元你根本就读不动写不动,不象反汇编出来的,第一句CLR A本就清零了,后面又来MOV A,#00H清零,写这程序的人是有点诡异

评论

现在的51芯片大部份可以用内部00-ff,少部分可以内置XRAM,因此这一句在很多芯片上可以运行;  发表于 2015-7-4 08:47
 楼主| wang168506 发表于 2015-7-3 13:55 | 显示全部楼层
受不了了 发表于 2015-7-3 13:39
又细看了一下,你那个MOV R0,0E3H就有问题,普通51的0E3H单元你根本就读不动写不动,不象反汇编出来的,第 ...

大侠,给个QQ 可以么?
受不了了 发表于 2015-7-3 14:33 | 显示全部楼层
本帖最后由 受不了了 于 2015-7-3 20:41 编辑

还学汇编来做啥呢,再说这段程序真没必要去细细研究,没啥技术含量
yiyigirl2014 发表于 2015-7-3 16:46 | 显示全部楼层
还学这个干啥啊,没有用的。
coyoteie 发表于 2015-7-3 16:49 | 显示全部楼层
汇编有时候也有用啊.就算STM32 ,MSP430这些用C多的大容量单片机, 有时候调试也要去看它的汇编过程
ningling_21 发表于 2015-7-3 17:02 | 显示全部楼层
看反汇编过来的汇编代码简直就是浪费时间
309030106 发表于 2015-7-3 20:10 | 显示全部楼层
现在的硬件编程基本上都是C了
dongshan 发表于 2015-7-4 08:36 | 显示全部楼层
这段程序完全没有问题,可以实现你需要的功能,另外,楼上有人说错误的,是因为不知道51的地址空间都是独立编址的。
不过程序L201写的有点哆嗦,完全可以用mov @Ri, direct指令实现。比如:
MOV R0,#9BH
MOV @R0,E0H
这样就直接把data: e0h的数据拷贝到data: 9bh中去了。
受不了了 发表于 2015-7-4 11:06 | 显示全部楼层
现在的51芯片大部份可以用内部00-ff,少部分可以内置XRAM,因此这一句在很多芯片上可以运行;  发表于 2015-7-4 08:47
==================
我的意思是那些未被特殊寄存器分配的单元你直接寻址读不动写不动,即无法访问,而你说的是间接寻址访高位地址的RAM,也就书本上说的52比51多出来的RAM
oldzhang 发表于 2015-7-4 13:42 | 显示全部楼层
应该是51单片机程序吧:前面的有错,可以这样:
L76:
        MOV  R7,#7
        MOV  R0,#0E3H
        CLR  A
LOOP1:  ADD  A,@R0
        INC  R0
        DJNZ R7,LOOP1
        MOV  R0,#92H
        MOV  @R0,A
;----------------------------
        MOV  R0,#0EFH
        XRL  A,@R0
        JNZ  L200
        MOV  @R0,#0
        LJMP L201
        ;.
L200:   MOV  R0,#90H
        MOV  @R0,#0
        MOV  R0,#91H
        MOV  @R0,#0
        MOV  R0,#94H
        MOV  @R0,#0
        MOV  R0,#95H
        MOV  @R0,#0
        MOV  R0,#96H
        MOV  @R0,#0
        MOV  R0,#97H
        MOV  @R0,#0
        MOV  R0,#9DH
        MOV  @R0,#0
        RET
       
L201:   ;以下程序基本上没有语句错误       
oldzhang 发表于 2015-7-5 11:41 | 显示全部楼层
不要把LCALL和LJMP搞混了。
 楼主| wang168506 发表于 2015-7-6 14:29 | 显示全部楼层
受不了了 发表于 2015-7-3 13:39
又细看了一下,你那个MOV R0,0E3H就有问题,普通51的0E3H单元你根本就读不动写不动,不象反汇编出来的,第 ...

这个是可以的额,源程序分配的地址!不是我随意写的!
oldzhang 发表于 2015-7-6 21:54 | 显示全部楼层
我写的程序你实验了吗,能用不
 楼主| wang168506 发表于 2015-7-8 17:19 | 显示全部楼层
oldzhang 发表于 2015-7-6 21:54
我写的程序你实验了吗,能用不

恩恩 谢谢你哈
oldzhang 发表于 2015-7-9 23:42 | 显示全部楼层
答非所问,问你能用不能用
 楼主| wang168506 发表于 2015-7-10 10:07 | 显示全部楼层
oldzhang 发表于 2015-7-9 23:42
答非所问,问你能用不能用

呵呵,那是因为照顾你的面子,没法用!所以才说还是要谢谢你!
 楼主| wang168506 发表于 2015-7-10 10:09 | 显示全部楼层
        CLR  A
        MOV  R0,#0E5H
        ADD   A,@R0       
        MOV  R0,#0E6H                                   //
        ADD   A,@R0                                           //
        MOV  R0,#0EAH
        ADD   A,@R0       
        MOV  R0,#0E3H
        ADD   A,@R0       
        MOV  R0,#0E4H
        ADD   A,@R0       
        MOV  R0,#0ECH
        ADD   A,@R0         
        MOV  R0,#0EDH
        ADD   A,@R0


/***********************************************************************************************/

        MOV R0,#0EFH
        MOV B,@R0
        CJNE A,B,L202                                //这个地方这么比较完后,不等跳转L202,相等就继续执行接下来的代码
        LCALL L203
您需要登录后才可以回帖 登录 | 注册

本版积分规则

57

主题

811

帖子

5

粉丝
快速回复 在线客服 返回列表 返回顶部