登录 免费注册 首页 | 行业黑名单 | 帮助
维库电子市场网
技术交流 | 电路欣赏 | 工控天地 | 数字广电 | 通信技术 | 电源技术 | 测控之家 | EMC技术 | ARM技术 | EDA技术 | PCB技术 | 嵌入式系统
驱动编程 | 集成电路 | 器件替换 | 模拟技术 | 新手园地 | 单 片 机 | DSP技术 | MCU技术 | IC 设计 | IC 产业 | CAN-bus/DeviceNe

汇编存在的意义?

作者:祈祷之龙 栏目:ARM技术
汇编存在的意义?
我前几天刚买了块2104板子,模仿书上P110的例子写了一小段,用汇编内嵌编译通过,可没出现预期效果,大家帮忙看看问题。
而用C的就没错。
本人是在校生,汇编除了对硬件理解有帮助外,到底有什么意义,完全用C已经足够了,感觉没必要在汇编上浪费太多时间,希望高手指点指点,谢谢!
///////////////////////////汇编///////////////////////////////////////
#include <stdio.h>

//字符串比较函数
int my_strcmp(const CHAR * str1,CHAR * str2)
{
    int ch1;
    int ch2;
    int s;
    __asm
    {
    loop:
#ifndef __thumb
        //ARM指令
        LDRB    ch1,[str1],#1
        LDRB    ch2,[str2],#1
#else
        //Thumb指令
        LDRB    ch1,[str1]
        ADD        str1,#1
        LDRB    ch2,[str2]
        ADD        str2,#1
#endif    
        CMP        ch1,ch2
        CMPEQ    ch1,#0
        CMPNE    ch2,#0
        B        loop        //循环
        
        CMP        ch1,#0
        CMPNE    ch2,#0
        SUB        s,ch1,ch2
        
        CMP        ch1,#0
        SUB        s,ch1,#0        
        
        RSB        s,ch2,#0
    }        
        return s;
}

//主函数
int main(void)
{
    const CHAR * a="123";
    CHAR b[5]="1234";
    //入口参数设置
    __asm
    {
        MOV R0,a
        MOV R1,b
        BL    my_strcmp,{R0,R1}
    }
    
    //输出
    if(my_strcmp(a,b)>0)
        printf("1");
    else
        if(my_strcmp(a,b)<0)
            printf("-1");
        else
            printf("0");
}

////////////////////////////////////C////////////////////////////////
#include <stdio.h>

//字符串比较函数
strcmp(CHAR * str1,CHAR * str2)
{
    int i;
    i=0;
    while((*(str1+i)==*(str2+i))&&(*(str1+i))&&(*(str2+i)))
        i++;
    if((*(str1+i))&&(*(str2+i)))
        return *(str1+i)-*(str2+i);
    else
        if(*(str1+i))
            return *(str1+i);
        else
            return (0-*(str2+i));
}

//主函数
main()
{
    CHAR a[10]="1234";
    CHAR b[10]="1234";
    strcmp(a,b);
    if(strcmp(a,b)>0)
        printf("%s is larger than %s",a,b);
    else
        if(strcmp(a,b)<0)
            printf("%s is smaller than %s",a,b);
        else
            printf("%s is equal to %s",a,b);
}

2楼: >>参与讨论
videohome
汇编,能干什么?搞笑,一看就不知道是做嵌入式的
Windows操作系统的底层函数是用汇编写的,
Linux操作系统底层函数是用汇编写的
ECOS操作系统与硬件有关部分是汇编写的
UCOS操作系统与硬件有关部分是汇编写的
VxWorks...
......是用汇编写的,太多了

你可以不理解汇编,可以不理会硬件工作原理,如果你不写程序的话,就算写程序也写不出好程序

3楼: >>参与讨论
祈祷之龙
-_-!
楼上的兄弟说话真犀利啊。
可我没说汇编不好啊~~~
只是认为,一般的项目用C已经完全可以编写了,包括与硬件相关的部分。
而且,C的可读性很高,即使设计者离开了,后来者也可以接手快点......
汇编只在代码效率上出色,人的作用在于用语言在机器上实现自己的想法
而已。过多的精力放在汇编的寄存器操作上,几乎是把机器的活也给做了,
汇编从某种意义上说,更接近于机器,而非人......
这对于开发并不利......
可能某些比较牛的人,开发汇编程序已经比较熟练了,另当别伦。不过这种牛人,中国应该不会很多。甚至,我看到有些“专家”出的书,其实都是外国原版的翻译本,可偏偏不写是翻译本,硬写成是自己的研究成果,汗~~~
还有,高手能帮我看看上面的汇编出错在哪里?谢谢!


4楼: >>参与讨论
深思
那么,只有会汇编的给你搭好平台,你才能过。
没有人去写底层汇编(C完成不了),那么平台就搭不起来。
而你,换谁都能做。不写底层,换谁都不行。
所以,搭建平台的薪水比你高。没他不行,没你却可以。

5楼: >>参与讨论
pubstar
精辟
 
6楼: >>参与讨论
cetclyb
哈哈哈哈,做硬件就更高吧!?
 
7楼: >>参与讨论
videohome
我说的就是汇编的义意啊!
 
8楼: >>参与讨论
foyyof
没有汇编,你的中断怎么嵌套啊?
 
9楼: >>参与讨论
and
汇编的意义在于
你做在驾驶位上,手握方向盘,问道:“汽车轮子的意义是什么?”。
虽然用C的时候,可以看不到汇编,但它就是“存在于那里的”。

参与讨论
昵称:
讨论内容:
 
 
相关帖子
请教,ADS1.2编译不支持汉字,怎么办?
2100的反汇编
应该看完什么东西才可以上机练习呢?
高手帮我看看!!
问:关于实验程序,为什么有的用了remap,有的没用?
免费注册为维库电子开发网会员,参与电子工程师社区讨论,点此进入


Copyright © 1998-2006 www.dzsc.com 浙ICP证030469号