ARM 汇编与 C 语言相互调用实验

发布者:喜从中来最新更新时间:2016-08-06 来源: eefocus关键字:ARM  汇编  语言  相互调用 手机看文章 扫描二维码
随时随地手机看文章
4. 7  汇编与 C 语言相互调用实验 

4. 7. 1  实验目的 

     阅读S3C2410 启动代码,观察处理器启动过程;

     学会使用 MDK 集成开发环境辅助窗口来分析判断调试过程和结果;

     学会在 MDK 集成开发环境中编写、编译与调试汇编和C 语言相互调用的程序。

4. 7. 6  实验参考程序 

     1.randtest.c 参考源代码: 

        /********************************************************************************************* 
        * File:  randtest.c

        * Author: Wuhan R&D Center, embest 
        * Desc: Random number generator demo program

        *       Calls assembler function 'randomnumber' defined in random.s

        * History:

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

        /*------------------------------------------------------------------------------------------*/

        /*                      extern function                           */

        /*------------------------------------------------------------------------------------------*/

        extern unsigned int randomnumber( void );

        unsigned int unRandom[10];

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

        * name:       main

        * func:       c code entry

        * para:       none

        * ret:        none

        * modify:

* comment:

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

           int __main()

           {

                unsigned int i,nTemp;

                for( i = 0; i < 10; i++ )

                {

                      nTemp = randomnumber();

                      unRandom[i] = nTemp;

                }

                while(1);

           }

       2.random.s 参考源代码: 

           ;#************************************************************************************************************ 
           ;# File: random.s                                                                                                        *

           ;# Author:         Wuhan R&D Center, embest                                                                             * 
           ;# Desc:           Random number generator                                                                               *

           ;#                This uses a 33-bit feedback shift register to generate a pseudo-randomly                                *

           ;#                ordered sequence of numbers which repeats in a cycle of length 2^33 - 1                                 *

           ;#                NOTE: randomseed should not be set to 0, otherwise a zero will be generated                              *

           ;#                        continuously (not particularly random!).                                                        *

           ;#                This is a good application of direct ARM assembler, because the 33-bit                                  *

           ;#                shift register can be implemented using RRX (which uses reg + carry).                                    *

           ;#                An ANSI C version would be less efficient as the compiler would not use RRX.                           *

           ;#                AREA         |Random$$code|, CODE, READONLY                                                             *

           ;# History:                                                                                                              *

           ;#*************************************************************************************************************

           ;/*------------------------------------------------------------------------------------------*/

           ;/*                            global symbol define                                    */

           ;/*------------------------------------------------------------------------------------------*/

                global randomnumber

                global seed

           ;/*------------------------------------------------------------------------------------------*/

           ;/*                                   code                                             */

           ;/*------------------------------------------------------------------------------------------*/

                AREA BLOCK, code , readonly

                EXPORT randomnumber

           randomnumber

           ;#   on exit:

           ;#   a1 = low 32-bits of pseudo-random number

           ;#   a2 = high bit (if you want to know it)

                ldr       ip, seedpointer

基于S3C2410 嵌入式 MDK 开发实验与实践――EduKit 系列丛书 
                                    Email:support@edukit.com.cn  Tel:0755-25631365

            ldmia  ip, {a1, a2}

            tst   a2, a2, lsr #1          ;/* to bit into carry */

            movs    a3, a1, rrx           ;/* 33-bit rotate right */

            adc    a2, a2, a2             ;/* carry into LSB of a2 */

            eor    a3, a3, a1, lsl #12    ;/* (involved!)       */

            eor    a1, a3, a3, lsr #20    ;/* (similarly involved!) */

            stmia  ip, {a1, a2}

            BX lr

        seedpointer

            DCD    seed

        seed

            DCD    0x55555555

            DCD    0x55555555

            END

关键字:ARM  汇编  语言  相互调用 引用地址:ARM 汇编与 C 语言相互调用实验

上一篇:ARM平台上实现Linux PPP拨号
下一篇:Flash与S3C44B0X连接时地址线为什么要偏移一位

推荐阅读最新更新时间:2024-03-16 15:03

浅谈ARM体系CPU的7种工作模式
  ARM有37个寄存器,其中31个通用寄存器,6个状态寄存器。本文主要讨论的是ARM体系的CPU的7种工作模式。   一、存储器格式(字对齐)   Arm体系结构将存储器看做是从零地址开始的字节的线性组合。从零字节到三字节放置第一个存储的字(32位)数据,从第四个字节到第七个字节放置第二个存储的字数据,一次排列。作为32位的微处理器,arm体系结构所支持的最大寻址空间为4GB。   存储器格式   1、大端格式:高字节在低地址,低字节在高地址;   2、小端格式:高字节在高地址,低字节在低地址。   指令长度   Arm微处理器的指令长度是32位的,也可以为16位(thumb状态下)。Arm微处理器中支持字节(8位),半
