打印

请教汇编 达人 51汇编转C

[复制链接]
1758|11
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
itelectron|  楼主 | 2014-3-4 22:20 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 itelectron 于 2014-3-5 10:41 编辑

        MOV  A,31H                                       
        XRL  A,41H                        
        JNZ  LOOP   //A=1跳转LOOP                       
        MOV  A,30H                                                   
        XRL  A,40H                        

LOOP:   JZ   LOOP2  //A=0跳转LOOP2                                    
        MOV  40,30H                                                   
        MOV  41,31H                        
LOOP2:  SETB P1_0        
=========================================
        MOV  A,31H                                       
        XRL  A,41H                        
        JNZ  LOOP  //A=1跳转LOOP                       
        MOV  A,30H                                                   
        XRL  A,40H                        

        JZ   LOOP2 //A=0跳转LOOP2                                       
LOOP:   MOV  40,30H                                                   
        MOV  41,31H                        
LOOP2:  SETB P1_0

相关帖子

沙发
创隆电子| | 2014-3-4 22:22 | 只看该作者
不一样

使用特权

评论回复
板凳
创隆电子| | 2014-3-4 22:23 | 只看该作者
如果有跳到LOOP的语句,那坑底不一样的

使用特权

评论回复
地板
yewuyi| | 2014-3-4 23:49 | 只看该作者
当然不一样

使用特权

评论回复
5
itelectron|  楼主 | 2014-3-5 08:18 | 只看该作者
创隆电子 发表于 2014-3-4 22:22
不一样

就只有这么点程序
我 感觉结果是 一样的

使用特权

评论回复
6
itelectron|  楼主 | 2014-3-5 08:30 | 只看该作者
本帖最后由 itelectron 于 2014-3-6 18:32 编辑

   第2段用C语言方便实现/第1段就不知道了 。   :(   

        MOV  A,31H
        XRL  A,41H   
        JNZ  LOOP
        MOV  A,30H
        XRL  A,40H

        JZ   LOOP2
LOOP:   MOV  40,30H   
        MOV  41,31H     
LOOP2:  SETB P1_0  
=======================

sfr   P1     = 0x90;
unsigned char  data Ram30 _at_ 0x30;
unsigned char  data Ram31 _at_ 0x31;
unsigned char  data Ram40 _at_ 0x40;
unsigned char  data Ram41 _at_ 0x41;

void fun()
{
  if((Ram31^Ram41)||(Ram30^Ram40))
  {
   Ram40=Ram30;
   Ram41=Ram31;
  }        
  P1=1;
}

使用特权

评论回复
7
itelectron|  楼主 | 2014-3-5 22:47 | 只看该作者

        MOV  A,31H                                       
        XRL  A,41H                        
        JNZ  LOOP   //A=1跳转LOOP                       
        MOV  A,30H                                                   
        XRL  A,40H                        

LOOP:   JZ   LOOP2  //A=0跳转LOOP2                                    
        MOV  40,30H                                                   
        MOV  41,31H                        
LOOP2:  SETB P1_0
====================================
请教这段如何用C实现

使用特权

评论回复
8
cjseng| | 2014-3-6 00:02 | 只看该作者
itelectron 发表于 2014-3-5 22:47
MOV  A,31H                                       
        XRL  A,41H                       ...

if((ram31^ram41)!=0)
{
ram40=ram30;
ram41=ram31;
}

else
{
if((ram30^ram40)!=0)
{
  ram40=ram30;
  ram41=ram31;
}
}

P1|=0x01;

使用特权

评论回复
9
itelectron|  楼主 | 2014-3-6 18:40 | 只看该作者
本帖最后由 itelectron 于 2014-3-6 18:43 编辑

            MOV      A,Ram31(0x31)
            XRL      A,Ram41(0x41)
            JZ       C:000B
            SJMP     C:0011
C:0x000B    MOV      A,Ram30(0x30)
            XRL      A,Ram40(0x40)
            JZ       C:0017
C:0x0011    MOV      Ram40(0x40),Ram30(0x30)
            MOV      Ram41(0x41),Ram31(0x31)
C:0x0017    ORL      P1(0x90),#0x01
            RET   
================
楼上的 反汇编 /感觉还 是 不一样

使用特权

评论回复
10
itelectron|  楼主 | 2014-3-9 08:28 | 只看该作者
    MOV  A,31H                                       
        XRL  A,41H                        
        JNZ  LOOP   //A=1跳转LOOP                       
        MOV  A,30H                                                   
        XRL  A,40H                        

LOOP:   JZ   LOOP2  //A=0跳转LOOP2                                    
        MOV  40,30H                                                   
        MOV  41,31H                        
LOOP2:  SETB P1_0
====================================
请教这段如何用C实现

使用特权

评论回复
11
ningling_21| | 2014-3-9 08:57 | 只看该作者
ACC=Ram31;
ACC=ACC^Ram41;
if(ACC!=0)
{
   goto loop;
}
else
{
   ACC=Ram30;
   ACC=ACC^Ram40;
loop:if(ACC==0)
   {
      goto loop2;
      Ram40=Ram30;
      Ram41=Ram31;
   }
}

loop2: P1_1 =1;

使用特权

评论回复
12
明月小厨| | 2014-3-9 19:59 | 只看该作者
MOV  A,31H                                       
XRL  A,41H                        
JNZ  LOOP   //A=1跳转LOOP ;

这前二句是废话,直接优化掉了;      

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

个人签名:MARK: zhi kan ji shu

274

主题

2762

帖子

8

粉丝