版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、匯編指令的格式(偽指令)作者 :jdzj868來(lái)源 :機(jī)電之家下載站錄入 :jdzj868更新時(shí)間: 2009-10-23 16:27:12點(diǎn)擊數(shù): 0 【字體:】偽指令是對(duì)匯編起某種控制作用的特殊命令,其格式與通常的操作指令一樣,并可加在匯編程序的任何地方,但它們并不產(chǎn)生機(jī)器指令。許多偽指令要求帶參數(shù),這在定義偽指令時(shí)由“ 表達(dá)式 ” 域指出,任何數(shù)值與表達(dá)式勻可以作為參數(shù)。不同匯編程序允許的偽指令并不相同,以下所述的偽指令僅適用于系統(tǒng),但一些基本的偽指令在大部份匯編程序中都能使用,當(dāng)使用其它的匯編程序版本時(shí),只要注意一下它們之間的區(qū)別就可以了。中可用的偽指令有:org 設(shè)置程序起始地址en
2、d 標(biāo)志源代碼結(jié)束equ 定義常數(shù)set 定義整型數(shù)data 給字節(jié)類型符號(hào)定值byte 給字節(jié)類型符號(hào)定值wrod 給字類型符號(hào)定值bit 給位地址取名altname 用自定義名取代保留字db 給一塊連續(xù)的存儲(chǔ)區(qū)裝載字節(jié)型數(shù)據(jù)dw 給一塊連續(xù)的存儲(chǔ)區(qū)裝載字型數(shù)據(jù)ds 預(yù)留一個(gè)連續(xù)的存儲(chǔ)區(qū)或裝入指定字節(jié)。include 將一個(gè)源文件插入程序中title 列表文件中加入標(biāo)題行nolist 匯編時(shí)不產(chǎn)生列表文件nocode 條件匯編時(shí),條件為假的不產(chǎn)生清單一、org 偽指令 org 用于為在它之后的程序設(shè)置地址值,它有一個(gè)參數(shù),其格式為:org 表達(dá)式表達(dá)式可以是一個(gè)具體的數(shù)值,也可以包含變量名,
3、如果包含變量名,則必須保證,當(dāng)?shù)谝淮斡龅竭@條偽指令時(shí),其中的變量必須已有定義(已有具體的數(shù)值),否則,無(wú)定義的值將由0替換,這將會(huì)造成錯(cuò)誤。在列表文件中,由org 定義的指令地址會(huì)被打印出來(lái)。org 指令有什么用途呢?指令被翻譯成機(jī)器碼后,將被存入系統(tǒng)的中,一般情況下,機(jī)器碼總是一個(gè)接一個(gè)地放在存儲(chǔ)器中,但有一些代碼,其位置有特殊要求,典型的是五個(gè)中斷入口,它們必須被放在0003h,000bh,0013h,001bh 和 0023h 的位置,否則就會(huì)出錯(cuò),如果我們編程時(shí)不作特殊處理,讓機(jī)器代碼一個(gè)接一個(gè)地生成,不能保證這些代碼正好處于這些規(guī)定的位置,執(zhí)行就會(huì)出錯(cuò),這時(shí)就要用到org 偽指令了。
4、看如下例子:例:int_0 equ 1000h time_0 equ 1010h int_1 equ 1020h time_1 equ 1030h serial equ 1040h ajmp start ; 跳轉(zhuǎn)到主程序起始點(diǎn)ljmp int_0 ; 外中斷 0處理程序ljmp time_0 ; 定時(shí)中斷 0 處理程序ljmp int_1 ; 外中斷 1處理程序ljmp time_1 ; 定時(shí)中斷 1 處理程序ljmp serial ; 串行口中斷程序start: nop end 上面的程序經(jīng)匯編后列表文件如下: the cybernetic micro systems 8051 family
5、 assembler, version 3.03 page 1 08-26-96 1000 = int_0 equ 1000h 1010 = time_0 equ 1010h 1020 = int_1 equ 1020h 1030 = time_1 equ 1030h 1040 = serial equ 1040h 0000 0111 ajmp start ; 跳轉(zhuǎn)到主程序起始點(diǎn)0002 021000 ljmp int_0 ; 外中斷 0 處理程序0005 021010 ljmp time_0 ; 定時(shí)中斷 0 處理程序0008 021020 ljmp int_1 ; 外中斷 1 處理程序00
6、0b 021030 ljmp time_1 ;定時(shí)中斷1處理程序000e 021040 ljmp serial ; 串行口中斷程序start: 0011 00 nop 0000 end the cybernetic micro systems 8051 family assembler, version 3.03 page 2 08-26-96 ;%t symbol name type value int_0 . . . . . . . . . . . . . i 1000 int_1 . . . . . . . . . . . . . i 1020 serial. . . . . . . .
7、 . . . . . i 1040 start . . . . . . . . . . . . . l 0011 time_0. . . . . . . . . . . . . i 1010 time_1. . . . . . . . . . . . . i 1030 ;%z 00 errors (0000) 由列表文件,可以繪出代碼在中的映象圖如下:代碼01h 11h 02h 10h 00h 02h 10h 10h 02h 10h 20h 地址00h 01h 02h 03h 04h 05h 06h 07h 08h 09h 0ah 代碼02h 10h 30h 02h 10h 40h 00h 地
8、址0bh 0ch 0dh 0eh 0fh 10h 11h 12h 13h 14h 15 由上面的映象圖可知,在處的代碼為,而不是我們要的,所以外斷程序不能被正確執(zhí)行,其它各中斷程序的情況同樣如此,如在處,本來(lái)存放的應(yīng)當(dāng)是定時(shí)器中斷程序,但按上述的映象圖,處開始的個(gè)代碼是:, ,這是定時(shí)器的入口地址,所以,如果定時(shí)器發(fā)生中斷,所執(zhí)行的其實(shí)是定時(shí)器的中斷程序,這當(dāng)然不對(duì)。例:int_0 equ 1000h time_0 equ 1010h int_1 equ 1020h time_1 equ 1030h serial equ 1040h ajmp start ; 跳轉(zhuǎn)到主程序起始點(diǎn)org 0003
9、h ljmp int_0 ; 外中斷 0處理程序org 000bh ljmp time_0 ; 定時(shí)中斷 0 處理程序org 0013h ljmp int_1 ;外中斷1處理程序org 001bh ljmp time_1 ; 定時(shí)中斷 1 處理程序org 0023h ljmp serial ; 串行口中斷程序start: nop end 上面的程序經(jīng)過(guò)匯編后列表文件如下:the cybernetic micro systems 8051 family assembler, version 3.03 page 1 08-26-96 1000 = int_0 equ 1000h 1010 = ti
10、me_0 equ 1010h 1020 = int_1 equ 1020h 1030 = time_1 equ 1030h 1040 = serial equ 1040h 0000 0126 ajmp start ; 跳轉(zhuǎn)到主程序起始點(diǎn)0003 org 0003h 0003 021000 ljmp int_0 ; 外中斷 0 處理程序000b org 000bh 000b 021010 ljmp time_0 ; 定時(shí)中斷 0處理程序0013 org 0013h 0013 021020 ljmp int_1 ; 外中斷 1 處理程序001b org 001bh 001b 021030 ljmp
11、 time_1 ; 定時(shí)中斷 1處理程序0023 org 0023h 0023 021040 ljmp serial ;串行口中斷程序start: 0026 00 nop 0000 end the cybernetic micro systems 8051 family assembler, version 3.03 page 2 08-26-96 ;%t symbol name type value int_0 . . . . . . . . . . . . . i 1000 int_1 . . . . . . . . . . . . . i 1020 serial. . . . . . .
12、 . . . . . . i 1040 start . . . . . . . . . . . . . l 0026 time_0. . . . . . . . . . . . . i 1010 time_1. . . . . . . . . . . . . i 1030 ;%z 00 errors (0000) 由列表文件,可以繪出代碼在中的映象圖如下:代碼01h 11h 02h 10h 00h 地址00h 01h 02h 03h 04h 05h 06h 07h 08h 09h 代碼02h 10h 10h 02h 01h 地址0bh 0ch 0dh 0eh 0fh 10h 11h 12h 1
13、3h 14h 代碼02h 10h 30h 地址16h 17h 18h 19h 1ah 1bh 1ch 1dh 1eh 1fh 代碼02h 10h 40h 00h 地址21h 22h 23h 24h 25h 26h 27h 28h 29h 2ah 由映象圖可知,各中斷程序的代碼都在其規(guī)定地址處,一旦產(chǎn)生中斷即可執(zhí)行相應(yīng)的程序。 至于圖中未填的部分(如 02h),根據(jù)各編程器不同而不同,一般為 ffh 或 00h。二、end end 語(yǔ)句標(biāo)志源代碼的結(jié)束, 匯編程序遇到end 語(yǔ)句即停止運(yùn)行。 若沒(méi)有 end語(yǔ)句,匯編將報(bào)錯(cuò)。end 語(yǔ)句有一個(gè)參數(shù),可以是數(shù)值0,也可以是表達(dá)式,其格式是:標(biāo)號(hào):
14、end 表達(dá)式它的值就是程序的地址并且作為一個(gè)特殊的記錄寫入hex 文件。若這個(gè)表達(dá)式省略, hex 文件中其值就是0。三、equ equ 以及其它一些符號(hào)定義偽指令用來(lái)給程序中出現(xiàn)的一些符號(hào)賦值。對(duì)這些符號(hào)名的要求與其它符號(hào)相同,即長(zhǎng)度不限,大小寫字母可互換并且必須以字母開頭。由等值指令定義的符號(hào)是匯編符號(hào)表的一部分。等值偽指令有兩種形式。一種用 equ,另一種用字符 “=”即符號(hào)名equ 表達(dá)式符號(hào)名= 表達(dá)式兩種形式的效果是一樣的。符號(hào)名在左邊, 其對(duì)應(yīng)的值在右邊。 值可以是變?cè)?,其它的符?hào)名或表達(dá)式。只要在兩遍掃描中求出表達(dá)式的值就行,否則引用該符號(hào)名時(shí)將報(bào)錯(cuò)。當(dāng)表達(dá)式的值是字符串時(shí),
15、只取后兩個(gè)字符。若串長(zhǎng)為1,高位字節(jié)被置0,符號(hào)名的值被打印在程序清單中。由等值偽指令定義的符號(hào)名不允許重名。如果經(jīng)定義的符號(hào)名被重定義,則匯編將報(bào)出錯(cuò),并且這個(gè)符號(hào)名按新定義的處理,最好不要在程序中出現(xiàn)重名。例:0469= abc equ 469h 0464= xy equ abc-5 02f0= jk = 752 0754 xyjk = xy+jk 在列表文件中最左邊的數(shù)字不是這些偽指令所在的地址而是通過(guò)匯編后賦給符號(hào)名的值。第一條符號(hào)名abc 被起來(lái) 469h,第二條 xy 被賦于 abc-5 ,因此 xy 的值為 469h-5=464h,jk 的值為 752(即 2f0h),xyjk
16、的值xy+jk=464h+2f0h=754h 四、set set 偽指令有些類似于等值偽指令,它定義了一個(gè)整數(shù)類型的符號(hào)名,它的格式為符號(hào)名set 表達(dá)式set 偽指令與等值偽指令的唯一區(qū)別在于set 偽指令所定義的符號(hào)名右以在程序中多次定義,而不報(bào)錯(cuò)。例:002d= k57 set 101101b 8707= k57 set 34567 五、data 與 byte data 與 byte 都是用來(lái)定義字節(jié)類型的存儲(chǔ)單元,賦予字節(jié)類型的存儲(chǔ)單元一個(gè)符號(hào)名,以便在程序中通過(guò)符號(hào)名來(lái)訪問(wèn)這個(gè)存儲(chǔ)單元,以幫助對(duì)程序的理解。byte 與 date 之間的區(qū)別類似于equ 和 set,byte 偽指令不
17、能定義重名。六、word word 偽指令類似于date 偽指令,只是 word 偽指令定義了一個(gè)字類型的符號(hào)名,其格式為:符號(hào)名word 表達(dá)式0027= val31 word 39 0021= par7 word 21h 一個(gè)字由個(gè)字節(jié)組成。當(dāng)然,因?yàn)閰R編語(yǔ)言集沒(méi)有字操作,所以程序執(zhí)行時(shí),只處理字節(jié)。偽指令僅僅允許用戶定義一個(gè)認(rèn)為是字的存儲(chǔ)位置。七、bit bit 偽指令定義了一個(gè)字位類型的符號(hào)名,其格式為:符號(hào)名bit 表達(dá)式這里表達(dá)式的值是一個(gè)位地址,這個(gè)偽指令有助于位的地址符號(hào)化。例:002f= log3 bit 47 0014= y731 bit 14h 八、altname 替換名
18、( altname )偽指令提供用戶一種手段,以定義一個(gè)符號(hào)名來(lái)替換一個(gè)保留字,此后這個(gè)答名與被替換的保留字均可等效地用于程序中。任何保留類型的答名均可被替換。替換名偽指令格式為:altname 保留字,新名例:0002= altname r2 count 013a ea mov a,r2 013b e502 mov a,count 九、偽指令用于定義一個(gè)連續(xù)的存儲(chǔ)區(qū),給該存儲(chǔ)區(qū)的存儲(chǔ)單元賦值。該偽指令的參數(shù)即為存儲(chǔ)單元的值,在表達(dá)式中對(duì)變?cè)獋€(gè)數(shù)沒(méi)有限制,只要此條偽指令能容納在源程序的一行內(nèi),其格式為:標(biāo)號(hào):db 表達(dá)式只要表達(dá)式不是字符串,每一表達(dá)式值都被賦給一個(gè)字節(jié)。計(jì)算表達(dá)式值時(shí)按位處理
19、,但其結(jié)果只取低位,若多個(gè)表達(dá)式出現(xiàn)在一個(gè)偽指令中,它們必須以逗號(hào)分開。表達(dá)式中有字符串時(shí),以單引號(hào)“ ”作分隔符,每個(gè)字符占一個(gè)字節(jié),字符串不加改變地被存在各字節(jié)中,并不將小寫字母轉(zhuǎn)換成大寫字母。例如:db 00h 01h 03h 46h db this is a demo! 十、dw dw 為以字節(jié)為單元(十六位二進(jìn)制)來(lái)給一個(gè)的存儲(chǔ)區(qū)賦值,其格式為:標(biāo)號(hào):dw 表達(dá)式例如:0000 3035 d46b dw 12341,54379,10110100101110b 0004 2d2e 0006 4344 4243 dw abcd,bc,a 000a 0041 000c 2868 02e8
20、dw 456*375h,83+295h,yz,72h-456 0010 595a feaa 十一、 ds ds 為定義存儲(chǔ)內(nèi)容的偽指令,用它定義一個(gè)存儲(chǔ)區(qū),并用指定的參數(shù)填滿該存儲(chǔ)區(qū)。ds 偽指令包含兩個(gè)變?cè)?,第一個(gè)變?cè)x了存儲(chǔ)區(qū)的長(zhǎng)度的字節(jié)數(shù),在匯編時(shí),匯編程序?qū)⑻^(guò)這些單元把其它指令匯編在這些字節(jié)之后,因此在使用偽指令時(shí)第一個(gè)變?cè)豢苫盍Φ诙€(gè)變?cè)硎驹谶@些單元中真入什么值,第二個(gè)變?cè)梢曰盍盍r(shí)這些字節(jié)將不處理。下例中0173 處有一條 ds 9,則空出 9 個(gè)字節(jié),下一第指令被匯編到017c 處;在 017c 處空出 1bh 個(gè)單元,在這些字節(jié)中被27h 所填充。ds 指令的格式如
21、下:標(biāo)號(hào):ds 表達(dá)式,表達(dá)式表達(dá)式定義了存儲(chǔ)區(qū)的長(zhǎng)度(以字節(jié)為單位)。這個(gè)變?cè)荒苁÷?。表達(dá)式是可選擇的,它的值低位用以填入所定義的存儲(chǔ)區(qū)。若省略則這部分存儲(chǔ)單元不處理。例:0000 04 inc a 0001 ds 9 000a 04 inc a 000b ds 1bh,27h 0026 04 inc a 十二、include include 偽指令用于鏈接源文件,即將一個(gè)源文件插入到另一個(gè)源文件中。它有一個(gè)參數(shù), 指出將要插入的文件名, 該文件名中可包括驅(qū)動(dòng)器名和路徑名。若文件沒(méi)有擴(kuò)展名,則默認(rèn)為是。但待插入的文件必須是可以打開的。若文件打開操作失敗,則產(chǎn)生致命錯(cuò)誤,匯編將停止運(yùn)行。反之
22、,匯編程序?qū)⑽募?nèi)容讀入并按源代碼處理。當(dāng)遇到文件結(jié)速符時(shí),匯編程序返回到include 偽指令處繼續(xù)身下處理源程序。被插入的文件在程序清單中以“ ”開頭。本宏匯編版本支持級(jí)嵌套, 可在程序中用include 偽指令插入任意多個(gè)文件,但是,在一般情況下允許打開的文件數(shù)量是有限的,如果用戶需要打開較多的文件,則必須在文件中加入0 或更多的值,若超過(guò)級(jí)嵌套或打開的文件太多,則產(chǎn)生致命錯(cuò)誤,匯編中止運(yùn)行。include 偽指令提供了模塊化程序設(shè)計(jì)手段,在匯編程序處理主程序時(shí),模塊被插入,盡管這不等價(jià)于鏈接和裝配可重定位的目標(biāo)模塊,但它具有類似的功能,被插入的源文件中不應(yīng)該包含偽指令,否則,匯編就會(huì)提
23、前停止運(yùn)行,偽指令只能出現(xiàn)在主程序中。此外,在主程序進(jìn)行匯編前所有附加的源文件必須通過(guò)匯編,產(chǎn)生相應(yīng)的及文件,由于附加的文件沒(méi)有偽指令,因此,附加文件匯編時(shí),匯編程序?qū)@示:“ 沒(méi)有結(jié)束語(yǔ)句” 的錯(cuò)誤,但并不影響與主程序的鏈接。下面是一個(gè)使用include 偽指令的例子,其主程序的源文件為:;main.asm org 27h start: clr a mov r3,a include mod1 inc r5 include mod2.asm dec r3 end start 主程序?yàn)閹в袀沃噶畹耐暾脑次募?。程序中有兩include 偽指令,分別將兩附加的文件及鏈接到主程序中。以下是這兩個(gè)文件
24、。;mod1.asm mov r2,#31h mov r5,#18h ;mod2.asm mov r6,#47h anl a,#07h mov r1,a 注意及均沒(méi)有指令。在進(jìn)行匯編時(shí)必須先對(duì)和進(jìn)行匯編,然后在匯編,由于上兩個(gè)文件沒(méi)有偽指令,所以在匯編時(shí)會(huì)出現(xiàn)錯(cuò)誤提示,不用管它,繼續(xù)下面的工作,就可以得到正確的結(jié)果。以下是形成的列表文件:the cybernetic micro systems 8051 family assembler, version 3.03 page 1 ;mod2.asm mov r6,#47h anl a,#07h mov r1,a 08-27-96 ;main.a
25、sm 0027 org 27h start: 0027 e4 clr a 0028 fb mov r3,a i include mod1 i ;mod1.asm i0029 7a31 mov r2,#31h i002b 7d18 mov r5,#18h i 002d 0d inc r5 i include mod2.asm i ;mod2.asm i002e 7e47 mov r6,#47h i0030 5407 anl a,#07h i0032 f9 mov r1,a 0033 1b dec r3 0027 end start the cybernetic micro systems 8051 family assembler, version 3.03 page 2 08-27-96 ;%t symbol name type value start . . . . . . . . . . . . . l 0027 ;%z 00 errors (
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年智能穿戴設(shè)備產(chǎn)品購(gòu)銷合同協(xié)議4篇
- 變譯理論視域下《法治的細(xì)節(jié)》(第5章)漢英翻譯報(bào)告
- 基于RS與GIS的自然保護(hù)區(qū)保護(hù)成效多因素協(xié)同分析
- 農(nóng)產(chǎn)品區(qū)域公用品牌廟上冬棗的品牌識(shí)別體系建設(shè)
- 德州市糧食生產(chǎn)托管服務(wù)模式研究
- 二零二五版管茜離婚案財(cái)產(chǎn)分割與子女撫養(yǎng)及監(jiān)護(hù)權(quán)協(xié)議6篇
- 二零二五年電子商務(wù)平臺(tái)虛擬現(xiàn)實(shí)購(gòu)物體驗(yàn)開發(fā)合同3篇
- 二零二五年防水材料行業(yè)綠色供應(yīng)鏈管理合作協(xié)議2篇
- 二零二五版園林綠化工程節(jié)能減排合作協(xié)議4篇
- 二零二五年度樓頂場(chǎng)地租賃與知識(shí)產(chǎn)權(quán)合同4篇
- 替格瑞洛藥物作用機(jī)制、不良反應(yīng)機(jī)制、與氯吡格雷區(qū)別和合理使用
- 河北省大學(xué)生調(diào)研河北社會(huì)調(diào)查活動(dòng)項(xiàng)目申請(qǐng)書
- GB/T 20920-2007電子水平儀
- 如何提高教師的課程領(lǐng)導(dǎo)力
- 企業(yè)人員組織結(jié)構(gòu)圖
- 日本疾病診斷分組(DPC)定額支付方式課件
- 兩段焙燒除砷技術(shù)簡(jiǎn)介 - 文字版(1)(2)課件
- 實(shí)習(xí)證明模板免費(fèi)下載【8篇】
- 復(fù)旦大學(xué)用經(jīng)濟(jì)學(xué)智慧解讀中國(guó)課件03用大歷史觀看中國(guó)社會(huì)轉(zhuǎn)型
- 案件受理登記表模版
- 最新焊接工藝評(píng)定表格
評(píng)論
0/150
提交評(píng)論