[单片机]
浅谈<font color='red'>ARM</font>体系CPU的7种工作模式
Azure ARM (4) 开始创建ARM Resource Group并创建存储账户
  好了,接下来我们开始创建Azure Resource Group。   1.我们先登录Azure New Portal,地址是: https://portal.azure.cn/   2.登录以后,我们在用户界面的右上角选择相应的Azure订阅,如下图:   我们还可以在下图中,设置New Portal的显示语言等信息。      我们还可以点击下图红色区域,对左侧的菜单栏进行缩放。      另外,我们需要经常使用的Azure资源,比如虚拟机,存储等,我们可以点击右侧的星号,把这些常用的Azure资源加入到左侧的菜单栏里。如下图:      3.这里特别强调一下。如果我们在ASM模式下,创建过Azure资源
[单片机]
Azure <font color='red'>ARM</font> (4) 开始创建<font color='red'>ARM</font> Resource Group并创建存储账户
全面解析STC89C52单片机的LED调光系统电路
摘要: 在场效应管关断后让LED的负极电压升高,使得LED关闭。当场效应管导通时,LED的负极电压被拉低,使得LED发光。PWM调节方式使得驱动电路更简单,降低了制造成本。 LED 的排列方式及LED 光源的规范决定着基本的驱动器要求。 LED驱动器的主要功能就是在一定的工作条件范围下限制流过LED的电流,而无论输入及输出电压如何变化。最常用的是采用变压器来进行电气隔离。下文论述了LED照明设计需要考虑的调光因素。 正是因为调光的要求所以驱动LED 面临着不少挑战,如正向电压会随着温度、电流的变化而变化,而不同个体、不同批次、不同供应商的LED 正向电压也会有差异;另外,LED 的“色点”也会随着电流及温度的变化而漂移。
[单片机]
全面解析STC89<font color='red'>C</font>52单片机的LED调光系统电路
S3c2440ARM异常与中断体系详解7---按键中断程序示例完善
首先main.c中 我们初始化中断控制器 初始化中断源 假设按键按键就会产生中断,CPU就会跳到start.S 执行 .text .global _start _start: b reset /*vector 0 一上电复位,是从0地址开始执行,跳到reset*/ ldr pc, und_addr /*vector 4 如果发生未定义指令异常,硬件就会在自动跳转0x04地址未定义指令异常处,执行do_und*/ ldr pc,swi_addr /* vector 8 : swi */ IRQ模式的话跳到0x00000018地方 .text .global _start _start: b rese
[单片机]
S3<font color='red'>c</font>2440<font color='red'>ARM</font>异常与中断体系详解7---按键中断程序示例完善
ARM汇编中LDR和ADR的区别
ldr r0, _start adr r0, _start ldr r0, =_start nop mov pc, lr _start: nop 编译的时候设置 RO 为 0x0c008000 0c008000 _start-0x14 : c008000: e59f000c ldr r0, ; c008014 _start c008004: e28f0008 add r0, pc, #8 ; 0x8 c008008: e59f0008 l
[单片机]
外媒:英政府或将阻止英伟达收购Arm
英伟达上个月正式宣布将以400亿美元的价格从软银手中收购Arm。此前有证券机构认为,这笔收购案所面临的最大挑战将会是中国监管机构的批准。 现据外媒的最新消息,英国政府可能会阻止这项交易。批评人士警告称,该交易将对就业构成风险,还有可能威胁Arm在全球的地位。 该报道指出,英国文化部长奥利弗•道登(Oliver Dowden)现在主要负责这项交易,并有权下令英国竞争与市场管理局(Competition and Markets Authority)展开调查。 到目前为止,Dowden一直保持沉默。但据消息人士透露,英国商务部门也在权衡英伟达收购Arm的利弊。 一位发言人指出,“Arm是英国科技行业的重要组成部分,为英国经济做出了重
[手机便携]
S3C2440 Linux驱动移植——AT24C02(EEPROM)驱动
开发板:TQ2440 内核:Linux 2.6.32 PC OS:Ubuntu 11.04 1.配置内核 打开I2C功能: 打开杂项设备,该选项打开后,EEPROM也就打开了。 2. 修改代码 修改文件: linux/arch/arm/mach-s3c2440/mach-smdk2440.c 增加如下代码片段: #include linux/i2c/at24.h static struct at24_platform_data at24c02 = { .byte_len = SZ_2K / 8, .page_size = 8, .flags = 0, };
[单片机]
S3<font color='red'>C</font>2440 Linux驱动移植——AT24<font color='red'>C</font>02(EEPROM)驱动
三星宣布与Arm联合优化下一代基于GAA的Cortex-X CPU
三星电子日前宣布,将与Arm合作,提供基于三星代工厂最新的全环栅极(GAA)工艺技术开发的优化下一代Arm Cortex-X CPU。该计划建立在三星代工厂与Arm多年合作伙伴关系的基础上,三星代工厂已经在各种工艺节点上生产了数百万带有Arm CPU IP的器件。 此次合作为三星和Arm之间的一系列公告和计划创新奠定了基础。两家公司制定了大胆的计划,为下一代数据中心和基础设施定制芯片重塑2纳米(nm) GAA,以及推出将彻底改变未来人工智能(AI)移动计算市场的突破性AI小芯片解决方案。 三星电子执行副总裁兼Foundry负责人Jongwook Kye表示:“随着我们继续进入Gen AI时代,我们很高兴能够扩大与Arm的合
[半导体设计/制造]
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved