微機接口第七講2_第1頁
微機接口第七講2_第2頁
微機接口第七講2_第3頁
微機接口第七講2_第4頁
微機接口第七講2_第5頁
已閱讀5頁,還剩35頁未讀 繼續免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、第3章:3.1 匯編語言源程序格式完整的匯編語言源程序由段組成一個匯編語言源程序可以包含若干個代碼段、數據段、附加段或堆棧段,段與段之間的順序可隨意排列需獨立運行的程序必須包含一個代碼段,并指示程序執行的起始點,一個程序只有一個起始點 源程序由語句序列構成data segment m1 db 5h m2 db 6hdata endscode segment assume cs:code,ds:datastart: mov ax,data mov ds,ax mov al,06h mov bl,02h mul bl mov al,05h mul m1 mov al,03h mul al mov

2、ah,4ch int 21hcode endsend start第3章:3.1 匯編語言源程序格式所有的可執行性語句必須位于某一個代碼段內,說明性語句可根據需要位于任一段內通常,程序還需要一個堆棧段 源程序由語句序列構成第3章:匯編語言的語句格式執行性語句執行性語句用于表達處理器指令(也稱為硬指令),匯編后對應一條指令代碼。由處理器指令組成的代碼序列是程序設計的主體標號: 硬指令助記符 操作數,操作數 ;注釋data segment m1 db 5h m2 db 6hdata endscode segment assume cs:code,ds:datastart: mov ax,data m

3、ov ds,ax mov al,06h mov bl,02h mul bl mov al,05h mul m1 mov al,03h mul al mov ah,4ch int 21hcode endsend start第3章:匯編語言的語句格式說明性語句說明性語句用于表達偽指令,指示源程序如何匯編、變量怎樣定義、過程怎么設置等名字 偽指令助記符 參數,參數, ;注釋data segment m1 db 5h ; 偽指令 m2 db 6h ; 偽指令data endscode segment assume cs:code,ds:data; 偽指令start: mov ax,data mov d

4、s,ax mov al,06h mov bl,02h mul bl mov al,05h mul m1 mov al,03h mul al mov ah,4ch int 21hcode endsend start第3章:硬指令與偽指令硬指令(Instruction)使CPU產生動作、并在程序執行時才處理的指令硬指令就是第2章學習的處理器指令,與具體的處理器有關、與匯編程序無關偽指令(Directive)不產生CPU動作、在程序執行前由匯編程序處理的說明性指令偽指令與具體的處理器類型無關,但與匯編程序有關。不同版本的匯編程序支持不同的偽指令 硬指令和偽指令采用易于記憶的符合表達,這就是助記符第3

5、章:標號、名字與標識符標號是反映硬指令位置(邏輯地址)和屬性的標識符,后跟一個冒號分隔名字是反映偽指令位置(邏輯地址)和屬性的標識符,后跟空格或制表符分隔,沒有冒號標識符(Identifier)一般最多由31個字母、數字及規定的特殊符號(如 _、$、?、)組成,不能以數字開頭。默認情況下,匯編程序不區別標識符中的字母大小寫一個源程序中,每個標識符的定義是唯一的,還不能是匯編語言采用的保留字第3章:保留字保留字(Reserved Word)是匯編程序已經利用的標識符(也稱為關鍵字),主要有:硬指令助記符例如:MOV、ADD偽指令助記符例如:DB、DW操作符例如:OFFSET、PTR寄存器名例如:

6、AX、CS預定義符號例如:data 匯編語言大小寫不敏感第3章:操作數和參數處理器指令的操作數可以是立即數、寄存器和存儲單元偽指令的參數可以是常數、變量名、表達式等,可以有多個,參數之間用逗號分隔第3章:注釋語句中由分號“;”開始的部分為注釋內容,用以增加源程序的可讀性必要時,一個語句行也可以由分號開始作為階段性注釋匯編程序在翻譯源程序時將跳過該部分,不對它們做任何處理第3章:分隔符語句的4個組成部分要用分隔符分開標號后用冒號,注釋前用分號操作數之間和參數之間使用逗號分隔其他部分通常采用空格或制表符多個空格和制表符的作用與一個相同MASM支持續行符 “”第3章:例3.1 在屏幕上顯示一段信息;

