亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > ASM > 正文

ARM:偽指令、偽操作、C和匯編混合操作、匯編控制LED

2019-11-08 02:12:56
字體:
來源:轉載
供稿:網友
1、偽指令    指令本身不被ARM core所識別    但是匯編器可以把偽指令翻譯成一條或多條ARM core認識的指令1.1 【ldr】---> 重點掌握    作用1:'將立即數存儲到特定寄存器中,(匯編代碼中使用=的)                mov r0, #0x1ff                可以使用                ldr r0, =0x1ff                _start:                    ldr r0, =0x1ff                    ldr r1, =lable  // 將lable對應的地址加載到r1                    b .                    .end                arm-co...-as pesdo.s -o pesdo.o                arm-co...-objdump -S pwsdo.o > 1.asm    作用2:'將lable標簽對應內存中的數據加載到寄存器(匯編代碼中同時沒有使用=和[ ]的)                ldr r2, lable1.2 【adr】    作用:'小范圍地址加載指令   ADR{cond} register, exPR    adr 可以找到標號對應代碼在內存中的位置    adr r3, delay  @// sub r3, pc, #4    delay:            mov r5, r6    1.3 【nop】    作用:'空操作,用于延時    一般會被編譯器翻譯為 mov r0, r02、偽操作    '以 . 開頭的都是偽操作    .arm  /  .code 32   / .thumb  / .code 16   // arm或thumb匯編指令    .equ// 常量定義偽操作            .equ NUM, #0x20            mov r0, NUM    .global  / .globl  // 將一個標號聲明為聲明全局的常量偽操作    .extern  // 聲明外部常量偽操作    .hWord / .short // 半字定義偽操作    .word / .int / .long // 字定義偽操作    .byte // 字節定義偽操作    .string "abcde" / .ascii "abcde" / .asciz "abcde" // 字符串定義偽操作    .space 1024  / .skip 1024 // 固定填充字節內存單元定義偽操作3、使用匯編控制LED    電路原理圖:        控制LED1就是控制GPIOC12    控制GPIOC12: 3 個特殊功能寄存器        GPIOC_OUT          0xc001c000        GPIOC_OUTENB    0xc001c004        GPIOC_ALTFN0      0xc001c020    使用匯編代碼編寫:led.s
/** 代碼演示  - les.s **/.text.global _start.code 32@ 定義三個控制led燈的GPIO寄存器.equ GPIOC_OUT,         0xc001c000.equ GPIOC_OUTENB,      0xc001c004.equ GPIOC_ALTFN0,      0xc001c020_start:        @ 功能選擇 FUNCTION1        ldr r0, =GPIOC_ALTFN0    @ r0=0xc001c020        ldr r1, [r0]             @ r0放到r1作為緩存        mov r2, #0x03        bic r1, r1, r2, lsl #24  @ clear r1 [25:24]        mov r2, #1        orr r1, r1, r2, lsl #24  @ set r1 [24]        str r1, [r0]             @ 寫回r0寄存器GPIOC_ALFN0                @ 配置為輸出功能        ldr r0, =GPIOC_OUTENB    @ r0=0xc001c004        ldr r1, [r0]        mov r2, #1        orr r1, r1, r2, lsl #12  @ set r1 [12]        str r1, [r0]             @ 寫回r0寄存器GPIOC_OUTENB                mov r2, #1loop:        @ 亮燈        ldr r0, =GPIOC_OUT       @ r0=0xc001c000        ldr r1, [r0]        bic r1, r1, r2, lsl #12  @ clear r1 [12]        str r1, [r0]        bl delay                 @ 調用函數delay        @ 滅燈        ldr r0, =GPIOC_OUT       @ r0=0xc001c000        ldr r1, [r0]        orr r1, r1, r2, lsl #12  @ set r1 [12]        str r1, [r0]        bl delay        b loop                   @ b跳轉loop循環 - led間歇閃爍delay:        mov r0, #0x8000000       @ 設置延時,值較C語言大,因速度快delay_loop:        sub r0, r0, #1                   @ r0=r0-1        cmp r0, #0                               @ 比較 r0 與 0        bne delay_loop                   @ 不相等,b跳轉自身循環繼續--        mov pc, lr                               @ bx lr 壓棧.end/** ------------------------------------------------------- **/4、C和匯編的混合調用    ATPCS  // ARM體系結構與編程.pdf  --->P241.        1)使用的滿減棧 FD        2)函數參數的傳遞,前4個參數使用 r0 r1 r2 r3剩余參數使用棧傳遞         3)函數返回時,返回值使用r04.1 匯編中如何調用C函數    xxx.s - 匯編        .extern func   @// 使用extern聲明func標號為外部函數        mov r0, #5     @// r0 里面最終會保存函數的返回值        mov r1, #10        bl func           @// bl 調用func函數,傳遞參數5和10    yyy.c - C程序        int func (int a, int b) {            return a + b;        }4.2 C程序中如何調用匯編函數    yyy.c - C程序        extern int func (int, int);         func (10, 20);    xxx.s - 匯編        .global func       @// 必要條件        func:            add r0, r0, r1            mov pc, lr4.3 C程序中嵌套匯編語法練習:    shell框架程序。    使用匯編實現led.c里面的函數 - led.s。' vi Makefile  新增arm的as編譯匯編文件變量        AS=arm-cortex_a9-linux-gnueabi-as        %.o:%.s                $(AS) $< -o $@
/** 代碼演示 **/.text.global led_init.global led_on.global led_off.code 32.extern uart_puts     @// 打印字符換來做調試使用.equ GPIOC_OUT,     0xc001c000.equ GPIOC_OUTENB,  0xc001c004.equ GPIOC_ALTFN0,  0xc001c020led_init:    stmfd sp!, {lr}        @// 把lr壓棧,保證lr是原來的值    ldr r0, =str1          @// 將str1的首地址放到r0里面    bl uart_puts          @// 調用uart_puts函數來打印顯示    @ 功能選擇 FUNCITON1    ldr r0, =GPIOC_ALTFN0       @ r0=0xc001c020    ldr r1, [r0]    mov r2, #0x03    bic r1, r1, r2, lsl #24     @ clear r1 [25:24]    mov r2, #1    orr r1, r1, r2, lsl #24     @ set r1 [24]    str r1, [r0]    @ 配置為輸出功能    ldr r0, =GPIOC_OUTENB       @ r0=0xc001c004    ldr r1, [r0]    mov r2, #1    orr r1, r1, r2, lsl #12     @ set r1 [12]    str r1, [r0]    mov pc, lr                   @ 壓棧,相當于函數返回return                  @// ldmfd sp!, {lr} 打印調試信息,使用此句彈棧led_on:    mov r2, #1                  @ 把1放在r2寄存器緩沖區    ldr r0, =GPIOC_OUT          @ r0=0xc001c000    ldr r1, [r0]    bic r1, r1, r2, lsl #12     @ clear r1 [12] - 低電平 - 亮    str r1, [r0]    mov pc, lrled_off:    mov r2, #1    ldr r0, =GPIOC_OUT    ldr r1, [r0]    orr r1, r1, r2, lsl #12     @ set r1 [12] - 高電平 - 亮    str r1, [r0]    mov pc, lrstr1:    .string "/nled_init/0".end/** ------------------------------------------------------- **/練習二:    使用匯編指令將strcmp.c替換為strcmp.s的匯編文件。
/** 代碼演示 - strcmp.s **/.text.code 32.global my_strcmpmy_strcmp:cmp_loop:    ldrb r2, [r0], #1        @ // 每次取1個字符出來放到r2寄存器    ldrb r3, [r1], #1        @ // 每次取1個字符出來放到r3寄存器    cmp r2, #0              @ // 判斷r2是否到末尾    beq cmp_end          @ // 如果r2==0到末尾,就跳轉到cmp_end    cmp r2, r3                @ //     beq cmp_loopcmp_end:    sub r0, r2, r3    mov pc, lr                      @ // <==> bx lr.end/** ------------------------------------------------------- **/<tips>$:' cd 01/$:'ctags -R *$:' vi main.c   // 打開最開始的一個文件' 光標移動到函數或者變量名字上'Ctrl + ]         跳轉到定義/實現位置'Ctrl + t         返回上次跳轉之前的位置
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表

