×
单片机 > 单片机程序设计 > 详情

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

发布时间:2020-06-08 发布时间:
|
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




『本文转载自网络,版权归原作者所有,如有侵权请联系删除』

热门文章 更多
浅谈AVR中定时器几种工作模式