新聞中心

        EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計應用 > ARM 匯編與 C 語言相互調(diào)用實驗

        ARM 匯編與 C 語言相互調(diào)用實驗

        作者: 時間:2016-11-11 來源:網(wǎng)絡 收藏
        4. 7 匯編C 語言相互調(diào)用實驗

        4. 7. 1 實驗目的

        本文引用地址:http://www.104case.com/article/201611/316816.htm

        閱讀S3C2410 啟動代碼,觀察處理器啟動過程;

        學會使用 MDK 集成開發(fā)環(huán)境輔助窗口來分析判斷調(diào)試過程和結(jié)果;

        學會在 MDK 集成開發(fā)環(huán)境中編寫、編譯與調(diào)試匯編和C 語言相互調(diào)用的程序。

        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 開發(fā)實驗與實踐――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



        評論


        技術(shù)專區(qū)

        關(guān)閉
        主站蜘蛛池模板: 平遥县| 潞城市| 鲁甸县| 囊谦县| 石泉县| 井冈山市| 喜德县| 娄烦县| 福清市| 理塘县| 德钦县| 玉树县| 巨鹿县| 丰宁| 尚义县| 兰西县| 清河县| 临泽县| 客服| 永善县| 郧西县| 安仁县| 柘城县| 金山区| 日喀则市| 潮州市| 土默特左旗| 金平| 威远县| 沽源县| 镇坪县| 巴彦淖尔市| 涞水县| 伊川县| 禄劝| 通辽市| 建湖县| 柘荣县| 开封市| 扶沟县| 登封市|