資源描述:
《8086偽指令(匯編語言程序格式)》由會員上傳分享,免費在線閱讀,更多相關內容在行業(yè)資料-天天文庫。
1、8086偽指令(匯編語言程序格式)匯編語言程序中的語句可以由指令、偽指令和宏指令組成。上一章我們介紹了8086指令系統(tǒng)中的6類指令,每一條指令都對應一種CPU操作。偽指令又稱為偽操作,它是在對源程序匯編期間由匯編程序處理的操作,它們可以完成如處理器選擇、定義程序模式、定義數(shù)據(jù)、分配存儲區(qū)、指示程序結束等功能。宏指令是由用戶按照宏定義格式編寫的一段程序,其中語句可以是指令、偽指令,甚至是已定義的宏指令。宏指令將在第七章中介紹。偽指令和指令的區(qū)別在于,每一條指令必須生成機器代碼,然后在程序運行期間由CPU來執(zhí)行其操作;而偽指令是在匯編期間由
2、匯編程序執(zhí)行的操作命令,除了數(shù)據(jù)定義及存儲器分配偽指令分配存儲器空間外,其它偽指令不生成目標碼。和各種指令一樣,偽指令也是程序設計不可缺少的工具。下面介紹一些常用的偽指令。4.2.1段定義偽指令 段定義偽指令是表示一個段開始和結束的命令,80x86有兩種段定義的方式:完整段定義和簡化段定義,分別使用不同的段定義偽指令來表示各種段。4.2.1.1完整的段定義偽指令完整段定義偽指令的格式如下:段名SEGMENT . ?。 。蚊鸈NDS段名由用戶命名。對于數(shù)據(jù)段、附加段和堆棧段來說,段內一般是存儲單元的定義、分配等偽指令語句;對于代碼段
3、中則主要是指令及偽指令語句。定義了段還必須說明哪個段是代碼段,哪個段是數(shù)據(jù)段。ASSUME偽指令就是建立段和段寄存器關系的偽指令,其格式為:ASSUME段寄存器名:段名,…段寄存器名必須是CS、DS、ES和SS中的一個,而段名必須是由SEGMENT定義的段名?!ざㄎ活愋停赫f明段的起始邊界值(物理地址)?! そM合類型:說明程序連接時的段組合方法?!ゎ悇e:在單引號中給出連接時組成段組的類型名。連接程序可把相同類別的段的位置靠在一起。例4.1 ;*********************** data_seg1segment
4、 ;定義數(shù)據(jù)段 . . . data_seg1ends ;*********************** data_seg2segment ;定義附加段 . . . data_seg2ends ;*********************** code_segsegment ;定義代碼段 assumecs:code_seg,ds:data_seg1,es:data_s
5、eg2 start: ;程序執(zhí)行的起始地址 ;setDSregistertocurrentdatasegment mov ax,data_seg1 ;數(shù)據(jù)段地址 mov ds,ax ;存入DS寄存器 ;setESregistertocurrentextrasegment mov ax,data_seg2 ;附加段地址 mov es,ax ;存入ES寄存器 . . . code_seg
6、ends ;代碼段結束 ;************************** end start 由于ASSUME偽指令只是指定某個段分配給哪一個段寄存器,它并不能把段地址裝入段寄存器中,所以在代碼段中,還必須把段地址裝入相應的段寄存器中: MOV AX,DATA_SEG1 ;數(shù)據(jù)段地址 MOV DS,AX ;存入DS寄存器 MOV AX,DATA_SEG2 ;附加段地址 MOV ES,AX ;存入ES寄存器 如果程序中還定義了堆棧段STACK_SEG,也
7、需要把段地址裝入SS中: MOV AX,STACK_SEG ;堆棧段地址 MOV SS,AX ;存入ES寄存器 注意,在程序中不需要用指令裝入代碼段的段地址,因為在程序初始化時,裝入程序已將代碼段的段地址裝入CS寄存器了?! 榱藢Χ味x作進一步地控制,SEGMENT偽指令還可以增加類型及屬性的說明,其格式如下: 段名 SEGMENT [定位類型][組合類型]['類別'] . . . 段名 ENDS []中的內容是可選的,一般情況下,這
8、些說明可以不用。但是,如果需要用連接程序把本程序與其他程序模塊相連接時,就需要提供類型和屬性的說明。表4.2.1·定位類型:說明段的起始邊界值(物理地址)。定位類型說明BYTE段可以從任何地址邊界開始WOR