找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開(kāi)始

帖子
查看: 2181|回復(fù): 0
收起左側(cè)

自己總結(jié)的匯編學(xué)習(xí)小筆記-入門

[復(fù)制鏈接]
ID:270150 發(fā)表于 2018-1-2 13:44 | 顯示全部樓層 |閱讀模式
   實(shí)例: movl     %eax,    %ebx        #32位的EAX寄存器值傳送給32為的EBX寄存器值
       movx,其中 x 可以是下面的字符:
            1,l用于32位的長(zhǎng)字值
            2,w用于16位的字值
            3,b用于8位的字節(jié)值
testAddr    .usect         "MtCtrlP1",               1
MtCtrlP1段保留一個(gè)字
輔助寄存器(XAR0~XAR7)
間接尋址方式:
   mov   acc,     #0
   movl  @xid,    acc
執(zhí)行結(jié)果:xid=0; xid   是32位,不能賦立即數(shù),需通過(guò)acc累加器賦值
mov   @_iqr, #0  
iqr是16位,能賦立即數(shù)
對(duì)定義的變量賦值需要加@,對(duì)內(nèi)部寄存器賦值不需要加@
   mov   acc,     #PWMTPrd<<15
   mov   *(0:CMPR1), ah   ;取ACC的高位
   mov   *(0:CMPR2), ah
   mov   *(0:CMPR3), ah
;AH 16bits High half of ACC 0x0000
;AL 16 bits Low half of ACC 0x0000
LCR  *XARn      使用RPC的間接長(zhǎng)調(diào)用
LCR  22bitAddr   使用RPC的長(zhǎng)調(diào)用,PC=22位程序地址
lretr              程序返回
.def _Delay_asm用來(lái)定義函數(shù)名;
.global  _Delay_asm將函數(shù)名全局化,以便在C文件中能夠調(diào)用;
.sect".delayasmpage"將函數(shù)定位到定義的段中,也可以是.text,可以靈活運(yùn)用;
_Delay_asm:為函數(shù)標(biāo)號(hào),注意一定在前面加上下劃線_否則C文件不能調(diào)用;
LRETR是函數(shù)返回,采用了RPC時(shí)必須用該指令。
.c28_amode    ; 通知編譯器檢查C28x的語(yǔ)法
file:///C:/Users/buaalp/AppData/Local/Temp/msohtmlclip1/01/clip_image002.jpg
符號(hào)定義偽指令
.global,.local,.set,.equ
.global
使得符號(hào)對(duì)連接器可見(jiàn),變?yōu)閷?duì)整個(gè)工程可用的全局變量
.global symbol
.local
表示符號(hào)對(duì)外部不可見(jiàn),只對(duì)本文件可見(jiàn)
.local symbol
.set
給一個(gè)全局變量或局部變量賦值,和.equ的功能一樣
.set symbol expr
.set start, 0x40
.set start, 0x50
mov r1, #start      ;r1里面是0x50
.equ
和.set一樣,只是格式不同
symbol .equ  expr
start  .equ, 0x40
start  .equ, 0x50
mov r1, #start      ;r1里面是0x50
數(shù)據(jù)定義偽指令
.byte,.short,.long,.quad,.float,.string,.asciz,.ascii,.rept
.byte
在存儲(chǔ)器中分配1個(gè)字節(jié),用指定的數(shù)據(jù)對(duì)存儲(chǔ)單元進(jìn)行初始化
label:  .byte  expr    ;label是程序標(biāo)號(hào),expr可以是-128~255的數(shù)字,也可是字符
a:  .byte  #1  ;等價(jià)于C中的char a=1;
.short
在存儲(chǔ)器中分配2個(gè)字節(jié),用指定的數(shù)據(jù)對(duì)存儲(chǔ)單元進(jìn)行初始化
a: .short 0x1234
.word / .long
在存儲(chǔ)器中分配4個(gè)字節(jié),用指定的數(shù)據(jù)對(duì)存儲(chǔ)單元進(jìn)行初始化
a: .word 0x12345678
.long
在存儲(chǔ)器中分配個(gè)字節(jié),用指定的數(shù)據(jù)對(duì)存儲(chǔ)單元進(jìn)行初始化
.quad
在存儲(chǔ)器中分配8個(gè)字節(jié),用指定的數(shù)據(jù)對(duì)存儲(chǔ)單元進(jìn)行初始化
a: .quad 0x12345678 ;等價(jià)于C中的long a=0x1234567812345678
.float
在存儲(chǔ)器中分配4個(gè)字節(jié),用指定的浮點(diǎn)數(shù)據(jù)對(duì)存儲(chǔ)單元進(jìn)行初始化
a: .float 1.11
.space/.skip
用于分配一塊連續(xù)的存儲(chǔ)區(qū)域并初始化為指定的值,如果后面的填充值省略不寫(xiě)則在后面填充為0;
label: .spacesize,expr     ;expr可以是4字節(jié)以內(nèi)的浮點(diǎn)數(shù)
a:  space 8, 0x1
.string
定義一個(gè)字符串,默認(rèn)是string8,還有string16,string32,string64
a: .space "hello world!"
.rept
重復(fù)執(zhí)行接下來(lái)的指令,以.rept開(kāi)始,以.endr結(jié)束
.rept cnt  ;cnt是重復(fù)次數(shù)
...
.endr
匯編控制偽操作
流程控制偽指令主要yy.if .else .endif .macro .endm .exitm
.if .else .endif
.if logical-expression
...
.elseif logical-expression2
...
.else
...
.endif
.macro .endm .exitm
該偽指令可以將一段代碼定義為一個(gè)整體,稱為宏指令,然后就可以在程序中通過(guò)宏指令多次調(diào)用該段代碼,而.exitm指令用來(lái)退出當(dāng)前的宏指令,宏指令可以使用一個(gè)或多個(gè)參數(shù),當(dāng)宏操作被展開(kāi)時(shí),這些參數(shù)被相應(yīng)的值替換。
包含在.macro和。endm之間的指令序列稱為宏定義體。在宏定義體的第一行應(yīng)聲明宏的原型,包含宏名所需的參數(shù),然后就可以在匯編程序中通過(guò)宏名來(lái)調(diào)用該指令序列,在源程序被編譯時(shí),匯編器將宏調(diào)用展開(kāi),用宏定義中的指令序列代替程序中的宏調(diào)用,并將實(shí)際參數(shù)的值傳遞給宏定義中的形式參數(shù)
.macro macroname macargs ...
;code
.endm
雜項(xiàng)
.align      用于使程序當(dāng)前位置滿足一定的對(duì)齊方式
.section    用來(lái)定義一個(gè)段的偽指令
.data       用來(lái)定義一個(gè)數(shù)據(jù)段
.text       用來(lái)定義一個(gè)代碼段
.include    用來(lái)包含一個(gè)頭文件   
.arm        定義以下代碼使用arm指令集編譯
.code 32    同.arm
.code 16    同.thumb
.thumb      定義以下代碼使用thumb指令集編譯
.extern     用于聲明一個(gè)外部符號(hào),用于兼容性其他匯編
.weak       用于聲明一個(gè)弱符號(hào),如果這個(gè)符號(hào)沒(méi)有定義,編譯就忽略,而不會(huì)報(bào)錯(cuò)
.end        表示匯編結(jié)束

回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表