7、數據段(定義要顯示的字符串)stringdbHello, Assembly !,0dh,0ah,$;代碼段(顯示字符串的程序)mov dx,offset stringmov ah,9int 21hHello, Assembly !程序功能第3章:3.1.2 完整段定義格式完整段定義利用SEGMENT和ENDS一對偽指令定義邏輯段同時需要配合ASSUME偽指令指明邏輯段是代碼段、堆棧段、數據段還是附加段完整段定義的優勢是可以指明邏輯段的定位、組合、類別等屬性;而簡化段定義只能采用系統默認的屬性完整段定義和簡化段定義的實質是一致的第3章:3.2 常量、變量和標號 匯編語言的數據可以簡單分為常量和變

8、量常量可以作為硬指令的立即數或偽指令的參數,變量主要作為存儲器操作數匯編語言語句中的名字和標號具有邏輯地址和類型屬性,主要用做地址操作數,也可以作為立即數和存儲器操作數本節將詳細討論語句中的參數和操作數、名字和標號,并引出相關的偽指令和操作符第3章:3.2.1 常量常量表示一個固定的數值,它又分成多種形式常數字符串符合常量數值表達式第3章:1. 常數指由10、16、2和8進制形式表達的數值,各種進制的數據以后綴字母區分,默認不加后綴字母的是十進制數十進制由0 9數字組成,以字母D(d)結尾(缺省情況可以省略)100,255D十六進制由0 9、A F數字組成,以字母H(h)結尾,以字母開頭的常數

9、需要加一個前導064H,0FFH0B800H二進制由0和1兩個數字組成,以字母B(b)結尾01100100B第3章:2. 字符串字符串常量是用單引號或雙引號括起來的單個字符或多個字符其數值是每個字符對應的ASCII碼值例如:d(等于64H)AB(等于4142H)Hello, Assembly !第3章:3. 符號常量符號常量使用標識符表達一個數值MASM提供等價機制,用來為常量定義符號名符號定義偽指令有“等價EQU”和“等號”:符號名 EQU 數值表達式符號名 EQU ;符號名 數值表達式EQU用于數值等價時不能重復定義符號名,但“”允許有重復賦值。例如:X= 7;等效于:X qeu 7X=

10、X+5;“X EQU X+5”是錯誤的第3章:4. 數值表達式數值表達式一般是指由運算符連接的各種常量所構成的表達式匯編程序在匯編過程中計算表達式,最終得到一個確定的數值,所以也是常量表達式的數值在程序運行前的匯編階段計算,所以組成表達式的各部分必須在匯編時就能確定匯編語言支持多種運算符(表3.4)我們經常使用的是加減乘除( * / )例如:mov ax,3*4+5;等價于:mov ax,17第3章:3.2.2 變量 變量實質上是指內存單元的數據,雖然內存單元地址不變,但其中存放的數據可以改變變量需要事先定義才能使用變量定義(Define)偽指令為變量申請固定長度為單位的存儲空間,并可以同時將

11、相應的存儲單元初始化定義后的變量可以利用變量名等方法引用其中的數據,即變量的數值第3章:1. 變量的定義 變量定義的匯編語言格式為:變量名 偽指令 初值表變量名為用戶自定義標識符,表示初值表首元素的邏輯地址,常稱為符號地址。變量名也可以沒有初值表是用逗號分隔的參數,主要由常量、數值表達式或“?”組成。其中“?”表示未賦初值多個存儲單元如果初值相同,可以用復制操作符DUP進行定義:重復次數 DUP(重復參數)變量定義偽指令有DB、DW、DD等(表3.5)第3章:字節變量的定義DB(Define Byte)DB偽指令用于分配一個或多個字節單元,并可以將它們初始化為指定值初值表中每個數據一定是字節量

12、,存放一個8位數據:可以是0255的無符號數或是128127帶符號數也可以是字符串常數實例字節變量定義實例;數據段Xdb a,-5db 2 dup(100),?Ydb ABC應用第3章:字節變量的應用mov al,X;此處X表示它的第1個數據,故ALadec X+1;對X為始的第2個數據減1,故成為6mov Y,al;現在Y這個字符串成為 aBC第3章:字變量的定義DW(Define Word)DW偽指令用于分配一個或多個字單元,并可以將它們初始化為指定值初值表中每個數據是字量,一個字單元可用于存放任何16位數據:一個段地址一個偏移地址兩個字符065535之間的無符號數3276832767之間

13、的帶符號數字變量定義實例;數據段countdw 8000h,?,ABmaxintequ 64hnumberdw maxintarraydw maxint dup(0)第3章:雙字變量的定義DD(Define Double word)DD偽指令用于分配一個或多個雙字單元,并可以將它們初始化為指定值初值表中每個數據是一個32位的雙字量:可以是有符號或無符號的32位整數也可以用來表達16位段地址(高位字)和16位的偏移地址(低位字)的遠指針varddDD 0,?,12345678hfarpointDD 00400078h第3章:2. 變量的應用變量具有存儲單元的邏輯地址程序代碼中通過變量名引用其指向

