《電子技術應用》
您所在的位置:首頁 > 嵌入式技術 > 解決方案 > 匯編基礎:偽指令

匯編基礎:偽指令

2017-06-10
關鍵詞: 匯編

弄懂了前面幾篇關于基礎的文章,下面就開始我們真正的匯編之旅了,在這一篇中我們著重來強調下匯編語言的偽指令。偽指令是匯編語言程序設計中的一個主要的部分,屬于控制命令,在匯編語言中的數據定義、存儲單元分配、指示程序結果等功能。

首先,我想很多人對偽指令語句與指令語句的區別不是太清楚吧,兩者的區別在于:偽指令由匯編程序解釋后完成相應的操作,會變厚不產生目標機器代碼,進過匯編后的目標程序中,偽指令碼已經不復存在。指令語句由匯編程序翻譯成機器目標代碼,一定有對應的目標代碼,并且只能在程序運行時才能由CPU完成其操作。

一、符號定義偽指令

1】、等值偽指令EQU

偽指令格式: 符號名 EQU 表達式

功能:用一個符號名代替表達式的值,是符號名與表達式等價。

2】、等號偽指令“=”

偽指令格式: 符號名  =  表達式

等號偽指令“=”的功能、含義和表達式的內容等都與等值偽指令EQU基本相同,其主要不同點是:

a、等號偽指令允許重新定義。

b、等號偽指令后的表達式不能是指令助記符或關鍵字。

二、數據定義偽指令

1】、DB偽指令

偽指令格式:  變量名   DB, 表達式1[,表達式2][,表達式3....]

功能: 定義字節變量,每個表達式的值占一個字節。

字節的值域對于無符號整數為0--255, 對于有符號整數位-128--127, 個表達式之間用逗號隔開,變量名為各表達式中第一項數據在存儲單元的符號地址,第一項數據后面的各項數據的單元地址依次在該符號地址上增一,如果某項數據的初值為“?”,則對應字節單元將不賦初值,其內容為不確定值。

2】、DW偽指令

偽指令格式:  變量名   DW, 表達式1[,表達式2][,表達式3....]

功能: 定義字變量,每個表達式的值占一個字。

字節的值域對于無符號整數為0--65535, 對于有符號整數位-32768--32767, 個表達式之間用逗號隔開,變量名為各表達式中第一項數據在存儲單元的符號地址,第一項數據后面的各項數據的單元地址依次在該符號地址上增一,如果某項數據的初值為“?”,則對應字節單元將不賦初值,其內容為不確定值。

3】、DD偽指令

其格式與功能同DB/DW,不同點是它定義的是雙字變量。

4】、DQ偽指令

其格式與功能同DB/DW,不同點是它定義的是四字變量。

5】、DT偽指令

其格式與功能同DB/DW,不同點是它定義的是五字變量。

三、LABEL屬性定義偽指令

偽指令格式: 名稱   LABEL 類型

功能:為當前的變量或標號定義一個新的類型,其功能同PTR運算符

LABEL指令通常與指令語句或數據定義偽指令連用,這時名稱就為與之連用的數據定義偽指令語句或指令語句中的變量或標號定義一個新的變量名或標號,以便補充和設置與之連用的變量或標號的類型屬性,因此,LABEL偽指令的名稱同樣具有段、偏移量和類型3個屬性。

四、SEGMENT/ENDS段定義偽指令

之前我們都知道Intel 8086/8088  CPU是通過4個段寄存器按分段尋址的方式來方位1MB的存儲器的,因此匯編語言源程序也是按段來組織的,一個程序可以由多個邏輯段組成,分別來存放數據、作堆棧使用、存放主程序、存放子程序等,而構造這些段用段定義偽指令SEGMENT/ENDS。

段定義偽指令格式:

段名  SEGMENT [定位類型][組合類型][類別名]

....        ;段的主體部分

段名  ENDS

功能:用于把程序分成若干個邏輯段,這些邏輯段根據其用途的不同分為代碼段、數據段、堆棧段和附加段。

1、定位類型

定位類型有5中:PARA、PAGE、DWORD、BYTE、WORD。

2、組合類型組合類型指定段與段之間的連接和定位關系,組合類型有6種:

NONE、PUBLIC、COMMON、STACK、AT、MEMORY

3、類別名

五、ASSUME段尋址偽指令

