




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、第4講 變量定義及常用偽指令熟悉常數的分類及其正確的表示方法了解表達式中涉及到的運算符的功能作用掌握變量定義偽指令DB/DW/DD,理解變量在內存存儲空間中的分布掌握OFFSET、SEG、PTR、$偽指令,了解其他常用地址操作符和類型操作符掌握字符串的輸入輸出方法第4講 變量定義及常用偽指令硬指令和偽指令硬指令使CPU產生動作、并在程序執行時才處理的語句,如mov、add等偽指令Directive不產生CPU動作、在程序執行前由匯編程序處理的說明性語句,例如,數據說明、變量定義等等偽指令與具體的處理器類型無關,但與匯編程序的版本有關 本課程采用微軟宏匯編程序 MASM 6.11匯編語言程序的語
2、句格式 執行性語句由硬指令構成的語句,它通常對應一條機器指令,出現在程序的代碼段中:標號: 硬指令助記符 操作數,操作數;注釋 說明性語句由偽指令構成的語句,它通常指示匯編程序如何匯編源程序:名字 偽指令助記符 參數,參數,;注釋標號是反映硬指令位置(邏輯地址)的標識符,后跟一個冒號分隔名字是反映偽指令位置(邏輯地址)和屬性的標識符,后跟空格或制表符分隔,沒有一個冒號處理器指令的操作數可以是立即數、存放器和存儲單元偽指令的參數可以是常數、變量名、表達式等,可以有多個,參數之間用逗號分隔語句中由分號“;”開始的部分為注釋內容,用以增加源程序的可讀性必要時,一個語句行也可以由分號開始作為階段性注釋
3、匯編程序在翻譯源程序時將跳過該部分,不對它們做任何處理標識符標識符Identifier一般最多由31個字母、數字及規定的特殊符號如 _、 、$、?、%組成,不能以數字開頭。默認情況下,匯編程序不區別標識符中的字母大小寫一個程序中,每個標識符的定義是唯一的,還不能是匯編語言采用的保存字偽硬指令助記符例如:MOV、ADD指令助記符例如:DB、EQU操作符例如:OFFSET、PTR存放器名例如:AX、CS預定義符號例如:data第4講 變量定義及常用偽指令1 數值型參數2 變量定義偽指令3 變量和標號的屬性4 字符串的輸入輸出方法1 數值型參數在源程序語句格式的4個組成局部中,參數是指令的操作對象學
4、習硬指令時被稱為操作數,參數之間用逗號分隔參數根據指令不同可以沒有,可以有1個、2個或多個匯編語言程序中,指令參數有數值型,它的主要形式是常數和數值表達式;匯編語言程序中,指令參數還有地址型,它的主要形式是標號和名字變量名、段名、過程名等1 常數常數常量表示一個固定的數值它又分成多種形式:1十進制常數2十六進制常數3二進制常數4八進制常數5字符串常數6符號常數十進制常數由0 9數字組成,以字母D或d結尾缺省情況下,后綴D或d可以省略匯編語言大小寫不敏感,D和d通用例如:100、255DDEBUG下默認的是十六進制數據,但在編寫匯編語言源程序的時候默認的是十進制!十六進制常數由09、AF組成,以
5、字母H或h結尾以字母AF開頭的十六進制數,前面要用0表達,以防止與其他符號混淆匯編語言大小寫不敏感, H和h 通用例如:64H、0FFh、0B800H二進制常數由0或1兩個數字組成,以字母B或b結尾匯編語言大小寫不敏感,B和b通用例如:01101100B字符串常數用單引號或雙引號括起來的單個字符或多個字符,其數值是每個字符對應的ASCII碼的值例如:d = 64HAB= 4142HHello, Everybody !符號常數利用一個標識符表達的一個數值,用于常量定義等價EQU偽指令符號名 EQU 數值表達式符號名 EQU 等號=偽指令符號名 = 數值表達式EQU不允許重復賦值,但=那么無此限制
6、常數假設使用有意義的符號名來表示,可以提高程序的可讀性,同時更具有通用性實例符號定義DosWriteChar equ 2CarriageReturn = 13CallDOS equ 符號應用左邊程序段等價右側的符號形式mov ah,2;mov ah,DosWriteCharmov dl,13;mov dl,CarriageReturnint 21h;CallDOS符號常數實例2 數值表達式數值表達式一般是指由運算符連接的各種常數所構成的表達式匯編程序在匯編過程中計算表達式,最終得到一個數值程序運行之前,就已經計算出了表達式;所以,程序運行速度沒有變慢,但增強程序的可讀性運算符算術運算符+ -
7、* / MOD邏輯運算符AND OR XOR NOT移位運算符SHL SHR關系運算符EQ NE GT LT GE LE上下別離符HIGH LOW HIGHWORD LOWWORD算術運算符實現加、減、乘、除、取余的算術運算mov ax,3*4+5;等價于 mov ax,17其中MOD也稱為取模,它產生除法之后的余數,如19 mod 7 = 5加+和減-運算符還可以用于地址表達式除加、減外,其他運算符的參數必須是整數邏輯運算符實現按位相與、相或、異或、求反的邏輯運算or al,03h AND 45h;等價于 or al,01h移位運算符實現對數值的左移、右移的邏輯操作;移入低位或高位的是0格式
8、為:數值表達式 SHL/SHR 移位次數mov al,0101b SHL (2*2);等價于 mov al,01010000b關系運算符用于比較和測試符號數值MASM用0FFFFH補碼 -1表示條件為真MASM用0000H表示條件為假mov bx,(PORT LT 5)AND 20)OR(PORT GE 5)AND 30);當PORT5時,匯編結果為mov bx,20;否那么,匯編結果為mov bx,30上下別離符取數值的高半局部或低半局部HIGH、LOW從一個字數值或符號常量中得到高、低字節mov ah,HIGH 8765h;等價于mov ah,87h從MASM 6.0引入的HIGHWORD
9、、LOWWORD取一個符號常量不能是其他常數的高字或低字局部dd_value equ 0ffff1234h;定義一個符號常量mov ax,LOWWORD dd_value;等價于mov ax,1234h2 變量定義偽指令變量定義Define偽指令為變量申請固定長度的存儲空間,并可同時將相應的存儲單元初始化變量名 偽指令助記符 初值表 變量定義偽指令最常使用變量名變量名為用戶自定義標識符,表示初值表首元素的邏輯地址;用這個符號表示地址,常稱為符號地址變量名可以沒有。這種情況,匯編程序將直接為初值表分配空間,無符號地址設置變量名是為了方便存取它指示的存儲單元初值表初值表是用逗號分隔的參數主要由數值
10、常數、表達式或?、DUP組成?表示初值不確定,即未賦初值;DUP表示重復初值DUP的格式為:重復次數 DUP(重復參數)變量定義偽指令助記符變量定義偽指令根據申請的主存空間單位分類DB定義字節偽指令DW定義字偽指令DD定義雙字偽指令DF定義3字偽指令DQ定義4字偽指令DT定義10字節偽指令還有定位偽指令定義字節單元偽指令DBDB偽指令用于分配一個或多個字節單元,并可以將它們初始化為指定值初值表中每個數據一定是字節量Byte,存放一個8位數據: 可以是0255的無符號數 或是128127帶符號數 也可以是字符串常數datasegment;數據段Xdb a,-5db 2 dup(100),?Ydb
11、 ABCdataends字節單元定義實例mov al,X;此處X表示它的第1個數據,故ALadec X+1;對X為始的第2個數據減1,故成為-6mov Y,al;現在Y這個字符串成為 aBC字節變量的應用定義字單元偽指令DWDW偽指令用于分配一個或多個字單元,并可以將它們初始化為指定值初值表中每個數據一定是字量Word,一個字單元可用于存放任何16位數據: 一個段地址一個偏移地址 兩個字符 065535之間的無符號數 3276832767之間的帶符號數datasegment;數據段countdw 8000h,?,ABmaxintequ 64hnumberdw maxintarraydw max
12、int dup(0)dataends字單元定義實例字變量和字常量的定義:WNUMEQU 5678H;定義WNUM為常量COUNTDW 20H;定義COUNT變量,假設在數據段的偏移地址為10H字變量和字常量的應用:MOV AX,BX+SI+WNUM; MOV AX,BX+SI+5678HMOV AX,COUNT; MOV AX,0010HMOV AX,SI+COUNT; MOV AX,COUNTSI; MOV AX,SI+10HLEA BX,COUNT; LEA BX,0010HMOV BX,OFFSET COUNT; MOV BX,0010H字變量和字常量例題.model small.sta
13、ck.dataXdw 5Ydw 6Zdw 7Wdw ? .code.startupmov ax,Xadd ax,Yadd ax,Zmov W,ax.exit 0end設有3個字變量X,Y和Z,初值分別為5,6和7,試求出三者之和,并存入字變量W中。定義雙字單元偽指令DDDD偽指令用于分配一個或多個雙字單元,并可以將它們初始化為指定值初值表中每個數據是一個32位的雙字量Double Word: 可以是有符號或無符號的32位整數 也可以用來表達16位段地址高位字和16位的偏移地址低位字的遠指針varddDD 0,?,12345678hfarpointDD 00400078h定位偽指令定位偽指令控制
14、數據的偏移地址ORG 參數ORG偽指令是將當前偏移地址指針指向參數表達的偏移地址:ORG 100h;從100h處安排數據或程序ORG $+10;使偏移地址加10,即跳過10個字節空間MASM中,符號“$表示當前偏移地址值3 變量和標號的屬性 地址屬性標號和名字對應存儲單元的邏輯地址邏輯地址包括:段地址和偏移地址 類型屬性標號、子程序名的類型可以是NEAR近和FAR遠,分別表示段內或段間變量名的類型可以是BYTE字節、WORD字和DWORD雙字等地址操作符取得名字或標號的段地址和偏移地址兩個屬性 將括起的表達式作為存儲器地址$當前偏移地址:采用指定的段地址存放器OFFSET 名字/標號返回名字或
15、標號的偏移地址SEG 名字/標號返回名字或標號的段地址org $+10arraydb 45,45h.codemov ax,seg arraymov ds,axmov bx,offset array;等價于 lea bx,arraymov cl,array+4;等效于 mov cl,array4mov ax,es:2000h地址操作符實例 加4個字節單元類型名 PTR 名字/標號PTR操作符使名字或標號具有指定的類型類型名可以是BYTE/WORD/DWORD/FWORD/QWORD/TBYTE或者是NEAR/FARmov al,byte ptr w_var;w_var是一個字變量使用PTR操作符
16、,可以臨時改變名字或標號的類型4 字符串的輸入輸出方法同字符的輸入輸出類似,字符串的輸入輸出也采用DOS提供給用戶的用于調用系統功能的21H號中斷來實現。通常按照如下4個步驟進行: 在AH存放器中設置系統功能調用號 在指定存放器中設置入口參數 執行指令INT 21H或ROM-BIOS的中斷向量號實現中斷效勞程序的功能調用 根據出口參數分析功能調用執行情況字符串輸出的功能調用DOS功能調用INT 21H功能號:AH09H入口參數:DS:DX欲顯示字符串在主存中的首地址字符串應以$24H結束功能:在顯示器輸出指定的字符串可以輸出回車0DH和換行0AH字符產生回車和換行的作用例:顯示字符串.mode
17、l small.stack.data buf1 db Hello,0dh,0ah, this is an example.$,0dh,0ah buf2 db -END-$.code.startupmov dx, offset buf1mov ah, 9int 21h lea dx, buf2mov ah, 9int 21h.exit 0 end 如果去掉“$”顯示的結果又會是什么?字符串輸入的功能調用DOS功能調用INT 21H功能號:AH0AH入口參數:DS:DX緩沖區首地址執行該功能調用時,用戶按鍵,最后用回車確認本調用可執行全部標準鍵盤編輯命令;用戶按回車鍵結束輸入,如按CtrlBrea
18、k或CtrlC那么中止關鍵要定義好緩沖區緩沖區的定義第1字節事先填入最多欲接收的字符個數包括回車字符,可以是1255第2字節將存放實際輸入的字符個數不包括回車符第3字節開始將存放輸入的字符串實際輸入的字符數多于定義數時,多出的字符丟掉,且響鈴例2.50:輸入字符串bufferdb 81;定義緩沖區;第1個字節填入可能輸入的最大字符數db 0;存放實際輸入的字符數db 81 dup(0);存放輸入的字符串.mov dx,seg buffer;偽指令seg取得buffer的段地址mov ds,dx;設置數據段DSmov dx,offset buffermov ah,0ahint 21h想一想:如何實現將輸入的字符串進行輸出.model small.stack.data msg1 dbplease input a string:,0dh,0ah,$ msg2 dbcontents of the string is:,0dh,0ah,$ buffer1 db 100 db 0 db 100 dup(0).code.startupmovdx, offset msg1
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 九州職業技術學院《詞匯語法》2023-2024學年第一學期期末試卷
- 2024-2025學年運城市重點中學九上化學期末調研試題含解析
- 湖北省武漢十二中學2024-2025學年數學七上期末達標檢測試題含解析
- 2024年安徽省滁州市定遠育才學校數學七年級第一學期期末質量檢測試題含解析
- 職業道德模范課件
- 電力安全工作規程線路變電配電部分知識試卷
- 鐵路客運必知必會站務綜合安全管理知識試卷
- 給媳婦的保證書范本
- 職業道德與法治中職課件教學
- 職業道德與法律第二課件
- 《網店運營與管理》整本書電子教案全套教學教案
- GB 27954-2020 黏膜消毒劑通用要求
- 中考《紅星照耀中國》各篇章練習題及答案(1-12)
- (完整版)ECRS培訓課件
- 外輪理貨工作英語
- 河流改道施工方案
- 技術規格書Word版
- 《醫療機構使用統一的〈北京地區醫療機構門急診病歷手冊〉有關規
- 【003-2量化標準】衛生專業技術人員履職考核記錄評價
- (完整版)mmse量表
- 湖北省恩施州2016年中考數學試卷及答案解析(Word版)
評論
0/150
提交評論