版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
第4章ARM北.編語舌特性
與編程基礎(chǔ)
'■本章重點(diǎn):
■JI----------------------------
■⑴ARM匯編器提供的匯編語言特性,包括行格
式、預(yù)定義名和內(nèi)建變量、偽指令、符號(hào)、指
示符、表達(dá)式和操作符等,以及它們的使用;
■⑵ARM匯編語言編程基礎(chǔ),包括調(diào)用子程序、
條件執(zhí)行、裝入常數(shù)和地址到寄存器、裝入和
存儲(chǔ)多個(gè)寄存器、多路分支等內(nèi)容,以及對(duì)應(yīng)
的程序代碼。
2
補(bǔ)充知識(shí):
ADSIDE(集成開發(fā)環(huán)境)
■1ADS工具包的組成
-2ADS開發(fā)工具集
■3ARM映像文件
3
補(bǔ)充知識(shí):
ADSIDE(集成開發(fā)環(huán)境)
■ARM應(yīng)用軟件的開發(fā)工具根據(jù)功能的不同,可
以分為編輯軟件、編譯軟件、匯編軟件、鏈接
軟件、調(diào)試軟件、嵌入式實(shí)時(shí)操作系統(tǒng)、函數(shù)
庫、評(píng)估板,JTAG仿真器以及在線仿真器等。
■選擇合適的開發(fā)工具可以加快開發(fā)進(jìn)度,節(jié)省
開發(fā)成本。
4
1ADS工具包的組成
■ADS是ARM公司推出的集成開發(fā)工具包,是專
門用于ARM相關(guān)應(yīng)用開發(fā)和調(diào)試的綜合性軟件。
目前常用的版本是L2,在功能和易用性上比
早期的SDT都有提高,是一款功能強(qiáng)大又易于
使用的開發(fā)工具。
■ARMADS包含有CodeWarriorIDE、編譯器、
鏈接器、調(diào)試器、指令集模擬器、ARM開發(fā)包
和應(yīng)用庫等部分,可以用ADS來開發(fā)、編譯、
調(diào)試采用包括C、C++和ARM匯編語言編寫的
程序。
5
ADS工具包的組成(一)
■1.CodeWarriorIDE
■CodeWarriorIDE(集成開發(fā)環(huán)境)包括工
程管理器、代碼生成接口、語法敏感編輯器、
源文件和類瀏覽器、源代碼版本控制系統(tǒng)接口
以及文本搜索引擎等。ADS僅在其PC機(jī)版本中
集成了該IDE。
■CodeWarriorIDE為管理和開發(fā)項(xiàng)目提供了簡
單多樣化的圖形用戶界面,用戶可以使用ADS
的CodeWarriorIDE為ARM和Thumb處理器開
發(fā)用C、C++或者ARM匯編語言編寫的程序代
碼。
6
ADS工具包的組成(二)
■2.編譯器
■ADS提供多種編譯器,以支持ARM和Thumb指
令的編譯。
■3.鏈接器
■Armlink(ARM鏈接器)可以將編譯得到的一個(gè)
或多個(gè)目標(biāo)文件和相關(guān)的一個(gè)或多個(gè)庫文件進(jìn)
行鏈接,生成一個(gè)可執(zhí)行文件,也可以將多個(gè)
目標(biāo)文件部分鏈接成一個(gè)目標(biāo)文件,以供進(jìn)一
步的鏈接。
7
&ADS工具包的組成(三)
■4.調(diào)試器(Debuggers)
■(1)調(diào)試器類型
-調(diào)試器部分包括兩個(gè)調(diào)試器:
-ARM擴(kuò)展調(diào)試器AXD(ARMextendedDebugger)
■ARM符號(hào)調(diào)試器armsd(ARMsymbolicdebugger)
■AXD基于WindowsXX/NT風(fēng)格,具有一般意義
上調(diào)試器的所有功能,包括簡單和復(fù)雜斷點(diǎn)設(shè)
置、棧顯示、寄存器和存儲(chǔ)區(qū)顯示、命令行接
口等。
-Arr^sd作為一個(gè)命令行工具輔助調(diào)試或者用在
其他操作系統(tǒng)平臺(tái)上。
8
ADS工具包的組成(四)
■AXD調(diào)試器本身是一個(gè)軟件,用戶通過這個(gè)軟
件可以對(duì)包含有調(diào)試信息的、正在運(yùn)行的可執(zhí)
行代碼進(jìn)行變量的查看、斷點(diǎn)的設(shè)置、單步執(zhí)
行等調(diào)試操作。在ARM體系中,它有Multi-ICE、
ARMulator和Angel等幾種方式。AXD可以在
Windows和UNIX下進(jìn)行程序的調(diào)試,它為用C、
C++和匯編語言的源代碼提供了一個(gè)全面的
Windows和UNIX環(huán)境。
9
ADS工具包的組成(五)
■(2)調(diào)試方式
■在ARM體系中,可以選擇Multi-ICE(Multi-
processorin-circuitemulator)ARMugtor或
Angel多種調(diào)試方式。ARMulator
■指令集模擬器(InstructionSet
Simulators)
■用戶使用指令集模擬器無需任何硬件即可在
PC機(jī)上完成一部分調(diào)試工作。
10
ADS工具包的組成(六)
■5.ARM開發(fā)包和函數(shù)庫
■ARM開發(fā)包由一些底層的例程和庫組成,可
以幫助用戶快速開發(fā)基于ARM的應(yīng)用程序和
操作系統(tǒng)。
■ADS的ARM應(yīng)用庫完善并增強(qiáng)了SDT中的函
數(shù)庫,同時(shí)還包括一些非常有用的源碼例程。
■具體包括系統(tǒng)啟動(dòng)代碼、串行口驅(qū)動(dòng)程序、
時(shí)鐘例程、中斷處理程序等,
11
2ADS開發(fā)工具集
■2.1ADS命令行開發(fā)工具
■2.2GU1開發(fā)工具
■2.3ADS實(shí)用工具
12
2.1ADS命令行開發(fā)工具
■(l)armcc
■armcc是ARMC編譯器。在命令控制臺(tái)環(huán)境下,輸
入命令:C:>armcc-help可以查看armcc的語法
格式以及最常用的一些操作選項(xiàng)。
■(2)armcpp
-armcpp是ARMC++編譯器。它將ISOC++或
EC++編譯成32位ARM指令代碼。
■(3)tcc
-tcc是ThumbC編譯器。該編譯器通過了Plum
HallCValidationSuite為ANSI一致性的涮試。tcc
將ANSIC源代碼編譯成16位的Thumb指令代碼。
13
■(4)tcpp
■tcpp是ThumbC++編譯器。它將ISOC++和
EC++源碼編譯成16位Thumb指令代碼。
■(5)armasm
■armasm是ARM和Thumb的匯編器,它對(duì)用ARM
匯編語言和Thumb匯編語言寫的源代碼進(jìn)行匯編。
■(6)armlink
■armlink是ARM連接器。
■(7)armsd
■armsd是ARM和Thumb的符號(hào)調(diào)試器。
14
(A)ARM編譯器
ADS提供四種編譯器,下表給出了這4種編譯器
的總結(jié)
編譯器名稱編譯器類型源代碼編譯輸出
armccC編譯器C32位ARM代碼
tccC編譯器C16位Thumb代碼
armcppC++編譯器C或C++32位ARM代碼
tcppC++編譯器C或C++16位Thumb代碼
15
(B)ARM匯編器
■ADS包含一個(gè)獨(dú)立的ARM匯編器armasm
和一個(gè)內(nèi)置在C/C++編譯器中的內(nèi)聯(lián)匯
編器(inlineassembler)。這兩個(gè)匯編
器能夠處理基本相同的匯編代碼。
16
(C)ARM連接器
■ARM連接器armlink可以有如下功能:
■將一組目標(biāo)文件或庫連接產(chǎn)生一個(gè)可執(zhí)
行的ELF映像文件;
■將一組目標(biāo)文件部分連接產(chǎn)生一個(gè)新的
目標(biāo)文件,用于以后的連接;
■指定代碼和數(shù)據(jù)在內(nèi)存中的位置;
■為連接產(chǎn)生的文件產(chǎn)生調(diào)試和引用信息
17
連接操作的輸出結(jié)果
■目標(biāo)文件由輸入段(inputsection)組成,輸
入段可以是R0(只讀,Read-Only)段、RW
(讀寫,Read/Write)段、ZI(零初始化,
Zero-Initialized)段。
■armlink可以利用這些屬性把輸入段分組歸并為
更大的生成塊,分別是輸出段(output
section)、域(region)和映像(image)。
■輸出段大致相當(dāng)于的段
ELF(segment)o
18
連接器的輸入和輸出
■連接器的輸入是:
-一個(gè)或多個(gè)ELF目標(biāo)格式的目標(biāo)文件,或(可選
的)一個(gè)或多個(gè)由armar工具產(chǎn)生的庫。
■缺省情況下,連接器的輸出是非可重定位映像,
代碼從內(nèi)存地址0x30000000開始,數(shù)據(jù)段緊
隨其后??梢酝ㄟ^連接器選項(xiàng)或一個(gè)配置文件
來指定代碼段和數(shù)據(jù)段存放在什么內(nèi)存地址。
19
連接正確的輸出
①一個(gè)ELF可執(zhí)行格式的可執(zhí)行映像。
②一個(gè)ELF目標(biāo)格式的部分連接的目標(biāo)文
件。
通過fromELF工具,一個(gè)ELF的可執(zhí)行
映像也可以轉(zhuǎn)化為其他的文件格式。
20
2.2GUI開發(fā)工具
■ADS的GUI開發(fā)工具主要包括兩個(gè)獨(dú)立的
工具:CodeWarriorIDE(CodeWarrior
集成開發(fā)環(huán)境)和AXD(ARMexecutor
Debugger)。
21
⑴CodeWarrior集成開發(fā)環(huán)境
■CodeWarrior集成開發(fā)環(huán)境為管理和開發(fā)工程項(xiàng)
目提供了簡單一致的圖形用戶界面,可以加速并
簡化嵌入式開發(fā)過程中的每個(gè)環(huán)節(jié),縮短用戶項(xiàng)
目周期。可以在CodeWarrior中為ARM睨置前
面介紹的各種命令行工具,實(shí)現(xiàn)對(duì)項(xiàng)目代碼的編
譯、匯編和連接。
■CodeWarrior以工程項(xiàng)目的方式組織源代碼文件、
庫文件和其他文件,讓用戶將這些文件及配置設(shè)
置放在一個(gè)工程項(xiàng)目中。每個(gè)工程項(xiàng)目可以創(chuàng)建
和管理多個(gè)生成選項(xiàng)的配置。
22
CodeWarriorIDE主要提供以下功能:
1.按照工程項(xiàng)目(Project)的方式來組
織源代碼文件、庫文件和其他文件。
2.設(shè)置各種生成選項(xiàng)(Buildoptions),
以生成不同配置的映像文件。
3.一個(gè)源代碼編輯器。
4.一個(gè)文件瀏覽器。
5.在文本文件中進(jìn)行字符串搜索和替換。
6.文本文件比較功能。
7.用戶自定義界面
23
CodeWarrior中常用的兩個(gè)術(shù)語
■目標(biāo)系統(tǒng)(Targetsystem)
■目標(biāo)系統(tǒng)是指應(yīng)用程序運(yùn)行的環(huán)境,可以是基
于ARM的硬件系統(tǒng),也可以是ARM仿真運(yùn)行環(huán)
境。比如,當(dāng)應(yīng)用程序運(yùn)行在ARM評(píng)估板上時(shí),
目標(biāo)系統(tǒng)就是該評(píng)估板。
■生成目標(biāo)(Buildtarget)
■生成目標(biāo)是指生成特定目標(biāo)文件的選項(xiàng)設(shè)置
(包括匯編選項(xiàng)、編譯選項(xiàng)、連接選項(xiàng)以及連
接后的處理選項(xiàng)等)和所用的所有文件的集合。
通常一個(gè)生成目標(biāo)對(duì)應(yīng)一個(gè)目標(biāo)映像文件。
24
CodeWarric^工程項(xiàng)目通常包
括3個(gè)生成目標(biāo):
-Debug:該生成目標(biāo)對(duì)應(yīng)的映像文件包含所
有調(diào)試信息。在開發(fā)過程中使用。
■Release:該生成目標(biāo)對(duì)應(yīng)的映像文件不包含
調(diào)試信息。用于生成實(shí)際發(fā)行的軟件版本。
■DebugRel:該生成目標(biāo)對(duì)應(yīng)的映像文件包含
基本的調(diào)試信息。
25
7種可選的ADS工程項(xiàng)目模板
①ARMExecutablImage:ARM可執(zhí)行映像文件模
板。用于由ARM指令的代碼生成一個(gè)ELF格式的可
執(zhí)行映像文件;
②ARMObjectLibrary:ARM目標(biāo)文件庫模板。用于由
ARM指令的代碼生成一個(gè)armar格式的目標(biāo)文件庫;
③EmptyProject:空工程模板。用于創(chuàng)建一個(gè)不包含
任何庫或源文件的工程;
④MakefileImporterWizard:Makefile導(dǎo)入向?qū)0濉?/p>
用于將VisualC的nmake或GNUmake文件轉(zhuǎn)入到
CodeWarriorIDE工程文件;
26
7種可選的ADS工程項(xiàng)目模板(續(xù))
⑤ThumbARMExecutableImage:ARM/Thumb7昆
合使用的映像文件模板。用于由ARM指令和
Thumb指令的混和代碼生成一個(gè)可執(zhí)行的ELF
格式的映像文件;
⑥ThumbExecutableimage:Thumb可執(zhí)行映像
文件模板。用于由Thumb指令創(chuàng)建一個(gè)可執(zhí)行
的ELF格式的映像文件;
⑦ThumbObjectLibrary:Thumb目標(biāo)文件庫模板。
用于由Thumb指令的代碼生成一個(gè)armar格疝
的目標(biāo)文件庫。
27
L7個(gè)ADS工程模板的截圖
Nev
ProjectFile|Object|
ExecutableImageProjectname:
I-------------------------------------
哈ARMObjectLibrary
能EmptyProject
Location:
的MakefileImporterWizard
哈ThumbABMInterworkingImage|C:\DocumentsandSettings'Set;..]
的ThumbExecutableImage
-T*AddProje-------------------
的ThumbObjectLibrary
Project'
28
(2)AXD
■AXD(ARM擴(kuò)展調(diào)試器,ARMextended
Debugger)是ADS的圖形化調(diào)試工具。AXD是
一個(gè)功能強(qiáng)大的調(diào)試工具,提供了多種輔助調(diào)試
手段用來對(duì)用戶程序進(jìn)行調(diào)試,包括斷點(diǎn)、觀測(cè)
點(diǎn)和觀測(cè)項(xiàng)等。
■其他兩個(gè)調(diào)試器:armsd(ARM符號(hào)調(diào)試器,
ARMSymbolicDebugger)和ADW/ADU
(ApplicationDebuggerWindows/UNIX)也是
ADS的調(diào)試工具。前者在命令行工具里已簡單介
紹,后者是ADS老版本的圖形化調(diào)試工具。
29
調(diào)試目標(biāo)和調(diào)試代理
■英文術(shù)語分另U是debugtarget和debugagent
■調(diào)試目標(biāo):被調(diào)試程序運(yùn)行所在的目標(biāo)設(shè)備或
仿真軟件。
■調(diào)試代理:運(yùn)行在調(diào)試目標(biāo)上,接受并執(zhí)行主
機(jī)上調(diào)試器發(fā)來的命令,例如,在目標(biāo)程序中
設(shè)置斷點(diǎn)、單步執(zhí)行、讀內(nèi)存、寫內(nèi)存等。
30
ARM體系中的三種調(diào)試代理
■在ARM體系中主要有以下三種調(diào)試代理:
.ARMulator,打開AXD軟件時(shí)默認(rèn)打開的H
標(biāo)是ARMidator。
■基于JTAG的調(diào)試代理Multi-ICE
■Angel調(diào)試監(jiān)控程序
31
調(diào)試代理與調(diào)試器的關(guān)系
■調(diào)試代理與調(diào)試器的關(guān)系是前者執(zhí)行后者請(qǐng)求
的操作。調(diào)試代理既不是被調(diào)試的程序,也不
是調(diào)試器本身。用戶可以通過AXD使用調(diào)試代
理,對(duì)運(yùn)行在調(diào)試目標(biāo)上的包含調(diào)試信息的程
序進(jìn)行變量查看、斷點(diǎn)控制等操作。
32
23ADS實(shí)用工具
■ARM映像文件轉(zhuǎn)換工具一fromelf
■ARM函數(shù)庫管理工具一armar
33
(1)fromelf
■這是ARM映像文件轉(zhuǎn)換工具。該命令將ELF
格式的文件作為輸入文件,將該格式轉(zhuǎn)換為各
種輸出格式的文件,包括plainbinary(BIN格
式映像文件),Motorola32-bitS-record
format(Motorola公司32位S格式映像文件),
IntelHex32format(Intel公司32位格式映
像文件),和Verilog-likehexformat(Verilog
類型16進(jìn)制文件)。fromelf命令也能夠?yàn)檩?/p>
入映像文件產(chǎn)生文本信息,例如代碼和數(shù)據(jù)長
度。
34
(2)armar
■armar是ARM庫管理工具。armar將一系列ELF格式
的目標(biāo)文件集合在一起,組成一個(gè)庫。這樣的庫可以
傳遞給連接器armlink以代替多個(gè)目標(biāo)文件。不過,連
接一個(gè)庫文件并不意味著庫中的所有目標(biāo)文件都被連
接。armlink連接目標(biāo)文件和連接庫有如下不同:
■作為輸入的每個(gè)目標(biāo)文件都無條件地被連接在輸出文
件中,盡管如果armlink帶-remove選項(xiàng),耒用到的區(qū)
段會(huì)被剪裁掉。
-庫文件中的成員僅當(dāng)它被一個(gè)目標(biāo)文件或其他已被包
含的庫文件引用時(shí)才被包含在輸出文件中。
35
3ARM映像文件
-什么是映像文件
■映像文件(image)是一個(gè)計(jì)算機(jī)上
的可執(zhí)行文件,在執(zhí)行之前被加載到
計(jì)算機(jī)的存儲(chǔ)器中。通常,一個(gè)映像
文件中包含多個(gè)線程。
36
ELF目標(biāo)文件
■ARM集成開發(fā)環(huán)境中的各種源文件(包
括匯編程序、C程序以及C++程序)經(jīng)過
ARM編譯器編譯之后,生成ELF格式的目
標(biāo)文件。
■ELF目標(biāo)文件的文件名后綴是.0。
37
ARM映像文件.axf
■目標(biāo)文件,o和相應(yīng)的C/C++運(yùn)行時(shí)庫.a經(jīng)
過ARM連接器連接后,生成.axf映像文
件。,axf映像文件也是ELF格式的,只是
包含特定格式的調(diào)試信息,可在開發(fā)板
上調(diào)試運(yùn)行。
38
不含調(diào)試信息的映像文件
■映像文件調(diào)試結(jié)束之后,可以使用
fromelf工具將映像文件中的調(diào)試信息和
注釋過濾掉,生成二進(jìn)制的可加載映像
文件(通常帶后綴,bin,也可以無后綴)。
可加載映像文件可寫入嵌入式設(shè)備的
ROM中,在加電啟動(dòng)過程執(zhí)行。
39
ARM映像文件的組成
■ARM處理器的映像文件是.axf文件或
者.bin文件。
■,axf文件和.bin文件的區(qū)別之處在于前者
包含有調(diào)試信息和注釋信息,后者沒有。
編譯器輸出的ARM映像文件以,axf文件為
主。通過fromelf工具,可以把AXF文件
轉(zhuǎn)換成.bin文件。實(shí)際下載到系統(tǒng)板的映
像文件多數(shù)是?bin格式文件。
40
映像文件的加載視圖和執(zhí)行視圖
■映像文件域在加載時(shí)被映射存放到系統(tǒng)存儲(chǔ)區(qū)。
在執(zhí)行映像時(shí),往往需要移動(dòng)一些域到執(zhí)行地
址并且產(chǎn)生ZI輸出段。例如,初始化的RW數(shù)
據(jù)也許要被迫從ROM區(qū)的加載地址拷貝到RAM
區(qū)的執(zhí)行地址。
■加載視圖:根據(jù)映像文件裝載到存儲(chǔ)器時(shí)的地
址描述每一個(gè)域和段,該視圖是映像文件開始
執(zhí)行前它的域和段的位置視圖。
■執(zhí)行視圖:該視圖根據(jù)映像文件在執(zhí)行時(shí)每一
個(gè)域和段的地址描述映像的各個(gè)組成部分。
41
&加載視圖與執(zhí)行視圖的比較
Image$$RW$$limit
Image$$ZI$$limit
Image$$ZI$$base
Image$$RW$$base
Image$$RO$$limit
Image$$RO$$base
42
圖中帶有$$"符號(hào)的含義
-JI-----------
■說明如下:
Image$$RO$$baseRO輸出段運(yùn)行時(shí)起始地址
Image$$RO$$limitR0輸出段運(yùn)行時(shí)存儲(chǔ)區(qū)界限
Image$$RW$$baseRW輸出段運(yùn)行時(shí)起始地址
Image$$RW$$limitRW輸出段運(yùn)行時(shí)存儲(chǔ)區(qū)界限
Image$$ZI$$baseZI輸出段運(yùn)行時(shí)起始地址
Image$$ZI$$limitZI輸出段運(yùn)行時(shí)存儲(chǔ)區(qū)界限
43
三個(gè)段空間計(jì)算公式
R0段大小二
Image$$RO$$limit-Image$$RO$$base
RW段大小二
Image$$RW$$limitTmage$$RW$$base
ZI段大小二
Image$$ZI$$limit-Image$$ZI$$base
44
段大小計(jì)算小結(jié),段大小的設(shè)置
■加載時(shí),R0段+RW段=整個(gè)程序大小。
■運(yùn)行時(shí),R0段+RW段2整個(gè)程序大小
■注意:ZI段被包含在RW段中間。
■這些符號(hào)具體取值可以在ADS或者SDT中設(shè)置。
■-ro-base選項(xiàng)對(duì)應(yīng)設(shè)置Image$$RO$$base,
■-rw-base選項(xiàng)對(duì)應(yīng)設(shè)置Image$$RW$$base。
45
使用配置文件定義映像文件的地
址映像
-在生成映像文件時(shí),ARM連接器需要
知道下列信息:
■分組信息決定如何將各個(gè)輸入段組
織成相應(yīng)的輸出段和域。
■定位信息決定各個(gè)域在存儲(chǔ)空間中
的起始地址。
46
ADS編譯成功后輸出的映像文件內(nèi)
I部成分統(tǒng)計(jì)表舉例
Imagecomponentsizes
CodeRODataRWDataZIDataDebug
32169601014020796ObjectTotals
8814416032235383174019552LibraryTotals
CodeRODataRWDataZIDataDebug
9136016992235384188040348GrandTotals
TotalROSize(Code+ROData)93059(90.88kB)
TotalRWSize(RWData+ZIData)3844115(3754.02kB)
TotalROMSize(Code+ROData+RW95294(93.06kB)
Data)
TranslationtoPlainbinaryformatsuccessful.
映像文件統(tǒng)計(jì)報(bào)告
■在ADS集成開發(fā)環(huán)境下,對(duì)工程文件進(jìn)行編譯
之后,會(huì)輸出一個(gè)映像文件的統(tǒng)計(jì)報(bào)告。該報(bào)
告中會(huì)分別給出目標(biāo)文件(.0)文件和庫(.a)
文件中5種組成成分的占空間大小。這5種組成
成分是:代碼、R0數(shù)據(jù)、RW數(shù)據(jù)、ZI數(shù)據(jù)和
Debug數(shù)據(jù),如圖6-7所示。此外,還會(huì)分別給
出總R0空間(代碼+R0數(shù)據(jù))、總RW空間
(RW數(shù)據(jù)+ZI數(shù)據(jù))和總ROM空間(代碼+R0
數(shù)據(jù)+RW數(shù)據(jù))的大小。
48
4.1ARM匯編語言特性
■4.1.1行格式、預(yù)定義名和內(nèi)建變量
■L行格式
■在ARM匯編語言模塊中,源代碼行的一般格
式是:
■{symbol}{instruction|directive|pseudoJnstruction}
{;comment}
■也就是:
-{符號(hào)}{指令|指示符|偽指令}{;注釋}
49
*
■上述行格式中用大括號(hào)括起來的三部分是
可選的。如果一行中沒有symbol,指令|指
示符I偽指令不能從第1列位置開始,指令|
指示符I偽指令前面必須放置空格或Tab(
制表符)字符。
50
□l__每一_條_指令的-助記符可以使用全部大寫或全部小寫字符
,但不能在同一條指令的助記符中大、小寫混用。
■指示符必須大寫。
■指令中每一個(gè)寄存器名能夠全部大寫或全部小寫,但不
能大、小寫混用。
■行格式中symbol通常是標(biāo)號(hào)dabel),在指令或偽指
令前它總是標(biāo)號(hào),在某些指示符前它是表示變量或常量
的符號(hào)(symbol)。
■行格式中symbol必須從第一列開始,不能含任何如空格
或Tab的字符,詳見本節(jié)符號(hào)命名規(guī)則部分。
51
2.預(yù)定義寄存器和協(xié)處理器名
!ARM匯編器對(duì)ARM的寄存器進(jìn)行了預(yù)定義,所有
的寄存器和協(xié)處理器名都是大小寫敏感的。
-⑴預(yù)定義寄存器名
-⑵預(yù)定義程序狀態(tài)寄存器名
-⑶預(yù)定義浮點(diǎn)寄存器名
-(4)預(yù)定義協(xié)處理器名和協(xié)處理器寄存器名
52
預(yù)定義變量1
?預(yù)定義的寄存器如下I
■,R0~R15和r0~rl5;
■,al~a4(參數(shù)、結(jié)果或臨時(shí)寄存器,與
r0~r3同義);
■,vl~v8(變量寄存器,與r4~rll同義);
■,sb和SB(靜態(tài)基址寄存器,與r9同義);
■,sl和SL(堆棧限制寄存器,與rlO同義);
■,fp和FP(幀指針,與同義);
■,ip和IP(過程調(diào)用中間臨時(shí)寄存器,與「12同
義);
預(yù)定義變量2
,sp和SP(堆棧指針,與門3同義);
,|r和LR(鏈接寄存器,與「14同義);
?pc和PC(程序計(jì)數(shù)器,與「15同義);
,cpsr和CPSR(程序狀態(tài)寄存器);
,spsr和SPSR(程序狀態(tài)寄存器);
?f0~f7和F0~F7(FPA寄存器);
?s0~s31和S0~S31(VFP單精度寄存器);
?d0~dl5和D0~D15(VFP雙精度寄存器);
■p0-pl5(協(xié)處理器0~15);
-C0-C15(協(xié)處理器寄存器0~15)。
3.內(nèi)建變量
■內(nèi)建變量(builtinvariables)見表律1,
它們是由ARM匯編器定義過的。內(nèi)建變
量不能用SETA、SETL或SETS指示符設(shè)置
,它們能被用在表達(dá)式或條件中,如:
■IF{ENDIAN}="big?
■IF{ARCHITECTURE}=、'4T〃
內(nèi)置變量2
赤曷______________含義
{PC}或.當(dāng)前指令的地址
何慶可或@存儲(chǔ)區(qū)位置計(jì)數(shù)器的當(dāng)前值
{TRUE}邏輯常量真
{FALSE}邏輯常量假
{OPT}當(dāng)前設(shè)置列表選項(xiàng)值,OPT用來保存當(dāng)前列表選項(xiàng),改變選項(xiàng)值,恢復(fù)它的原始值
{CONFIG}如果匯編器匯編ARM代碼,則值為32;如果匯編器匯編Thumb代碼,則值為16
{ENDIAN}如果匯編器在大端模式下,則值為big;如果匯編器在小端模式下,則值為little
內(nèi)置變量3
到!味J把哪幃井生淵AK1Vl代“時(shí)》則恒?為JZ;如果/L通砧制1nun1D1Lg,則值為lb,卜回乂
{CPU}選定的CPU名,缺省時(shí)為ARM7TDMI
{FPU}選定的FPU名,缺省時(shí)為SoftVFP
{ARCHITECTURE}選定的ARM體系結(jié)構(gòu)的值;3,3M,4,4T和4TxM
{PCSTOREOFFSET}STRpc,或STMRb,[...PC]指令的地址和PC存儲(chǔ)值之間的偏移量
{ARMASM_VERSION}ARM匯編器的版本號(hào),為整數(shù)
或|ads$version|
4.1.2ARM偽指令與Thumb偽指令
■ARM匯編器支持ARM偽指令和Thumb偽指令,在
匯編時(shí)把它們翻譯成適當(dāng)?shù)腁RM或Thumb指令組
合。
■全部ARM和Thumb偽指令見表4-2。Thumb偽指
令在表中用(Thumb)標(biāo)出。
■雖然表4-2中Thumb偽指令A(yù)DR、LDR和NOP與
ARM偽才旨令A(yù)DR、LDR和NOP格式完全相同,但
相同的偽指令出現(xiàn)在程序中Thumb代碼區(qū),匯編
器識(shí)別為Thumb偽指令;出現(xiàn)在ARM代碼區(qū)匯編
器識(shí)別為ARM偽指令。
58
LADRARM偽指令
■ADR偽指令裝入一個(gè)相對(duì)程序或相對(duì)寄
存器的地址到一個(gè)寄存器。
■⑴格式
■ADR{condition}register,expression
59
■⑵使用
■使用中,ADR總是被匯編成一條指令。匯編器試圖產(chǎn)
生一條ADD或SUB指令,裝入地址。如果不能用一條
指令構(gòu)造出地址,則產(chǎn)生錯(cuò)誤信息,匯編失敗。
■如果expression是相對(duì)程序的,計(jì)算產(chǎn)生的地址必須
與ADR偽指令在同一個(gè)代碼區(qū)域。
■⑶使用舉例
■TestiMOVrl,#0
■ADRr2,Testi
;產(chǎn)生指令SUBr2,pc,#0xC
60
2.ADRLARM偽指令
■ADRL偽指令裝入一個(gè)相對(duì)程序或相對(duì)寄
存器的地址到一個(gè)寄存器。與ADR偽指
令功能相似,但ADRL比ADR能裝入更大
的地址范圍,原因是ADRL產(chǎn)生兩條數(shù)據(jù)
處理指令。
■⑴格式
ADRL{condition}register,expression
61
■(2)使用
■使用中,ADRL總是被匯編成2條指令。如果匯編器不
能以2條指令構(gòu)造出地址,則產(chǎn)生錯(cuò)誤信息,匯編失敗
O
■如果expression是相對(duì)程序的,它必須計(jì)算產(chǎn)生一個(gè)與
ADRL偽指令在同一個(gè)代碼區(qū)域的地址,否則在隨后的
連接時(shí),地址可能出了范圍。
■⑶使用舉例
■startMOVr0,#10
■ADRLr4,start+60000
■;產(chǎn)生指令A(yù)DDr4,pc,#0xe800
■;ADDr4,r4,#0x254
62
3.LDRARM偽指令
■LDR偽指令裝入二個(gè)32位常數(shù)值或一個(gè)地址到
一個(gè)寄存器。
■⑴格式
■LDR{condition}register,=[expression|label-expression]
■⑵使用
■使用LDR偽指令有兩個(gè)主要目的,一是當(dāng)一個(gè)立即數(shù)
的值由于超了范圍,不能用MOV和MVN指令裝入到一
個(gè)寄存器時(shí),用LDR偽指令產(chǎn)生一個(gè)文字池常數(shù);二
是裝入一個(gè)相對(duì)程序或外部的地址到一個(gè)寄存器。
■⑶使用舉例
LDRrO,=Oxlff;裝入Oxlff到rO
LDRrl,=label;裝入山bel地址到門63
4.NOPARM偽指令
■對(duì)NOP偽指令,匯編器產(chǎn)生什么也不操作的
ARM指令:MOVrO,rOo
■⑴格式
■NOP
64
■5.ADRThumb偽指令
■ADR偽指令裝入一個(gè)相對(duì)程序或相對(duì)寄存器的
地址到一個(gè)寄存器。
■⑴格式
■ADRregister,expression
■⑵使用
■使用中,在Thumb狀態(tài),ADR只能產(chǎn)生字對(duì)齊
的地址。要使用ALIGN指示符去確認(rèn)expression
是字對(duì)齊的。
-若表達(dá)式是相對(duì)程序的,必須計(jì)算產(chǎn)生一個(gè)與
ADR偽指令在同一個(gè)代碼區(qū)域的地址。65
■⑶使用舉例
■ADRr3,testexml
■;產(chǎn)生指令A(yù)DDr3,pc,#nn
■;code
■ALIGN
■testexm1DCW1,2,3,4
66
■6.LDRThumb偽指令
■LDR偽指令裝入一個(gè)32位常數(shù)值或一個(gè)地址到一個(gè)低寄
存器中。
■⑴格式
■LDRregister,=[expression|label-expression]
■(2)使用
■使用LDR偽指令有兩個(gè)主要目的,一是當(dāng)一個(gè)立即數(shù)的
值由于超出MOV指令的范圍,不能裝入一個(gè)寄存器時(shí),
產(chǎn)生文字池常數(shù);二是裝入一個(gè)相對(duì)程序或外部的地址
到一個(gè)寄存器。
■⑶使用舉例
■LDRrO,=OxOffe;裝入OxOffe到rO
■LDRrl,=labeladdr;裝入labegddr地址到rl
67
■7.MOVThumb偽指令
■MOV偽指令傳送一個(gè)低寄存器的值到另一個(gè)低
寄存器(r0-r7)o而MOV指令不能傳送一個(gè)低
寄存器的值到另一個(gè)低寄存器。
■(1)格式
■MOVRd,Rs
■⑵使用
■在使用中,匯編器將MOV偽指令變成帶立即數(shù)
的ADD指令,指令中立即數(shù)的值為0。
■⑶使用舉例
■MOVRd,Rs;產(chǎn)生指令A(yù)DDRd,Rs,#0
68
■8.NOPThumb偽指令
■對(duì)NOP偽指令,匯編器產(chǎn)生什么也不操
作的Thumb指令:MOVr8/8。
■⑴格式
■NOP
69
4.1.3符號(hào)(symbols)
與指示符(directives)
■使用符號(hào)能夠代表變熹"地址和數(shù)值常數(shù)。符
號(hào)代表地址時(shí),也稱為標(biāo)號(hào)。
■1.符號(hào)命名規(guī)則
■符號(hào)命名遵守以下規(guī)則:
-⑴在符號(hào)名中可以使用大寫字母、小寫字母、數(shù)字
字符或下劃線字符。
-⑵除了局部標(biāo)號(hào)外,不允許在符號(hào)名的第一個(gè)字符
位置使用數(shù)字字符。
-⑶符號(hào)名中對(duì)大、小寫字母是敏感的。
-⑷在符號(hào)名中所有的字符是有意義的。
70
-⑸在它們的作用范圍內(nèi),符號(hào)名必須是唯一的。
■⑹符號(hào)名必須不使用內(nèi)建變量名、預(yù)定義寄存器名和
預(yù)定義協(xié)處理器名。
■⑺符號(hào)名應(yīng)該不使用與指令助記符或指示符相同的名
字。
■⑻如果需要在符號(hào)名中使用更大范圍的字符,使用如
下舉例的格式為符號(hào)名劃界線:
■|C$$code|
■其中兩邊的兩條豎線不是符號(hào)的一部分,只用于為符
號(hào)名劃界線,它們之間不允許使用豎線、分號(hào)和換行符
71
■2.變量(variables)
-變量有三種類型:
①?數(shù)值
②?邏輯
③?串
■變量的類型不能被改變,變量的值可以
被改變。
72
■3.匯編時(shí)串變量的替換
■可以使用串變量作為匯編語言的一整行或一行
的一部分。如果在某一位置使用的串變量帶有
巧’作為前綴,則匯編器用串變量的值替換串變
量。巧,字符通知匯編器,在檢查一行的語法前
替換源代碼行的串。
■使用,'標(biāo)記變量名結(jié)束,如果變量名后有跟隨
的字符,替換后跟隨在串變量的值后,
■4.標(biāo)號(hào)(labels)
■⑴相對(duì)程序的標(biāo)號(hào)
■⑵相對(duì)寄存器的標(biāo)號(hào)
■⑶絕對(duì)地址
73
■5.局部標(biāo)號(hào)(locallabels)
■局部標(biāo)號(hào)使用0~99范圍內(nèi)的一個(gè)數(shù),可以有選
擇地在其后跟隨一個(gè)表示當(dāng)前范圍的名字。
■局部標(biāo)號(hào)用在指令中,指出分支的目標(biāo)處。
■局部標(biāo)號(hào)格式為:
■n{routname)
74
■6.常量
■常量由數(shù)值常量、串常量、布爾常量和字符常量組成。
■⑴數(shù)值常量
-數(shù)值常量在匯編語言中采用以下三種形式:
■?十進(jìn)制數(shù),例如234;
■?十六進(jìn)制數(shù),例如0x7b或0x7B;
■,n進(jìn)制數(shù),格式為n_xxx,n是2~9之間的一個(gè)基數(shù),
xxx是這個(gè)基數(shù)下的殘值,例如8_375,表示基數(shù)為8(
八進(jìn)制數(shù)),數(shù)值為375。
-⑵串常量
■⑶布爾常量
■⑷字符常量
75
■使用舉例:
■anumSETA3500;假定anum在以前聲明過
■addrDCDOxOOff;十六進(jìn)制數(shù)
■DCDOxOOFF;十六進(jìn)制數(shù)
■DCD2_11000011;二進(jìn)制數(shù)
■bnumSETA8_74007
■;假定bnum在以前聲明過,八進(jìn)制數(shù)
■LDRn,=6A5;字符
76
■7.指示符(directives)
-匯編器提供指示符用來支持:
-⑴定義數(shù)據(jù)結(jié)構(gòu)和為數(shù)據(jù)分配空間;
-⑵文件分隔成邏輯上的一個(gè)或多個(gè)區(qū)域;
-⑶錯(cuò)誤報(bào)告和匯編列表控制;
■⑷符號(hào)定義;
■⑸條件匯編和重復(fù)匯編,以及在一個(gè)文件中包含輔助
文件。
77
指示符1--符號(hào)定義指示符(1)
指示符■功能
聲明和初始化一個(gè)全局算術(shù)變量,初始值為0
GBLL聲明和初始化一個(gè)全局邏輯變量,初始值為{FALSE}
GBLS聲明和初始化一個(gè)全局字符串變量,初始值為空
?r1△聲明和初始化一個(gè)局部算術(shù)變量,初始值為0。局部算術(shù)變
量只能在宏中進(jìn)行聲明。
IC.聲明和初始化一個(gè)局部邏輯變量,初始值為《FALSE>。局
部邏輯變量只能在宏中進(jìn)行聲明。
,riq聲明和初始化一個(gè)局部字符串變量,初始值為空。局部字
符串變量只能在宏中進(jìn)行聲明。
SETA給一個(gè)局部或全局算術(shù)變量置值
SETL給一個(gè)局部或全局邏輯變量置值_
SETS給一個(gè)局部或全局字符串變量置值
78
4指示符1-一符號(hào)定義指示符(2)
RLIST給寄存器集命名
CN給一個(gè)協(xié)處理器寄存器命名
CP給一個(gè)特定協(xié)處理器命名,協(xié)處理器號(hào)為0~15
DN給一個(gè)雙精度VFP寄存器命名
SN給一個(gè)單精度VFP寄存器命名
FN給一個(gè)特定的浮點(diǎn)寄存器命名
79
指示符2-一數(shù)據(jù)定義指示符⑴
LTORG指示匯編器匯編當(dāng)前文字池
…或MAP置存儲(chǔ)映射的起點(diǎn)到一個(gè)特定的地址
#或FIELD描述指示符所定義的存儲(chǔ)映射中的空間
%或SPACE定義一塊值為0的存儲(chǔ)器區(qū)域
二或DBC分配一個(gè)或多個(gè)字節(jié)
&或DCD分配一個(gè)或多個(gè)字,從4字節(jié)邊界開始
DCDU分配一個(gè)或多個(gè)字,但不一定從4字節(jié)邊界開始
DCDO分配以字邊界開始的存儲(chǔ)區(qū)域,并指定初始值為到
靜態(tài)基址寄存器的偏移
80
指示符2--數(shù)據(jù)定義指示符⑵
DCFD分配給雙精度浮點(diǎn)數(shù)一段以字邊界開始的內(nèi)存區(qū)域
DCFDU分配給雙精度浮點(diǎn)數(shù)一段以任意邊界開始的內(nèi)存區(qū)域
DCFS分配給單精度浮點(diǎn)數(shù)一段以字邊界開始的內(nèi)存區(qū)域
DCFSU分配給單精度浮點(diǎn)數(shù)一段以任意邊界開始的內(nèi)存區(qū)域
DCI分配以字邊界開始的存儲(chǔ)區(qū)域,并指定初始值。標(biāo)記此地
址存儲(chǔ)的是代碼而不是數(shù)據(jù)
DCQ分配給雙精度浮點(diǎn)數(shù)一段以4字節(jié)邊界開始的內(nèi)存區(qū)域
DCQU分配給雙精度浮點(diǎn)數(shù)一段以任意邊界開始的內(nèi)存區(qū)域
DCW分配給一個(gè)或多個(gè)半字以半字邊界開始的內(nèi)存區(qū)域
DCWU分配給一個(gè)或多個(gè)半字以任意邊界開始的內(nèi)存區(qū)域
DATA標(biāo)識(shí)一個(gè)標(biāo)號(hào)是代碼段中數(shù)據(jù)的標(biāo)號(hào),該符號(hào)后是DCB或
DCD
81
I指示符3-一報(bào)告指示符
ASSERT對(duì)于聲明錯(cuò)誤,在第二次匯編時(shí)
產(chǎn)生錯(cuò)誤信息
!或INFO在匯編時(shí)顯示信息
OPT可在源代碼中設(shè)置列表選項(xiàng)
TTL在一個(gè)列表文件每頁的開始插入
一個(gè)標(biāo)題,每一頁的標(biāo)題在下一
個(gè)TTL之前都有效
SUBT在一個(gè)列表文件的頁中設(shè)置一個(gè)
子標(biāo)題,每一頁的子標(biāo)題在下一
個(gè)SUBT之前都有效
82
4指示符4-一匯編控制指示符⑴
[或IF這三個(gè)符號(hào)連用,進(jìn)行條件匯編
]或ENDIF
MACRO這二個(gè)符號(hào)連用,定義一個(gè)宏定
義
MEND
83
■指示符4--匯編控制指示符⑵
用來在結(jié)束前退出宏定義
WHILE這二個(gè)符號(hào)連用,進(jìn)行重復(fù)匯編
WEND
84
指不符5一雜項(xiàng)指小符(1)
ALIGN從一個(gè)字邊界開始
AREA指示匯編器匯編一段新的代碼或
數(shù)據(jù)部分
CODE16指示匯編器將隨后的指令作為16
位Thumb指令
CODE32指示匯編器將隨后的指令作為32
位ARM指令
END表示源程序的結(jié)束
85
&指示符5--雜項(xiàng)指示符⑵
ENTRY指向程序的入口,一個(gè)源文件中
只能有一個(gè)ENTRY
*或EQU對(duì)一個(gè)常量賦予一個(gè)符號(hào)名
說明了由鏈接器在目標(biāo)和庫文件
EXPORT或GLOBAL中使用的符號(hào)
提供匯編器在當(dāng)前匯編中未曾定
IMPORT或EXTERN義的符號(hào)名
包含一個(gè)文件,在GET處匯編包含
GET或INCLUDE的文件
86
指不符5一雜項(xiàng)指不符(3)
INCBIN包含一個(gè)未被匯編過的文件
KEEP指示匯編器保留符號(hào)表中的局部符
號(hào)
NOFP在匯編語言程序中禁止浮點(diǎn)指令
REQUIRE指示兩段之間的依賴關(guān)系
REQUIRES指示當(dāng)前文件請(qǐng)求堆棧為8字節(jié)對(duì)準(zhǔn)
87
指不符5--雜項(xiàng)指不符(4)
PRESERVES指示當(dāng)刖文件保持堆棧為8字節(jié)對(duì)
準(zhǔn)
RN給特定的寄存器命名
ROUT標(biāo)記局部標(biāo)號(hào)使用范圍的界面
匯編指令與指示符應(yīng)用實(shí)例--2440init代碼分析
88
4.1.4與代碼有關(guān)的指示符
■LAREA、ENTRY和END指示符使用程序舉例
-【例4.1]用ARM匯編語言編寫的匯編語言模塊舉例。
■(程序見參考書)
■①定義區(qū)域的AREA指示符
■②聲明匯編程序入口點(diǎn)的ENTRY指示符
■③應(yīng)用程序執(zhí)行
■④應(yīng)用程序終止
■⑤源程序結(jié)束的END指示符
89
■2.CODE32、C0DE16指示符使用程序舉例
■用于選擇指令集的C0DE16和CODE32指示符
■⑴格式
■格式分別是:
■C0DE16
■CODE32
■(2)使用
■在ARM狀態(tài)當(dāng)使用BX指令分支到Thumb指令時(shí),使用
CODEI60C0DE16放置在分支目標(biāo)處代碼的前面。當(dāng)
從Thumb狀態(tài)分支到ARM指令時(shí),使用CODE32。
CODE32放置在分支目標(biāo)處代碼的前面。
90
■⑶使用舉例
■使用舉例1:這個(gè)例子給出如何從ARM指令分
支到Thumb指令。
-AREAARMtoThumb,CODE,READONLY
-;這個(gè)區(qū)域開始于ARM狀態(tài)
■ADRrl,testl+l
-;裝入地址,設(shè)置最低位為1
-BXrl
-;分支并且改變指令集
-CODE16;跟隨指令為Thumb指令
-testlMOVr0,#20;Thumb指令
91
■3.禁止浮點(diǎn)運(yùn)算的NOFP指示符
■NOFP指示符表明在一個(gè)匯編語言源文件中
不接受浮點(diǎn)指令。
■⑴格式
■NOFP
■⑵使用
■使用NOFP指示符確認(rèn)在軟件或目標(biāo)硬件不支
持浮點(diǎn)指令的情況下,程序中沒有使用浮點(diǎn)
指令。
92
■4■定義局部標(biāo)號(hào)使用范圍的ROUT指示符
■ROUT指示符標(biāo)記局部標(biāo)號(hào)使用范圍的界線。
■⑴格式
■{name}ROUT
■(2)使用
■在使用中,ROUT指示符限制了局部標(biāo)號(hào)的使用范圍。
這使得程序員容易避免偶然引用一個(gè)錯(cuò)誤的標(biāo)號(hào)這種
情況的發(fā)生。如果不存在ROUT指示符,局部標(biāo)號(hào)的使
用范圍是整個(gè)AOF區(qū)域。如果存在ROUT指示符,局部
標(biāo)號(hào)的使用范圍在兩個(gè)ROUT之間。
■使用name選項(xiàng)用于保證每次引用正確的標(biāo)號(hào)。如果標(biāo)
號(hào)名或引用標(biāo)號(hào)名與ROUT指示符前面的名字不匹配,
匯編器產(chǎn)生錯(cuò)誤信息,匯編失敗。
93
■⑶使用舉例(見參考書)
94
4.1.5與數(shù)據(jù)定義有關(guān)的指示符
卜1.在代碼中使用數(shù)據(jù)的DATA指示符
:DATA指示符通知匯編器,這個(gè)標(biāo)號(hào)是在代碼中
的數(shù)據(jù)標(biāo)號(hào),這意味著標(biāo)號(hào)是在代碼段中的數(shù)據(jù)
的地址。
■⑴格式
■labelDATA
■⑵使用
■使用時(shí),如果需要在Thumb代碼區(qū)域用到某一個(gè)
數(shù)據(jù)定義指示符,如DCD、DCB和DCW,定義數(shù)
據(jù)時(shí),必須使用DATA指示符。
95
⑶使用舉例
AREAtest,CODE
Thumb_Code;code
;code
MOVpc,lr
ThumbDataDATA
DCB2,5,8
96
■2.分配存儲(chǔ)器字節(jié)的DCB指示符
■DCB也可以用=指示符代替。
■DCB指示符分配一個(gè)或多個(gè)存儲(chǔ)器中的字節(jié),
并且定義初始運(yùn)行時(shí)的存儲(chǔ)器內(nèi)容。
■(1)格式
■{label}DCBexpression{expression}...
■⑵使用
■如果需要在Thumb代碼中用DCB定義帶標(biāo)號(hào)的
數(shù)據(jù),必須使用DATA指示符。
■如果DCB后跟隨著指令,應(yīng)該使用ALIGN指示符
去確認(rèn)指令存放是邊界對(duì)齊的。
■⑶使用舉例(見參考書)
97
■3.分配存儲(chǔ)器半字的DCW和DCWU指示符
■DCW指示符分配一個(gè)或多個(gè)存儲(chǔ)器中的半字,
以2字節(jié)邊界對(duì)齊,定義初始運(yùn)行時(shí)的存儲(chǔ)器
內(nèi)容。
■DCWU與DCW的區(qū)別是:DCWU不要求以2字節(jié)
邊界對(duì)齊。
■(1)格式
■格式分別是:
■{label}DCWexpression{,expression}...
■{label}DCWUexpression{,expression)...9
■⑵使用
■使用時(shí),如果需要在Thumb代碼中用DCW(
DCWU)定義一個(gè)帶標(biāo)號(hào)的數(shù)據(jù),必須使用
DATA指示符。
■如果DCW(DCWU)后跟隨著指令,要使用
ALIGN指示符,確認(rèn)指令是字邊界對(duì)齊的。
■⑶使用舉例(見參考書)
99
■4.分配存儲(chǔ)器字的DCD和DCDU指示符
■■DCD也可以用&指示符代替。
■■DCD指示符分配1個(gè)或多個(gè)存儲(chǔ)器中的字,4字
節(jié)邊界對(duì)齊,
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2024年高端裝備制造研發(fā)合同
- 2025年度二零二五木坑果場(chǎng)承包經(jīng)營與農(nóng)產(chǎn)品出口合同3篇
- 2024建材銷售合作協(xié)議書范本
- 2024虛擬現(xiàn)實(shí)游戲內(nèi)容制作及授權(quán)合同
- 2024年電廠煤炭供應(yīng)與支付條款標(biāo)準(zhǔn)協(xié)議版B版
- 2024年跨境電商倉儲(chǔ)物流合同
- 2024年項(xiàng)目投資與合作合同
- 2025年度智能家居系統(tǒng)設(shè)計(jì)與裝修合同范本3篇
- 2025便利店品牌授權(quán)與區(qū)域管理合同范本3篇
- 2024年環(huán)保項(xiàng)目投資合同投資金額與環(huán)保效果
- 全國運(yùn)動(dòng)員注冊(cè)協(xié)議書范本(2篇)
- 向女朋友認(rèn)錯(cuò)保證書范文
- 五分?jǐn)?shù)加法和減法(課件)-數(shù)學(xué)五年級(jí)下冊(cè)
- 2024午托承包合同-校園內(nèi)學(xué)生午休服務(wù)協(xié)議3篇
- 2025年醫(yī)院支部工作總結(jié)及工作計(jì)劃范文
- 茶歇合同范例
- DB37T 3329-2018 建筑陶瓷制品制造行業(yè)企業(yè)安全生產(chǎn)風(fēng)險(xiǎn)分級(jí)管控體系實(shí)施指南
- 小紅書種草營銷師(初級(jí))認(rèn)證考試真題試題庫(含答案)
- 中學(xué)學(xué)校裝修改造工程施工組織設(shè)計(jì)方案
- 幼兒園反恐防暴技能培訓(xùn)內(nèi)容
- 中醫(yī)診所內(nèi)外部審計(jì)制度
評(píng)論
0/150
提交評(píng)論