當CPU要訪問存儲器中某個存儲單元時,要把邏輯地址轉換成物理地址,那么要由某個段寄存器提供該存儲單元所在邏輯段的段基值,因此,要指定邏輯段與CPU中各段寄存器之間的關系,而段尋址偽指令ASSUME就是用來指示匯編程序對應關系的。

段尋址偽指令格式:ASSUME 段寄存器名:段名, 段寄存器名:段名, ....

其中段寄存器為CS, DS, SS, ES中的一個,段名是由SEGMENT/ENDS定義的段名。

六、PROC/ENDP過程定義偽指令

如果你懂一門最基本的語言,比如C語言的話,那這個偽指令應該會很好理解的,它跟高級語言的模塊化程序設計有點像,就是一個子函數,這樣才能使我們的程序實現“高聚合,低耦合”。

過程定義偽指令格式:

過程名 PROC    [NEAR/FAR]

.....

RET

.....

過程名 ENDP

這里的過程名就是在匯編程序中CALL的操作數,每一個過程中肯定要有一個返回指令RET,它可以在過程的任何位置。一個過程也不一定只有一條返回指令。

七、ORG定位偽指令和$當前位置計數器

當前位置計數器是一個功能很強大的偽指令,例如:

DATA    SEGMENT

STRING  DB  'YangZhiSen'

LENG    DB  $-STRING

DATA    ENDS

在上例中,有對$的使用,LENG的值就為字符串STRING的長度,

對于ORG定位偽指令的格式:

ORG 表達式

功能:將表達式的值賦給當前位置計數器,ORG語句后面的指令或數據以表達式給定的值作起始偏移量。

八、TITLE標題偽指令

標題偽指令格式:

TITLE 標題名

功能:給程序指定一個標題,以便在列表文件中每一頁的第1行都顯示這個標題。

九、END程序結束偽指令

程序結束偽指令格式:

END 起始地址

功能:標志源程序結束,并指定程序運行時的起始地址,即一方面告訴編譯程序END偽指令后面的任何語句在匯編時都被省去,另一方面又告訴匯編程序在程序裝入內存時根據起始地址的段基值和偏移量分別自動裝入CS和IP中。

十、PUBLIC和EXTRN模塊連接偽指令

因為這個我暫且未用到,所以有待以后再說。


本站內容除特別聲明的原創文章之外,轉載內容只為傳遞更多信息,并不代表本網站贊同其觀點。轉載的所有的文章、圖片、音/視頻文件等資料的版權歸版權所有權人所有。本站采用的非本站原創文章及圖片等內容無法一一聯系確認版權者。如涉及作品內容、版權和其它問題,請及時通過電子郵件或電話通知我們,以便迅速采取適當措施,避免給雙方造成不必要的經濟損失。聯系電話:010-82306118;郵箱:aet@chinaaet.com。
主站蜘蛛池模板: 真正全免费视频a毛片| www.四虎影视| 日本爽爽爽爽爽爽在线观看免| 伊人久久大香线蕉综合7| 青青青青久久久久国产的| 国产精品欧美视频另类专区| 一道本在线观看| 日韩在线看片免费人成视频播放| 亚洲熟妇色xxxxx欧美老妇| 精品欧美亚洲韩国日本久久| 国产成人无码精品久久久免费 | 久久97久久97精品免视看| 欧美乱妇高清视频免欢看关| 伊人色院成人蜜桃视频| 脱了美女内裤猛烈进入gif| 国产日韩精品在线| 97人人模人人爽人人少妇| 思思99re热| 久久久久亚洲AV无码专区首 | 欧美成人免费观看| 免看**毛片一片成人不卡| 老湿机一区午夜精品免费福利| 国产成人精品亚洲2020| 69日本xxxxxxxxx19| 天海翼一区二区三区高清视频| 中文字幕人成乱码熟女| 日韩亚洲人成在线综合| 亚洲国产日产无码精品| 热久久视久久精品18国产| 午夜免费不卡毛片完整版| 足本玉蒲团在线观看| 国产欧美另类精品久久久| 91福利电影福利在线观看| 女人是男人的未来的人| 中文天堂在线视频| 日本护士xxxx视频免费| 亚洲JIZZJIZZ中国少妇中文| 欧美日韩中文字幕在线| 亚洲精品乱码久久久久久自慰| 福利姬在线精品观看| 又粗又黑又大的吊av|