14、的首個數據通過變量名加減位移量存取以首個數據為基地址的前后數據 例題3.2 變量的定義和應用第3章:例題3.2 變量的定義 ;數據段bvar1db 100,01100100b,64h,d;字節變量:不同進制表達同一個數值,內存中有4個64Hminint= 5;符號常量:minint數值為5,不占內存空間bvar2db -1,minint,minint+5;內存中數值依次為FFH,5,0AHdb ?,2 dup(20h);預留一個字節空間,重復定義了2個數值20Hwvar1dw 2010h,4*4;字變量:兩個數據是2010H、0010H,共占4個字節wvar2dw ?;wvar2是沒有初值的字

15、變量第3章:例題3.2 變量的定義(續)dvardd 12347777h,87651111h,?;雙字變量:2個雙字數據,一個雙字空間abcdb a,b,c,?;定義字符,實際是字節變量maxintequ 0ah;符號常量:maxint10stringdb ABCDEFGHIJ;定義字符串:使用字節定義DB偽指令crlfsdb 13,10,$;回車符0DH、換行符0AH和字符$24Harray1dw maxint dup(0);10個初值為0的字量,可以認為是數組arraydb 2 dup(2,3,2 dup(4);6個字節內容依次為:02 03 04 04 02 03 04 04第3章:例題

16、3.2 變量的應用;代碼段mov dl,bvar1;DL100dec bvar2+1;bvar2+14mov abc3,dl;abcabcdmov ax,word ptr dvar0;取雙字到DX.AXmov dx,word ptr dvar2add ax,word ptr dvar4;加雙字到DX.AXadc dx,word ptr dvar6mov word ptr dvar8,ax;保存雙字的求和結果mov word ptr dvar10,dx第3章:例題3.2 變量的應用(續)mov cx,maxint;CX10mov bx,0;BX0again:add stringbx,3;stri

17、ng每個數值加3inc bxloop again;循環lea dx,abc;從abc開始mov ah,9;09H號DOS功能調用int 21h;顯示結果:abcdDEFGHIJKLM第3章:3. 變量的定位匯編程序按照指令的先后順序一個接著一個分配存儲空間,按照段定義偽指令規定的邊界定位屬性確定每個邏輯段的起始位置(包括偏移地址)定位偽指令ORG控制數據或代碼所在的偏移地址ORG 參數ORG偽指令是將當前偏移地址指針指向參數表達的偏移地址。例如:ORG 100h;從100H處安排數據或程序ORG $+10;偏移地址加10,即跳過10個字節空間匯編語言程序中,符號“$”表示當前偏移地址值第3章:

18、3.2.3 名字和標號的屬性名字和標號是用戶自定義的標識符。名字指向一條偽指令,標號指向一條硬指令。名字和標號一經使用便具有兩類屬性: 邏輯地址名字和標號對應存儲單元的邏輯地址,含有段地址和偏移地址; 類型變量名的類型可以是BYTE(字節)、WORD(字)和DWORD(雙字)等;標號、段名、子程序名的類型可以是NEAR(近)和FAR(遠),分別表示段內或段間調用匯編程序提供有關的操作符,以便獲取這些屬性值第3章:1. 地址操作符地址操作符取得名字或標號的段地址和偏移地址 將括起的表達式作為存儲器地址指針 $當前偏移地址 :段前綴,采用指定的段地址寄存器OFFSET 名字/標號返回名字或標號的偏

19、移地址SEG 名字/標號返回名字或標號的段地址第3章:2. 類型操作符類型操作符對名字或標號的類型屬性進行設置類型名 PTR 名字/標號其中可以是BYTE、WORD、DWORD(依次表示字節、字、雙字)等,或者是NEAR、FAR(分別表示近、遠),還可以是由結構、記錄等定義的類型對變量:LENGTH操作符獲知某變量名指向多少個數據項SIZE操作符獲知它共占用多少字節空間(書上有錯誤lengthof和sizeof是錯的)數據段v_byteequ this byte;v_byte是字節類型,與變量v_word的地址相同v_worddw 3332h,3735h;v_word是字類型的變量targetdw 5 dup(20h);分配數據空間2510字節crlfdb 0dh,0ah,$flagdb 0n_pointdw offs

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論