圖片精選

亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
综合国产在线观看| 97精品国产97久久久久久免费| 亚洲欧美精品伊人久久| 日韩av电影手机在线| 亚洲精品国产精品国自产在线| 成人免费在线视频网址| 成人黄色片网站| 亚洲自拍偷拍第一页| 国产偷亚洲偷欧美偷精品| 色偷偷综合社区| 成人免费淫片aa视频免费| 亚洲iv一区二区三区| 久久99久久99精品中文字幕| 欧美怡红院视频一区二区三区| 日韩美女视频中文字幕| 国产欧美精品日韩| 色综合久久精品亚洲国产| 欧美性猛交xxxx偷拍洗澡| 成人激情黄色网| 91综合免费在线| 久久伊人精品一区二区三区| 在线观看视频99| 亚洲精品一区二区在线| 51视频国产精品一区二区| 国产精品免费一区二区三区都可以| 91精品视频在线免费观看| 欧美电影免费观看高清| 国产97在线|日韩| 日韩欧美亚洲综合| 91日本视频在线| 欧美日本啪啪无遮挡网站| 亚洲欧美国产日韩天堂区| 国模视频一区二区| 亚洲天堂久久av| 4438全国亚洲精品在线观看视频| 欧美一区二区三区免费视| 国产午夜精品免费一区二区三区| 国产精品久久久久久久久久99| 欧美电影在线观看| 亚洲福利在线看| 91黄色8090| 亚洲欧美日韩精品| 欧美精品一本久久男人的天堂| 亚洲人成欧美中文字幕| 国产suv精品一区二区三区88区| 国产精品成人品| 91超碰caoporn97人人| 日韩在线欧美在线| 国产精品美女主播在线观看纯欲| 欧美日韩精品国产| 91精品中国老女人| 国产一区二区日韩精品欧美精品| 亚洲色图50p| 日韩一区二区三区在线播放| 久久精品国产清自在天天线| 精品视频在线播放色网色视频| 亚洲欧洲高清在线| 国产精品欧美在线| 国产精品视频在线播放| 91免费精品国偷自产在线| 麻豆国产va免费精品高清在线| 日本韩国在线不卡| 国产精品久久久久久久久久三级| 亚洲自拍另类欧美丝袜| 欧美精品videosex极品1| 精品偷拍各种wc美女嘘嘘| 欧美精品中文字幕一区| 亚洲电影成人av99爱色| 2019亚洲日韩新视频| 国产一区视频在线播放| 55夜色66夜色国产精品视频| 亚洲va久久久噜噜噜久久天堂| 国产免费亚洲高清| 精品国产一区二区三区久久久| 久久成人精品一区二区三区| 欧美日韩爱爱视频| 亚洲精品v欧美精品v日韩精品| 欧美日韩亚洲系列| 久久99精品久久久久久噜噜| 麻豆国产va免费精品高清在线| 性欧美暴力猛交69hd| 色先锋资源久久综合5566| 欧美性猛交xxxx乱大交极品| 久久久噜噜噜久久中文字免| 精品国产精品自拍| 久久精品电影网| 神马久久桃色视频| 最近中文字幕2019免费| 亲爱的老师9免费观看全集电视剧| 久久精品成人欧美大片| 国产成人精品电影| 欧美色另类天堂2015| 国产欧美精品在线播放| 91亚洲精品在线观看| 欧美电影免费观看高清| 欧美午夜精品久久久久久浪潮| 国产在线观看不卡| 韩国精品美女www爽爽爽视频| 在线免费观看羞羞视频一区二区| 韩国精品久久久999| 亚洲人成伊人成综合网久久久| 久久99热精品这里久久精品| 久久久精品在线| 91久久精品国产| 亚洲亚裔videos黑人hd| 日韩美女av在线免费观看| 亚洲在线第一页| 欧美成人免费视频| 欧美在线视频网站| 上原亚衣av一区二区三区| 亚洲国产精品久久久久| 欧美性猛交xxxx偷拍洗澡| 国产精品久久久久久久久久ktv| 日本亚洲欧美三级| 成人国产精品一区二区| 亚洲日韩中文字幕| 国内精品一区二区三区| 日韩精品黄色网| 久久99热这里只有精品国产| 欧美香蕉大胸在线视频观看| 亚洲午夜国产成人av电影男同| 亚洲一区二区中文| 亚洲女人天堂成人av在线| 国产精品亚洲美女av网站| 精品久久久91| 亚洲第一免费播放区| 国产视频久久久久久久| 国产精品久久视频| 亚洲综合色av| 精品一区电影国产| 午夜精品蜜臀一区二区三区免费| 午夜精品久久久久久久99热浪潮| 亚洲国产精品va| 国产国产精品人在线视| 国模精品视频一区二区| 国产91精品不卡视频| 懂色av中文一区二区三区天美| 92福利视频午夜1000合集在线观看| 国产精品综合网站| 欧美精品九九久久| 中文字幕久久久av一区| 91香蕉嫩草神马影院在线观看| 91视频-88av| 亚洲精品久久久一区二区三区| 久久成人精品电影| 精品久久久久久国产| 久久亚洲春色中文字幕| 日韩成人中文字幕在线观看| 成人免费福利在线| 在线观看视频99| 91免费版网站入口| 久久91亚洲精品中文字幕奶水| 欧美激情videos| www高清在线视频日韩欧美| 91av视频在线免费观看| 国产成人精品a视频一区www| 久久91精品国产91久久久| 亚洲第一中文字幕| 欧美精品一区在线播放| 7m第一福利500精品视频| 亚洲欧美在线一区| 成人444kkkk在线观看| 国产精品美女久久久久久免费| 在线看日韩欧美|