请教51汇编子程序 问题(汇编很吃力啊)

[复制链接]
6902|47
 楼主| Periodic 发表于 2012-2-24 17:26 | 显示全部楼层 |阅读模式
本帖最后由 Periodic 于 2012-2-25 08:16 编辑

MOV  R7,41H   
MOV  R6,40H   
MOV  R5,#0AH   
LCALL  FUN_1   
MOV  43H,R6   
MOV  44H,R7   
;=================子程序====================================================
FUN_1:
         SETB  C   
         MOV  R3,#00H   
         MOV  R4,#11H     ;左移R7  R6 11位
LOOP1:
         CPL  C   
         MOV  A,R7  
         RLC  A   
         MOV  R7,A   
         MOV  A,R6   
         RLC  A   
         MOV  R6,A   
         MOV  A,R3   
         RLC  A   
         MOV  R3,A              ;R3<-R6<-R7
         DJNZ  R4,LOOP2     ;R4-1!=0转移
         RRC  A   
         MOV  10H,A  
         RET
;------------------------------------------------      
LOOP2:
         JC  LOOP3   
         SUBB  A,R5        ;A= A-10
         JC  LOOP1   
         MOV  R3,A  
         SJMP  LOOP1
LOOP3:
         CLR  C   
         SUBB  A,R5   ;A= A-10
         CLR  C   
         MOV  R3,A  
         SJMP  LOOP1  
;========================================
xxdcq 发表于 2012-2-24 17:37 | 显示全部楼层
什么问题?
这好像是一个双字节除以单字节的除法子程序
NE5532 发表于 2012-2-24 20:03 | 显示全部楼层
你们单位写汇编程序不写注释?
 楼主| Periodic 发表于 2012-2-25 08:11 | 显示全部楼层
小地方啊! 是前人写的,
 楼主| Periodic 发表于 2012-2-25 08:15 | 显示全部楼层
我自己看 相类似  Q格式转换   一个双字节左移动程序
chenczy 发表于 2012-2-25 09:40 | 显示全部楼层
有什么问题啊?不会叫人帮你分释程序吧?(先说明我还没看程序)
刘前辈 发表于 2012-2-25 12:25 | 显示全部楼层
LZ不必分析了,这是C51程序编译结果。根本不是前任自己写的汇编。—— 一般人都用这种方式保护程序。C51 源程序自己拿走不提供,给个汇编谎称源代码。

看得懂硬件图纸,要求什么功能自己写一个C程序是很简单的事。—— 如此保护知识产权太小儿科了。后人重新写的一定比前任更好。


、、
 楼主| Periodic 发表于 2012-2-25 12:49 | 显示全部楼层
C51编译的?
 楼主| Periodic 发表于 2012-2-25 12:50 | 显示全部楼层
怎么看出来的 啊!
刘前辈 发表于 2012-2-25 14:15 | 显示全部楼层
MOV  R7,41H   
MOV  R6,40H   
MOV  R5,#0AH   
LCALL  FUN_1   

呵呵,这是C51和A51之间的通信协议,R6/R7,R5 明显是C51函数 FUN1(int, uchar)的编译结果; 如若用汇编语言写程序可不需要这么规范的。


、、
 楼主| Periodic 发表于 2012-2-25 14:22 | 显示全部楼层
原来如此  LZ不愧号称 前辈 51古董级别的东西了,我是回过头来学汇编 工作需要:L
 楼主| Periodic 发表于 2012-2-25 14:25 | 显示全部楼层
不过这个程序 还是需要 看的   前人 的东西 也许值得学习  要不然前人怎么 那么保密 哈哈 关键是 算法
 楼主| Periodic 发表于 2012-2-25 14:26 | 显示全部楼层
这个51实现 了 现在那些用DSP实现 的功能,感觉这个程序 值得一读。
 楼主| Periodic 发表于 2012-2-25 14:30 | 显示全部楼层
还有个问题 请教刘前辈  能不能看出 用的什么 开发 环境啊????
 楼主| Periodic 发表于 2012-2-25 14:30 | 显示全部楼层
KEIL  还是 IAR?还是。。。。。
刘前辈 发表于 2012-2-25 15:57 | 显示全部楼层
本帖最后由 刘前辈 于 2012-2-25 16:36 编辑

典型的Keil  C51。用uV2环境。

     前任用C51写的,LZ去分析编译结果代码?——那您最好先学过《编译原理》。像小I 现在正在学的那样,小I 是计算机软件专业毕业的,刚毕业就在北大方正干过。

         LZ若是计算机软件毕业,学过《编译原理》的,不会来干单片机控制吧?还是做软件银子多,轻易10K。问问小I ,北大方正一个月拿多少?

         干单片机这行,人太多了。中专生都不少。“物以博为贱”了。

       不过,向高发展,人才很稀,例如单片机联网技术——现场总线。都要求硕士、博士毕业的,一堆硕博20年也没看做出什么……仍然招聘,课题启动基金20W……


、、



、、
 楼主| Periodic 发表于 2012-2-25 16:11 | 显示全部楼层
本帖最后由 Periodic 于 2012-2-25 16:12 编辑

再请教下 是如何看出来的 :handshake
刘前辈 发表于 2012-2-25 16:25 | 显示全部楼层
请看一下
徐爱钧,彭秀华写的《Keil  Cx51 V7.0单片机高级语言编程与uVision2应用实践》

& 9.7 Cx51编译器与汇编语言程序的接口

我这有电子版,等下贴一节出来。


、、
刘前辈 发表于 2012-2-25 16:31 | 显示全部楼层
本帖最后由 刘前辈 于 2012-2-25 16:47 编辑

还有一个很简单的实验,写一个虚拟空函数:
说明 void FUN_1(int,char);

定义 void  FUN_1 ( int  val,  char   num )
{
code……
   }

调用  FUN_1(0x4041,10);

编译一下,看看结果是不是:
MOV  R7,41H   
MOV  R6,40H   
MOV  R5,#0AH   
LCALL  FUN_1   


肯定一样!


//
 楼主| Periodic 发表于 2012-2-25 19:49 | 显示全部楼层
以前学三星2440 的时候  学过编译原理!  明白了  就是前任把  C代码的反汇编留下了。
那我就把 汇编 变成C吧!:L
您需要登录后才可以回帖 登录 | 注册

本版积分规则

1

主题

670

帖子

2

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