




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認(rèn)領(lǐng)
文檔簡介
1、第第3 3章章第第3章:匯編語言的特點章:匯編語言的特點匯編語言是一種以處理器指令系統(tǒng)為基礎(chǔ)的低級匯編語言是一種以處理器指令系統(tǒng)為基礎(chǔ)的低級程序設(shè)計語言,它采用助記符表達指令操作碼,程序設(shè)計語言,它采用助記符表達指令操作碼,采用標(biāo)識符號表示指令操作數(shù)采用標(biāo)識符號表示指令操作數(shù)利用匯編語言編寫程序的主要優(yōu)點是可以直接、利用匯編語言編寫程序的主要優(yōu)點是可以直接、有效地控制計算機硬件,因而容易創(chuàng)建代碼序列有效地控制計算機硬件,因而容易創(chuàng)建代碼序列短小、運行快速的可執(zhí)行程序短小、運行快速的可執(zhí)行程序在有些應(yīng)用領(lǐng)域,匯編語言的作用是不容置疑和在有些應(yīng)用領(lǐng)域,匯編語言的作用是不容置疑和無可替代的無可替代的
2、匯編程序設(shè)計的過程是與其他高級語言程序設(shè)計匯編程序設(shè)計的過程是與其他高級語言程序設(shè)計大致相同大致相同第第3章:教學(xué)重點章:教學(xué)重點匯編語言源程序格式與開發(fā)匯編語言源程序格式與開發(fā)常量、變量和標(biāo)號常量、變量和標(biāo)號匯編語言程序設(shè)計方法匯編語言程序設(shè)計方法順序程序設(shè)計順序程序設(shè)計分支程序設(shè)計分支程序設(shè)計循環(huán)程序設(shè)計循環(huán)程序設(shè)計子程序設(shè)計子程序設(shè)計第第3章:章:3.1 匯編語言源程序格式匯編語言源程序格式完整的匯編語言源程序由段組成完整的匯編語言源程序由段組成一個匯編語言源程序可以包含若干個代碼段、數(shù)一個匯編語言源程序可以包含若干個代碼段、數(shù)據(jù)段、附加段或堆棧段,段與段之間的順序可隨據(jù)段、附加段或堆棧
3、段,段與段之間的順序可隨意排列意排列需獨立運行的程序必須包含一個需獨立運行的程序必須包含一個代碼段代碼段,并指示,并指示程序執(zhí)行的程序執(zhí)行的起始點起始點,一個程序只有一個起始點,一個程序只有一個起始點所有的可執(zhí)行性語句必須位于某一個代碼段內(nèi),所有的可執(zhí)行性語句必須位于某一個代碼段內(nèi),說明性語句可根據(jù)需要位于任一段內(nèi)說明性語句可根據(jù)需要位于任一段內(nèi)通常,程序還需要一個堆棧段通常,程序還需要一個堆棧段 源程序由語句序列構(gòu)成第第3章:匯編語言的語句格式章:匯編語言的語句格式執(zhí)行性語句執(zhí)行性語句執(zhí)行性語句用于表達處理執(zhí)行性語句用于表達處理器指令器指令(也稱為硬指令也稱為硬指令),匯編后對應(yīng)一條指,匯編
4、后對應(yīng)一條指令代碼。由處理器指令組成的代碼序列是令代碼。由處理器指令組成的代碼序列是程序設(shè)計的主體程序設(shè)計的主體標(biāo)號標(biāo)號: 硬指令助記符硬指令助記符 操作數(shù)操作數(shù),操作數(shù)操作數(shù) ;注釋注釋說明性語句說明性語句說明性語句用于表達偽指說明性語句用于表達偽指令,指示源程序如何匯編、變量怎樣定義、令,指示源程序如何匯編、變量怎樣定義、過程怎么設(shè)置等過程怎么設(shè)置等名字名字 偽指令助記符偽指令助記符 參數(shù)參數(shù),參數(shù)參數(shù), ;注釋注釋第第3章:硬指令與偽指令章:硬指令與偽指令硬指令(硬指令(Instruction)使使CPU產(chǎn)生動作、并產(chǎn)生動作、并在程序執(zhí)行時才處理的指令在程序執(zhí)行時才處理的指令硬指令就是第
5、硬指令就是第2章學(xué)習(xí)的處理器指令,與具體的章學(xué)習(xí)的處理器指令,與具體的處理器有關(guān)、與匯編程序無關(guān)處理器有關(guān)、與匯編程序無關(guān)偽指令(偽指令(Directive)不產(chǎn)生不產(chǎn)生CPU動作、在程動作、在程序執(zhí)行前由匯編程序處理的說明性指令序執(zhí)行前由匯編程序處理的說明性指令偽指令與具體的處理器類型無關(guān),但與匯編程序偽指令與具體的處理器類型無關(guān),但與匯編程序有關(guān)。不同版本的匯編程序支持不同的偽指令有關(guān)。不同版本的匯編程序支持不同的偽指令 硬指令和偽指令采用易于記憶的符合表達,這就是助記符第第3章:標(biāo)號、名字與標(biāo)識符章:標(biāo)號、名字與標(biāo)識符標(biāo)號標(biāo)號是反映硬指令位置(邏輯地址)和屬性的標(biāo)是反映硬指令位置(邏輯地
6、址)和屬性的標(biāo)識符,后跟一個冒號分隔識符,后跟一個冒號分隔名字名字是反映偽指令位置(邏輯地址)和屬性的標(biāo)是反映偽指令位置(邏輯地址)和屬性的標(biāo)識符,后跟空格或制表符分隔,沒有冒號識符,后跟空格或制表符分隔,沒有冒號標(biāo)識符標(biāo)識符(Identifier)一般最多由)一般最多由31個字母、數(shù)字個字母、數(shù)字及規(guī)定的特殊符號(如及規(guī)定的特殊符號(如 _、$、?、)組成,不)組成,不能以數(shù)字開頭。默認(rèn)情況下,匯編程序不區(qū)別標(biāo)能以數(shù)字開頭。默認(rèn)情況下,匯編程序不區(qū)別標(biāo)識符中的字母大小寫識符中的字母大小寫一個源程序中,每個標(biāo)識符的定義是唯一的,還一個源程序中,每個標(biāo)識符的定義是唯一的,還不能是匯編語言采用的不
7、能是匯編語言采用的保留字保留字第第3章:保留字章:保留字保留字(保留字(Reserved Word)是匯編程序已經(jīng))是匯編程序已經(jīng)利用的標(biāo)識符(也稱為關(guān)鍵字),主要有:利用的標(biāo)識符(也稱為關(guān)鍵字),主要有:硬指令助記符硬指令助記符例如:例如:MOV、ADD偽指令助記符偽指令助記符例如:例如:DB、DW操作符操作符例如:例如:OFFSET、PTR寄存器名寄存器名例如:例如:AX、CS預(yù)定義符號預(yù)定義符號例如:例如:data 匯編語言大小寫不敏感第第3章:操作數(shù)和參數(shù)章:操作數(shù)和參數(shù)處理器指令的處理器指令的操作數(shù)操作數(shù)可以是立即數(shù)、寄存器可以是立即數(shù)、寄存器和存儲單元和存儲單元偽指令的偽指令的參數(shù)
8、參數(shù)可以是常數(shù)、變量名、表達式可以是常數(shù)、變量名、表達式等,可以有多個,參數(shù)之間用逗號分隔等,可以有多個,參數(shù)之間用逗號分隔第第3章:注釋章:注釋語句中由分號語句中由分號“;”開始的部分為注釋內(nèi)容,開始的部分為注釋內(nèi)容,用以增加源程序的可讀性用以增加源程序的可讀性必要時,一個語句行也可以由分號開始作為必要時,一個語句行也可以由分號開始作為階段性注釋階段性注釋匯編程序在翻譯源程序時將跳過該部分,不匯編程序在翻譯源程序時將跳過該部分,不對它們做任何處理對它們做任何處理第第3章:分隔符章:分隔符語句的語句的4個組成部分要用分隔符分開個組成部分要用分隔符分開標(biāo)號后用冒號,注釋前用分號標(biāo)號后用冒號,注釋
9、前用分號操作數(shù)之間和參數(shù)之間使用逗號分隔操作數(shù)之間和參數(shù)之間使用逗號分隔其他部分通常采用空格或制表符其他部分通常采用空格或制表符多個空格和制表符的作用與一個相同多個空格和制表符的作用與一個相同MASM支持續(xù)行符支持續(xù)行符 “”第第3章:例章:例3.1 在屏幕上顯示一段信息在屏幕上顯示一段信息; ;數(shù)據(jù)段(定義要顯示的字符串)數(shù)據(jù)段(定義要顯示的字符串)stringstringdbHello, Assembly !,0dh,0ah,$dbHello, Assembly !,0dh,0ah,$; ;代碼段(顯示字符串的程序)代碼段(顯示字符串的程序)mov dx,offset stringmov
10、dx,offset stringmov ah,9mov ah,9int 21hint 21hHello, Assembly !程序功能程序功能第第3章:章:3.1.1 簡化段定義格式簡化段定義格式.model small;定義程序的;定義程序的存儲模式存儲模式(小型模式)(小型模式).stack;定義;定義堆棧段堆棧段(默認(rèn)是(默認(rèn)是1KB空間)空間).data;定義;定義數(shù)據(jù)段數(shù)據(jù)段;數(shù)據(jù)定義;數(shù)據(jù)定義.code;定義;定義代碼段代碼段start: mov ax,data;程序;程序起始點起始點mov ds,ax;設(shè)置;設(shè)置DS指向用戶定義的數(shù)據(jù)段指向用戶定義的數(shù)據(jù)段;程序代碼;程序代碼mo
11、v ax,4c00hint 21h;程序結(jié)束點,返回;程序結(jié)束點,返回DOS;子程序代碼;子程序代碼end start;匯編結(jié)束,同時指明程序起始點;匯編結(jié)束,同時指明程序起始點start第第3章:第一個源程序文件章:第一個源程序文件wjl301.asm;wjl301.asm.model small.stack.datastringstringdb Hello, Assembly !,0dh,0ah,$db Hello, Assembly !,0dh,0ah,$.codestart:mov ax,datamov ds,axmov dx,offset stringmov dx,offset st
12、ringmov ah,9mov ah,9int 21hint 21hmov ax,4c00hint 21hend start第第3章:章: 匯編語言程序的開發(fā)過程(附錄匯編語言程序的開發(fā)過程(附錄B)編輯編輯文本編輯器,如文本編輯器,如 EDIT.COM源程序:文件名源程序:文件名.asm匯編匯編匯編程序,如匯編程序,如 ML.EXE目標(biāo)模塊:文件名目標(biāo)模塊:文件名.obj連接連接連接程序,如連接程序,如 LINK.EXE可執(zhí)行文件:文件名可執(zhí)行文件:文件名.exe調(diào)試調(diào)試調(diào)試程序,如調(diào)試程序,如 DEBUG.EXE應(yīng)用程序應(yīng)用程序錯誤錯誤錯誤錯誤錯誤錯誤錯誤錯誤開發(fā)過程開發(fā)過程1:源程序的編
13、輯:源程序的編輯源程序文件要以源程序文件要以ASMASM為擴展名為擴展名源程序文件的形成(編輯)可以通過任何源程序文件的形成(編輯)可以通過任何一個文本編輯器實現(xiàn)一個文本編輯器實現(xiàn): :u DOSDOS中的全屏幕文本編輯器中的全屏幕文本編輯器EDITEDITu 其他程序開發(fā)工具中的編輯環(huán)境其他程序開發(fā)工具中的編輯環(huán)境u WindowsWindows中的記事本中的記事本NotepadNotepadEDIT wjl301.asm開發(fā)過程開發(fā)過程2:源程序的匯編(:源程序的匯編(MASM 6.x)匯編是將源程序翻譯成由機器代碼組成的匯編是將源程序翻譯成由機器代碼組成的目標(biāo)模塊文件的過程目標(biāo)模塊文件的
14、過程MASM 6.x提供的匯編程序是提供的匯編程序是ML.EXE:ML /c wjl301.asm如果源程序中沒有語法錯誤,如果源程序中沒有語法錯誤,MASM將自將自動生成一個目標(biāo)模塊文件(動生成一個目標(biāo)模塊文件(wjl301.obj););否則否則MASM將給出相應(yīng)的錯誤信息。這時將給出相應(yīng)的錯誤信息。這時應(yīng)根據(jù)錯誤信息,重新編輯修改源程序后,應(yīng)根據(jù)錯誤信息,重新編輯修改源程序后,再進行匯編再進行匯編開發(fā)過程開發(fā)過程2:源程序的匯編(:源程序的匯編(MASM 5.x)MASM 5.x提供的匯編程序是提供的匯編程序是MASM.EXE:MASM wjl301.asm;如果利用分號如果利用分號“;
15、”結(jié)尾命令,則匯編程序不結(jié)尾命令,則匯編程序不再提示輸入模塊文件名、列表文件名等,直再提示輸入模塊文件名、列表文件名等,直接采用默認(rèn)的文件名。接采用默認(rèn)的文件名。默認(rèn)采用源程序文件相同的主文件名,擴展默認(rèn)采用源程序文件相同的主文件名,擴展名則是相應(yīng)類型文件的擴展名,例如模塊文名則是相應(yīng)類型文件的擴展名,例如模塊文件(件(.obj)和列表文件()和列表文件(.lst)等)等開發(fā)過程開發(fā)過程2:源程序的匯編(生成列表文件):源程序的匯編(生成列表文件)匯編過程中,可以通過參數(shù)選擇生成列表文件匯編過程中,可以通過參數(shù)選擇生成列表文件(.LST.LST)。列表文件是一種文本文件,含有源程)。列表文件是
16、一種文本文件,含有源程序和目標(biāo)代碼,對我們學(xué)習(xí)匯編語言程序設(shè)計和序和目標(biāo)代碼,對我們學(xué)習(xí)匯編語言程序設(shè)計和發(fā)現(xiàn)錯誤很有用發(fā)現(xiàn)錯誤很有用匯編程序匯編程序ML.EXE和和MASM.EXE都可帶其他參數(shù),都可帶其他參數(shù),為了生成列表文件,各自的命令是:為了生成列表文件,各自的命令是:ML /Fl wjl301.asmMASM /l wjl301.asm;該命令除產(chǎn)生模塊文件該命令除產(chǎn)生模塊文件wjl301.obj(和可執(zhí)行文件(和可執(zhí)行文件wjl301.exe)外,還將生成列表文件)外,還將生成列表文件wjl301.lst開發(fā)過程開發(fā)過程3:目標(biāo)模塊的連接:目標(biāo)模塊的連接連接程序能把一個或多個目標(biāo)文
17、件和庫文件合成連接程序能把一個或多個目標(biāo)文件和庫文件合成一個可執(zhí)行程序(一個可執(zhí)行程序(.EXE.EXE、.COM.COM文件):文件):LINK wjl301.obj;如果沒有嚴(yán)重錯誤,如果沒有嚴(yán)重錯誤,LINK將生成一個可執(zhí)行文件將生成一個可執(zhí)行文件(wjl301.exe);否則將提示相應(yīng)的錯誤信息。);否則將提示相應(yīng)的錯誤信息。這時需要根據(jù)錯誤信息重新修改源程序文件后再這時需要根據(jù)錯誤信息重新修改源程序文件后再匯編、鏈接,直到生成可執(zhí)行文件匯編、鏈接,直到生成可執(zhí)行文件ML.EXE匯編程序(匯編程序(MASM 6.xMASM 6.x)可自動調(diào)用)可自動調(diào)用LINK連接程序,實現(xiàn)匯編和連接
18、的依次進行連接程序,實現(xiàn)匯編和連接的依次進行ML wjl301.asm開發(fā)過程開發(fā)過程4:可執(zhí)行程序的調(diào)試:可執(zhí)行程序的調(diào)試經(jīng)匯編、連接生成的可執(zhí)行程序在操作系統(tǒng)經(jīng)匯編、連接生成的可執(zhí)行程序在操作系統(tǒng)下只要輸入文件名就可以運行:下只要輸入文件名就可以運行:wjl301操作系統(tǒng)裝載該文件進入主存,并開始運行操作系統(tǒng)裝載該文件進入主存,并開始運行如果出現(xiàn)運行錯誤,可以從源程序開始排錯,如果出現(xiàn)運行錯誤,可以從源程序開始排錯,也可以利用調(diào)試程序幫助發(fā)現(xiàn)錯誤也可以利用調(diào)試程序幫助發(fā)現(xiàn)錯誤采用采用DEBUG.EXEDEBUG.EXE調(diào)試程序:調(diào)試程序:DEBUG wjl301.exe第第3章:章:1.
19、存儲模式(存儲模式(Memory Model)存儲模式存儲模式?jīng)Q定了一個程序的規(guī)模,也確定決定了一個程序的規(guī)模,也確定了子程序調(diào)用、指令轉(zhuǎn)移和數(shù)據(jù)訪問等的了子程序調(diào)用、指令轉(zhuǎn)移和數(shù)據(jù)訪問等的缺省屬性缺省屬性當(dāng)使用簡化段定義的源程序格式時,必須當(dāng)使用簡化段定義的源程序格式時,必須有存儲模式有存儲模式.MODEL語句,且位于所有簡語句,且位于所有簡化段定義語句之前。其格式為:化段定義語句之前。其格式為:.MODEL 存儲模式存儲模式.MODEL語句確定了程序采用的存儲模式,語句確定了程序采用的存儲模式,MASM有有7種可以選擇,如表種可以選擇,如表3.1所示所示 本課程學(xué)習(xí)過程中,均采用小型模式S
20、MALL第第3章:章:2. 邏輯段的簡化定義邏輯段的簡化定義.STACK 大小大小;堆棧段定義偽指令;堆棧段定義偽指令.STACK創(chuàng)建一個堆棧段,段名是:創(chuàng)建一個堆棧段,段名是:STACK??蛇x的??蛇x的“大小大小”參數(shù)指定堆棧段所占存儲區(qū)的參數(shù)指定堆棧段所占存儲區(qū)的字節(jié)數(shù),默認(rèn)是字節(jié)數(shù),默認(rèn)是1KB(1024400H字節(jié))字節(jié)).DATA;數(shù)據(jù)段定義偽指令;數(shù)據(jù)段定義偽指令.DATA創(chuàng)建一個數(shù)據(jù)段,段名是:創(chuàng)建一個數(shù)據(jù)段,段名是:_DATA。數(shù)據(jù)段名可用。數(shù)據(jù)段名可用DATA預(yù)定義標(biāo)識符表示預(yù)定義標(biāo)識符表示.CODE 段名段名;代碼段定義偽指令;代碼段定義偽指令.CODE創(chuàng)建一個代碼段,可選
21、的創(chuàng)建一個代碼段,可選的“段段名名”參數(shù)指定該代碼段的段名。如果沒有給出段名,則采參數(shù)指定該代碼段的段名。如果沒有給出段名,則采用默認(rèn)段名用默認(rèn)段名 一個段的開始自動結(jié)束前面的一個段 簡化段定義偽指令之前,需有存儲模式語句第第3章:章:3. 程序開始程序開始為了指明程序開始執(zhí)行的位置,需要使用一個標(biāo)為了指明程序開始執(zhí)行的位置,需要使用一個標(biāo)號(例題中采用了號(例題中采用了start標(biāo)識符)標(biāo)識符)連接程序會根據(jù)程序起始點正確地設(shè)置連接程序會根據(jù)程序起始點正確地設(shè)置CS和和IP值,值,根據(jù)程序大小和堆棧段大小設(shè)置根據(jù)程序大小和堆棧段大小設(shè)置SS和和SP值值連接程序沒有設(shè)置連接程序沒有設(shè)置DS和和
22、ES值。程序如果使用數(shù)值。程序如果使用數(shù)據(jù)段或附加段,必須明確給據(jù)段或附加段,必須明確給DS或或ES賦值賦值大多數(shù)程序需要數(shù)據(jù)段,程序的執(zhí)行開始應(yīng)是:大多數(shù)程序需要數(shù)據(jù)段,程序的執(zhí)行開始應(yīng)是:start:mov ax,data;data表示數(shù)據(jù)段的段地址表示數(shù)據(jù)段的段地址mov ds,ax ;設(shè)置設(shè)置DS第第3章:章:4. 程序終止程序終止應(yīng)用程序執(zhí)行結(jié)束,應(yīng)該將控制權(quán)交還操應(yīng)用程序執(zhí)行結(jié)束,應(yīng)該將控制權(quán)交還操作系統(tǒng)作系統(tǒng)匯編語言程序設(shè)計中,有多種返回匯編語言程序設(shè)計中,有多種返回DOS的的方法,但一般利用方法,但一般利用DOS功能調(diào)用的功能調(diào)用的4CH子子功能實現(xiàn),它需要的入口參數(shù)是功能實現(xiàn)
23、,它需要的入口參數(shù)是AL返回返回數(shù)碼(通常用數(shù)碼(通常用0表示程序沒有錯誤)表示程序沒有錯誤)于是,應(yīng)用程序的終止代碼就是:于是,應(yīng)用程序的終止代碼就是:mov ax,4c00hint 21h第第3章:章:5. 匯編結(jié)束匯編結(jié)束匯編結(jié)束表示匯編程序到此結(jié)束將源程序匯編結(jié)束表示匯編程序到此結(jié)束將源程序翻譯成目標(biāo)模塊代碼的過程翻譯成目標(biāo)模塊代碼的過程源程序的最后必須有一條源程序的最后必須有一條END偽指令偽指令END 標(biāo)號標(biāo)號可選的可選的“標(biāo)號標(biāo)號”參數(shù)指定程序開始執(zhí)行點,參數(shù)指定程序開始執(zhí)行點,連接程序據(jù)此設(shè)置連接程序據(jù)此設(shè)置CS和和IP值(例題中采用值(例題中采用了了start標(biāo)識符)標(biāo)識符)
24、 不要糊涂程序終止和匯編結(jié)束是兩碼事第第3章:第一個源程序文件章:第一個源程序文件wjl301.asm;wjl301.asm.model small.stack.datastringstringdb Hello, Assembly !,0dh,0ah,$db Hello, Assembly !,0dh,0ah,$.codestart:mov ax,datamov ds,axmov dx,offset stringmov dx,offset stringmov ah,9mov ah,9int 21hint 21hmov ax,4c00hint 21hend start第第3章:簡化段定義的源程序
25、格式章:簡化段定義的源程序格式.model small;小型模式;小型模式存儲模式存儲模式.stack; 1KB空間空間堆棧段堆棧段.data;數(shù)據(jù)段數(shù)據(jù)段;數(shù)據(jù)定義;數(shù)據(jù)定義.code;代碼段代碼段start:mov ax,data;起始點起始點mov ds,ax;設(shè)置;設(shè)置DS;程序代碼;程序代碼mov ax,4c00hint 21h;結(jié)束點結(jié)束點,返回,返回DOS;子程序代碼;子程序代碼end start;匯編結(jié)束;匯編結(jié)束第第3章:章:3.1.2 完整段定義格式完整段定義格式完整段定義利用完整段定義利用SEGMENT和和ENDS一對偽一對偽指令定義邏輯段指令定義邏輯段同時需要配合同時需
26、要配合ASSUME偽指令指明邏輯段偽指令指明邏輯段是代碼段、堆棧段、數(shù)據(jù)段還是附加段是代碼段、堆棧段、數(shù)據(jù)段還是附加段完整段定義的優(yōu)勢是可以指明邏輯段的定位、完整段定義的優(yōu)勢是可以指明邏輯段的定位、組合、類別等屬性;而簡化段定義只能采用組合、類別等屬性;而簡化段定義只能采用系統(tǒng)默認(rèn)的屬性系統(tǒng)默認(rèn)的屬性完整段定義和簡化段定義的實質(zhì)是一致的完整段定義和簡化段定義的實質(zhì)是一致的第第3章:章:3.1.3 可執(zhí)行程序的結(jié)構(gòu)可執(zhí)行程序的結(jié)構(gòu)DOS操作系統(tǒng)支持兩種可執(zhí)行程序結(jié)構(gòu)操作系統(tǒng)支持兩種可執(zhí)行程序結(jié)構(gòu)1. EXE程序程序程序可以有多個代碼段和多個數(shù)據(jù)段,程序長程序可以有多個代碼段和多個數(shù)據(jù)段,程序長度
27、可以超過度可以超過64KB通常生成通常生成EXE結(jié)構(gòu)的可執(zhí)行程序結(jié)構(gòu)的可執(zhí)行程序2. COM程序程序只有一個邏輯段,程序長度不超過只有一個邏輯段,程序長度不超過64KB需要滿足一定條件才能生成需要滿足一定條件才能生成COM結(jié)構(gòu)的可執(zhí)結(jié)構(gòu)的可執(zhí)行程序(行程序(MASM 6.x需要采用需要采用TINY模式)模式)第第3章:章:3.2 常量、變量和標(biāo)號常量、變量和標(biāo)號 匯編語言的數(shù)據(jù)可以簡單分為常量和變量匯編語言的數(shù)據(jù)可以簡單分為常量和變量常量常量可以作為硬指令的立即數(shù)或偽指令的參可以作為硬指令的立即數(shù)或偽指令的參數(shù),數(shù),變量變量主要作為存儲器操作數(shù)主要作為存儲器操作數(shù)匯編語言語句中的匯編語言語句中
28、的名字和標(biāo)號名字和標(biāo)號具有邏輯地址具有邏輯地址和類型屬性,主要用做地址操作數(shù),也可以和類型屬性,主要用做地址操作數(shù),也可以作為立即數(shù)和存儲器操作數(shù)作為立即數(shù)和存儲器操作數(shù)本節(jié)將詳細(xì)討論語句中的參數(shù)和操作數(shù)、名本節(jié)將詳細(xì)討論語句中的參數(shù)和操作數(shù)、名字和標(biāo)號,并引出相關(guān)的偽指令和操作符字和標(biāo)號,并引出相關(guān)的偽指令和操作符第第3章:章:3.2.1 常量常量常量表示一個固定的數(shù)值,它又分成多種形式常量表示一個固定的數(shù)值,它又分成多種形式常數(shù)字符串符合常量1. 數(shù)值表達式第第3章:章:1. 常數(shù)常數(shù)指由指由10、16、2和和8進制形式表達的數(shù)值,各種進進制形式表達的數(shù)值,各種進制的數(shù)據(jù)以后綴字母區(qū)分,默
29、認(rèn)不加后綴字母的制的數(shù)據(jù)以后綴字母區(qū)分,默認(rèn)不加后綴字母的是十進制數(shù)是十進制數(shù)十進制十進制由由0 9數(shù)字組成,以字母數(shù)字組成,以字母D(d)結(jié))結(jié)尾(缺省情況可以省略)尾(缺省情況可以省略)100,255D十六進制十六進制由由0 9、A F數(shù)字組成,以字母數(shù)字組成,以字母H(h)結(jié)尾,以字母開頭的常數(shù)需要)結(jié)尾,以字母開頭的常數(shù)需要加一個前導(dǎo)加一個前導(dǎo)064H,0FFH0B800H二進制二進制由由0和和1兩個數(shù)字組成,以字母兩個數(shù)字組成,以字母B(b)結(jié)尾結(jié)尾01100100B第第3章:章:2. 字符串字符串字符串常量是用單引號或雙引號括起來的字符串常量是用單引號或雙引號括起來的單個字符或多個
30、字符單個字符或多個字符其其數(shù)值是每個字符對應(yīng)的數(shù)值是每個字符對應(yīng)的ASCII碼值碼值例如:例如:d(等于(等于64H)AB(等于(等于4142H)Hello, Assembly !第第3章:章:3. 符號常量符號常量符號常量使用標(biāo)識符表達一個數(shù)值符號常量使用標(biāo)識符表達一個數(shù)值MASM提供等價機制,用來為常量定義符號名提供等價機制,用來為常量定義符號名符號定義偽指令有符號定義偽指令有“等價等價EQU”和和“等號等號”:符號名符號名 EQU 數(shù)值表達式數(shù)值表達式符號名符號名 EQU ;MASM 5.x不支持不支持符號名符號名 數(shù)值表達式數(shù)值表達式EQU用于數(shù)值等價時不能重復(fù)定義符號名,用于數(shù)值等價
31、時不能重復(fù)定義符號名,但但“”允許有重復(fù)賦值。例如:允許有重復(fù)賦值。例如:X= 7;等效于:;等效于:X qeu 7X= X+5;“X EQU X+5”是錯誤的是錯誤的第第3章:章:4. 數(shù)值表達式數(shù)值表達式數(shù)值表達式一般是指由數(shù)值表達式一般是指由運算符運算符連接的各種常量所連接的各種常量所構(gòu)成的表達式構(gòu)成的表達式匯編程序在匯編過程中計算表達式,最終得到一匯編程序在匯編過程中計算表達式,最終得到一個確定的數(shù)值,所以也是常量個確定的數(shù)值,所以也是常量表達式的數(shù)值在程序運行前的匯編階段計算,所表達式的數(shù)值在程序運行前的匯編階段計算,所以組成表達式的各部分必須在匯編時就能確定以組成表達式的各部分必須
32、在匯編時就能確定匯編語言支持多種運算符(匯編語言支持多種運算符(表表3.4)我們經(jīng)常使用的是加減乘除(我們經(jīng)常使用的是加減乘除( * / )例如:例如:mov ax,3*4+5;等價于:;等價于:mov ax,17第第3章:章:3.2.2 變量變量 變量變量實質(zhì)上是指內(nèi)存單元的數(shù)據(jù),雖然內(nèi)存單元實質(zhì)上是指內(nèi)存單元的數(shù)據(jù),雖然內(nèi)存單元地址不變,但其中存放的數(shù)據(jù)可以改變地址不變,但其中存放的數(shù)據(jù)可以改變變量需要事先定義才能使用變量需要事先定義才能使用變量定義(變量定義(Define)偽指令為變量申請固定長度)偽指令為變量申請固定長度為單位的存儲空間,并可以同時將相應(yīng)的存儲單為單位的存儲空間,并可以
33、同時將相應(yīng)的存儲單元初始化元初始化定義后的變量可以利用變量名等方法引用其中的定義后的變量可以利用變量名等方法引用其中的數(shù)據(jù),即變量的數(shù)值數(shù)據(jù),即變量的數(shù)值第第3章:章:1. 變量的定義變量的定義 變量定義的匯編語言格式為:變量定義的匯編語言格式為:變量名變量名 偽指令偽指令 初值表初值表變量名變量名為用戶自定義標(biāo)識符,表示初值表首元素為用戶自定義標(biāo)識符,表示初值表首元素的邏輯地址,常稱為符號地址。變量名也可以沒的邏輯地址,常稱為符號地址。變量名也可以沒有有初值表初值表是用逗號分隔的參數(shù)是用逗號分隔的參數(shù),主要由常量、數(shù)值表主要由常量、數(shù)值表達式或達式或“?”組成。其中組成。其中“?”表示未賦初
34、值表示未賦初值多個存儲單元如果初值相同,可以用復(fù)制操作符多個存儲單元如果初值相同,可以用復(fù)制操作符DUP進行定義:進行定義:重復(fù)次數(shù)重復(fù)次數(shù) DUP(重復(fù)參數(shù)重復(fù)參數(shù))變量定義偽指令有變量定義偽指令有DB、DW、DD等(表等(表3.5)第第3章:字節(jié)變量的定義章:字節(jié)變量的定義DB(Define Byte)DB偽指令用于分配一個或多個字節(jié)單元,偽指令用于分配一個或多個字節(jié)單元,并可以將它們初始化為指定值并可以將它們初始化為指定值初值表中每個數(shù)據(jù)一定是字節(jié)量,存放一初值表中每個數(shù)據(jù)一定是字節(jié)量,存放一個個8位數(shù)據(jù):位數(shù)據(jù):u可以是可以是0255的無符號數(shù)的無符號數(shù)u或是或是128127帶符號數(shù)帶
35、符號數(shù)也可以是字符串常數(shù)也可以是字符串常數(shù)字節(jié)變量定義實例字節(jié)變量定義實例;數(shù)據(jù)段;數(shù)據(jù)段Xdb a,-5db 2 dup(100),?Ydb ABC第第3章:字節(jié)變量的應(yīng)用章:字節(jié)變量的應(yīng)用mov al,X;此處;此處X表示它的第表示它的第1個數(shù)據(jù),故個數(shù)據(jù),故ALadec X+1;對;對X為始的第為始的第2個數(shù)據(jù)減個數(shù)據(jù)減1,故成為,故成為6mov Y,al;現(xiàn)在;現(xiàn)在Y這個字符串成為這個字符串成為 aBC第第3章:字變量的定義章:字變量的定義DW(Define Word)DW偽指令用于分配一個或多個字單元,并偽指令用于分配一個或多個字單元,并可以將它們初始化為指定值可以將它們初始化為指定
36、值初值表中每個數(shù)據(jù)是字量,一個字單元可初值表中每個數(shù)據(jù)是字量,一個字單元可用于存放任何用于存放任何16位數(shù)據(jù):位數(shù)據(jù):u 一個段地址一個段地址u 一個偏移地址一個偏移地址u 兩個字符兩個字符u 065535之間的無符號數(shù)之間的無符號數(shù)3276832767之間的帶符號數(shù)之間的帶符號數(shù)字變量定義實例字變量定義實例;數(shù)據(jù)段;數(shù)據(jù)段countdw 8000h,?,ABmaxintequ 64hnumberdw maxintarraydw maxint dup(0)第第3章:雙字變量的定義章:雙字變量的定義DD(Define Double word)DD偽指令偽指令用于分配一個或多個雙字單元,用于分配一
37、個或多個雙字單元,并可以將它們初始化為指定值并可以將它們初始化為指定值初值表中每個數(shù)據(jù)是一個初值表中每個數(shù)據(jù)是一個3232位的雙字量:位的雙字量:u 可以是有符號或無符號的可以是有符號或無符號的3232位整數(shù)位整數(shù)u 也可以用來表達也可以用來表達1616位段地址(高位字)和位段地址(高位字)和1616位位的偏移地址(低位字)的遠(yuǎn)指針的偏移地址(低位字)的遠(yuǎn)指針varddvarddDD 0,?,12345678hDD 0,?,12345678hfarpointfarpoint DD 00400078hDD 00400078h第第3章:章:2. 變量的應(yīng)用變量的應(yīng)用變量變量具有存儲單元的邏輯地址具
38、有存儲單元的邏輯地址程序代碼中程序代碼中通過變量名引用其指向的首個數(shù)據(jù)通過變量名引用其指向的首個數(shù)據(jù)通過變量名加減位移量存取以首個數(shù)據(jù)為基地通過變量名加減位移量存取以首個數(shù)據(jù)為基地址的前后數(shù)據(jù)址的前后數(shù)據(jù) 第第3章:例題章:例題3.2 變量的定義變量的定義 ;數(shù)據(jù)段數(shù)據(jù)段bvar1db 100,01100100b,64h,d;字節(jié)變量:不同進制表達同一個數(shù)值,內(nèi)存中有字節(jié)變量:不同進制表達同一個數(shù)值,內(nèi)存中有4個個64Hminint = 5;符號常量:;符號常量:minint數(shù)值為數(shù)值為5,不占內(nèi)存空間,不占內(nèi)存空間bvar2db -1,minint,minint+5;內(nèi)存中數(shù)值依次為;內(nèi)存中
39、數(shù)值依次為FFH,5,0AHdb ?,2 dup(20h);預(yù)留一個字節(jié)空間,重復(fù)定義了;預(yù)留一個字節(jié)空間,重復(fù)定義了2個數(shù)值個數(shù)值20Hwvar1 dw 2010h,4*4;字變量:兩個數(shù)據(jù)是;字變量:兩個數(shù)據(jù)是2010H、0010H,共占,共占4個字節(jié)個字節(jié)wvar2 dw ?;wvar2是沒有初值的字變量是沒有初值的字變量第第3章:例題章:例題3.2 變量的定義(續(xù))變量的定義(續(xù))dvardd 12347777h,87651111h,?;雙字變量:;雙字變量:2個雙字?jǐn)?shù)據(jù),一個雙字空間個雙字?jǐn)?shù)據(jù),一個雙字空間abcdb a,b,c,?;定義字符,實際是字節(jié)變量定義字符,實際是字節(jié)變量m
40、axint equ 0ah;符號常量:符號常量:maxint10string db ABCDEFGHIJ;定義字符串:使用字節(jié)定義;定義字符串:使用字節(jié)定義DB偽指令偽指令crlfsdb 13,10,$;回車符;回車符0DH、換行符、換行符0AH和字符和字符$24Harray1 dw maxint dup(0);10個初值為個初值為0的字量,可以認(rèn)為是數(shù)組的字量,可以認(rèn)為是數(shù)組arraydb 2 dup(2,3,2 dup(4);6個字節(jié)內(nèi)容依次為:個字節(jié)內(nèi)容依次為:02 03 04 04 02 03 04 04第第3章:例題章:例題3.2 變量的應(yīng)用變量的應(yīng)用;代碼段;代碼段mov dl,b
41、var1;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;保存雙字的求和結(jié)果;保存雙字的求和結(jié)果mov word ptr dvar10,dx第第3章:例題章:例題3.2 變量的應(yīng)用(續(xù))變量的應(yīng)用(續(xù))mov cx,maxint;CX10mov bx,0;BX0again:add str
42、ingbx,3;string每個數(shù)值加每個數(shù)值加3inc bxloop again;循環(huán);循環(huán)lea dx,abc;從;從abc開始開始mov ah,9;09H號號DOS功能調(diào)用功能調(diào)用int 21h;顯示結(jié)果:;顯示結(jié)果:abcdDEFGHIJKLM第第3章:章:3. 變量的定位變量的定位匯編程序按照指令的先后順序一個接著一個分配匯編程序按照指令的先后順序一個接著一個分配存儲空間,按照段定義偽指令規(guī)定的邊界定位屬存儲空間,按照段定義偽指令規(guī)定的邊界定位屬性確定每個邏輯段的起始位置(包括偏移地址)性確定每個邏輯段的起始位置(包括偏移地址)定位偽指令定位偽指令ORG控制數(shù)據(jù)或代碼所在的偏移地址控
43、制數(shù)據(jù)或代碼所在的偏移地址ORG 參數(shù)參數(shù)ORG偽指令是將當(dāng)前偏移地址指針指向參數(shù)表達偽指令是將當(dāng)前偏移地址指針指向參數(shù)表達的偏移地址。的偏移地址。例如:例如:ORG 100h;從;從100H處安排數(shù)據(jù)或程序處安排數(shù)據(jù)或程序ORG $+10;偏移地址加;偏移地址加10,即跳過,即跳過10個字節(jié)空間個字節(jié)空間匯編語言程序中,符號匯編語言程序中,符號“$”表示當(dāng)前偏移地址值表示當(dāng)前偏移地址值第第3章:章:3.2.3 名字和標(biāo)號的屬性名字和標(biāo)號的屬性名字和標(biāo)號是用戶自定義的標(biāo)識符。名字和標(biāo)號是用戶自定義的標(biāo)識符。名字名字指向一條指向一條偽指令,偽指令,標(biāo)號標(biāo)號指向一條硬指令。名字和標(biāo)號一經(jīng)使指向一條
44、硬指令。名字和標(biāo)號一經(jīng)使用便具有兩類屬性:用便具有兩類屬性: 邏輯地址邏輯地址名字和標(biāo)號對應(yīng)存儲單元的邏輯名字和標(biāo)號對應(yīng)存儲單元的邏輯地址,含有段地址和偏移地址;地址,含有段地址和偏移地址; 類型類型變量名的類型可以是變量名的類型可以是BYTE(字節(jié))、(字節(jié))、WORD(字)和(字)和DWORD(雙字)等;標(biāo)號、段(雙字)等;標(biāo)號、段名、子程序名的類型可以是名、子程序名的類型可以是NEAR(近)和(近)和FAR(遠(yuǎn)遠(yuǎn)),分別表示段內(nèi)或段間調(diào)用,分別表示段內(nèi)或段間調(diào)用匯編程序提供有關(guān)的操作符,以便獲取這些屬性值匯編程序提供有關(guān)的操作符,以便獲取這些屬性值第第3章:章:1. 地址操作符地址操作符
45、地址操作符地址操作符取得名字或標(biāo)號的段地址和偏移地址取得名字或標(biāo)號的段地址和偏移地址 將括起的表達式作為存儲器地址指針將括起的表達式作為存儲器地址指針 $當(dāng)前偏移地址當(dāng)前偏移地址 :段前綴,采用指定的段地址寄存器段前綴,采用指定的段地址寄存器OFFSET 名字名字/標(biāo)號標(biāo)號返回名字或標(biāo)號的偏移地址返回名字或標(biāo)號的偏移地址SEG 名字名字/標(biāo)號標(biāo)號返回名字或標(biāo)號的段地址返回名字或標(biāo)號的段地址第第3章:章:2. 類型操作符類型操作符類型操作符類型操作符對名字或標(biāo)號的類型屬性進行設(shè)置對名字或標(biāo)號的類型屬性進行設(shè)置類型名類型名 PTR 名字名字/標(biāo)號標(biāo)號其中可以是其中可以是BYTE、WORD、DWOR
46、D(依次表示字(依次表示字節(jié)、字、雙字)等節(jié)、字、雙字)等,或者是或者是NEAR、FAR(分別表示(分別表示近、遠(yuǎn)),還可以是由結(jié)構(gòu)、記錄等定義的類型近、遠(yuǎn)),還可以是由結(jié)構(gòu)、記錄等定義的類型對變量:對變量:lLENGTHOF操作符獲知某變量名指向多少個數(shù)據(jù)項操作符獲知某變量名指向多少個數(shù)據(jù)項lSIZEOF操作符獲知它共占用多少字節(jié)空間操作符獲知它共占用多少字節(jié)空間第第3章:章:3.3 順序程序設(shè)計順序程序設(shè)計沒有分支、循環(huán)等轉(zhuǎn)移指令的程序,會按沒有分支、循環(huán)等轉(zhuǎn)移指令的程序,會按指令書寫的前后順利依次執(zhí)行,這就是順指令書寫的前后順利依次執(zhí)行,這就是順序程序序程序順序結(jié)構(gòu)是最基本的程序結(jié)構(gòu)順序
47、結(jié)構(gòu)是最基本的程序結(jié)構(gòu)完全采用順序結(jié)構(gòu)編寫的程序并不多見完全采用順序結(jié)構(gòu)編寫的程序并不多見例題例題3.4 順序程序設(shè)計實例順序程序設(shè)計實例采用查表法,實現(xiàn)一位采用查表法,實現(xiàn)一位16進制數(shù)進制數(shù)轉(zhuǎn)換為轉(zhuǎn)換為ASCII碼顯示碼顯示第第3章:例章:例3.4 數(shù)據(jù)段數(shù)據(jù)段;數(shù)據(jù)段數(shù)據(jù)段ASCII db 30h,31h,32h,33h,34h,35h,36h,37h,38h,39h;對應(yīng);對應(yīng)0 9的的ASCII碼碼db 41h,42h,43h,44h,45h,46h;對應(yīng);對應(yīng)A F的的ASCII碼碼hexdb 04h,0bh;假設(shè)兩個數(shù)據(jù);假設(shè)兩個數(shù)據(jù)第第3章:例章:例3.4 代碼段代碼段 ;代碼
48、段代碼段mov bx,offset ASCII;BX指向指向ASCII碼表碼表mov al,hex;AL取得一位取得一位16進制數(shù)進制數(shù);恰好就是;恰好就是ASCII碼表中的位移碼表中的位移and al,0fh;只有低;只有低4位是有效的,高位是有效的,高4位清位清0 xlat;換碼:;換碼:ALDS:BXAL第第3章:例章:例3.4 代碼段(續(xù))代碼段(續(xù))mov dl,al;入口參數(shù):;入口參數(shù):DLALmov ah,2;02號號DOS功能調(diào)用功能調(diào)用int 21h;顯示一個;顯示一個ASCII碼字符碼字符mov al,hex+1;轉(zhuǎn)換并顯示下一個數(shù)據(jù);轉(zhuǎn)換并顯示下一個數(shù)據(jù)and al,0
49、fhxlatmov dl,almov ah,2int 21h第第3章:章:3.4 分支程序設(shè)計分支程序設(shè)計分支程序根據(jù)條件是真或假決定執(zhí)行與否分支程序根據(jù)條件是真或假決定執(zhí)行與否判斷的條件是各種指令,如判斷的條件是各種指令,如CMP、TEST等等執(zhí)行后形成的狀態(tài)標(biāo)志執(zhí)行后形成的狀態(tài)標(biāo)志轉(zhuǎn)移指令轉(zhuǎn)移指令Jcc和和JMP可以實現(xiàn)分支控制可以實現(xiàn)分支控制分支結(jié)構(gòu)有分支結(jié)構(gòu)有單分支結(jié)構(gòu)單分支結(jié)構(gòu)雙分支結(jié)構(gòu)雙分支結(jié)構(gòu)多分支結(jié)構(gòu)多分支結(jié)構(gòu)第第3章:單分支結(jié)構(gòu)章:單分支結(jié)構(gòu) 條件成立跳轉(zhuǎn),否條件成立跳轉(zhuǎn),否則順序執(zhí)行分支語則順序執(zhí)行分支語句體句體注意選擇正確的條注意選擇正確的條件轉(zhuǎn)移指令和轉(zhuǎn)移件轉(zhuǎn)移指令和轉(zhuǎn)
50、移目標(biāo)地址目標(biāo)地址第第3章:計算章:計算AX中有符號數(shù)的絕對值中有符號數(shù)的絕對值cmp ax,0cmp ax,0jge nonnegjge nonneg;條件滿足(;條件滿足(AX0AX0),轉(zhuǎn)移),轉(zhuǎn)移neg axneg ax;條件不滿足,求補;條件不滿足,求補nonneg:nonneg: mov result,axmov result,ax ;條件滿足;條件滿足;不恰當(dāng)?shù)姆种?;不恰?dāng)?shù)姆种mp ax,0cmp ax,0jl yesnegjl yesneg;條件滿足(;條件滿足(AXAX0 0),轉(zhuǎn)移),轉(zhuǎn)移jmp nonnegjmp nonnegyesneg:yesneg: neg ax
51、neg ax;條件不滿足,求補;條件不滿足,求補nonneg:nonneg: mov result,axmov result,ax ;條件滿足;條件滿足第第3章:雙分支結(jié)構(gòu)章:雙分支結(jié)構(gòu)條件成立跳轉(zhuǎn)執(zhí)行第條件成立跳轉(zhuǎn)執(zhí)行第2個個分支語句體,否則順序執(zhí)分支語句體,否則順序執(zhí)行第行第1個分支語句體個分支語句體注意第注意第1個分支體后一定個分支體后一定要有一個要有一個JMP指令跳到第指令跳到第2個分支體后個分支體后第第3章:顯示章:顯示BX的最高位的最高位shl bx,1;BX最高位移入最高位移入CF標(biāo)志標(biāo)志jc one;CF1,即最高位為,即最高位為1,轉(zhuǎn)移,轉(zhuǎn)移mov dl,30h;CF0,即最
52、高位為,即最高位為0:DL30H0jmp two;一定要跳過另一個分支體;一定要跳過另一個分支體one:mov dl,31h;DL 31H1two:mov ah,2int 21h;顯示;顯示第第3章:顯示章:顯示BX的最高位(續(xù))的最高位(續(xù))shl bx,1;BX最高位移入最高位移入CF標(biāo)志標(biāo)志jnc one;CF0,即最高位為,即最高位為0,轉(zhuǎn)移,轉(zhuǎn)移mov dl,31h;CF1,即最高位為,即最高位為1:DL31H1jmp two;一定要跳過另一個分支體;一定要跳過另一個分支體one:mov dl,30h;DL 30H0two:mov ah,2int 21h;顯示;顯示第第3章:顯示章:
53、顯示BX的最高位(另解)的最高位(另解)mov dl,0 ;DL30H0shl bx,1;BX最高位移入最高位移入CF標(biāo)志標(biāo)志jnc two;CF0,即最高位為,即最高位為0,轉(zhuǎn)移,轉(zhuǎn)移mov dl,1;CF1,即最高位為,即最高位為1:DL31H1two:mov ah,2int 21h;顯示;顯示 編寫分支程序,需留心分支的開始和結(jié)束編寫分支程序,需留心分支的開始和結(jié)束第第3章:顯示章:顯示BX的最高位(無分支)的最高位(無分支)mov dl,0shl bx,1;BX最高位移入最高位移入CF標(biāo)志標(biāo)志adc dl,30h;CF0,DL030h030H0;CF1,DL030h131H1two:
54、mov ah,2int 21h;顯示;顯示第第3章:例題章:例題3.5 顯示壓縮顯示壓縮BCD碼,無前導(dǎo)碼,無前導(dǎo)0;數(shù)據(jù)段數(shù)據(jù)段BCDdb 04h ;代碼段代碼段mov dl,BCDtest dl,0ffh ;如果;如果BCD碼為碼為0,顯示,顯示0jz zero;雙分支結(jié)構(gòu);雙分支結(jié)構(gòu)test dl,0f0h ;如果;如果BCD碼高位為碼高位為0,不顯示,不顯示0jz one;單分支結(jié)構(gòu);單分支結(jié)構(gòu)第第3章:例題章:例題3.5 顯示壓縮顯示壓縮BCD碼,無前導(dǎo)碼,無前導(dǎo)0(續(xù))(續(xù))mov cl,4;處理高位;處理高位shr dl,clor dl,30h;轉(zhuǎn)換為;轉(zhuǎn)換為ASCII碼碼mov
55、 ah,2;顯示高位;顯示高位int 21hmov dl,BCDand dl,0fhone:or dl,30h;處理低位;處理低位jmp twozero: mov dl,0two:mov ah,2int 21h第第3章:大小寫字母轉(zhuǎn)換(參例題章:大小寫字母轉(zhuǎn)換(參例題3.6) ;如果;如果DL是一個小寫字母,則轉(zhuǎn)換為大寫是一個小寫字母,則轉(zhuǎn)換為大寫cmp dl,a ;小于小寫字母;小于小寫字母a,不需要處理,不需要處理jb dispcmp dl,z ;大于小寫字母;大于小寫字母z,也不需要處,也不需要處理理ja dispsub dl,20h;是小寫字母,則轉(zhuǎn)換為大寫;是小寫字母,則轉(zhuǎn)換為大寫d
56、isp: 第第3章:多分支結(jié)構(gòu)章:多分支結(jié)構(gòu)多分支結(jié)構(gòu)是多個條件多分支結(jié)構(gòu)是多個條件對應(yīng)各自的分支語句體,對應(yīng)各自的分支語句體,哪個條件成立就轉(zhuǎn)入相哪個條件成立就轉(zhuǎn)入相應(yīng)分支體執(zhí)行應(yīng)分支體執(zhí)行AH=0fuction0YNAH=1fuction1YNAH=2fuction2YNor ah,ah;cmp ah,0jz function0dec ah;cmp ah,1jz function0dec ah;cmp ah,2jz function0第第3章:章:3.5 循環(huán)程序設(shè)計循環(huán)程序設(shè)計循環(huán)程序結(jié)構(gòu)循環(huán)程序結(jié)構(gòu)是滿足一定條件的情況下,是滿足一定條件的情況下,重復(fù)執(zhí)行某段程序重復(fù)執(zhí)行某段程序循環(huán)結(jié)構(gòu)
57、的程序通常有循環(huán)結(jié)構(gòu)的程序通常有3個部分:個部分: 循環(huán)初始部分循環(huán)初始部分為開始循環(huán)準(zhǔn)備必要的條件,為開始循環(huán)準(zhǔn)備必要的條件,如循環(huán)次數(shù)、循環(huán)體需要的數(shù)值等如循環(huán)次數(shù)、循環(huán)體需要的數(shù)值等 循環(huán)體部分循環(huán)體部分指重復(fù)執(zhí)行的程序部分,其中指重復(fù)執(zhí)行的程序部分,其中包括對循環(huán)條件等的修改程序段包括對循環(huán)條件等的修改程序段循環(huán)控制部分循環(huán)控制部分判斷循環(huán)條件是否成立,決判斷循環(huán)條件是否成立,決定是否繼續(xù)循環(huán)定是否繼續(xù)循環(huán)第第3章:循環(huán)控制章:循環(huán)控制循環(huán)結(jié)構(gòu)程序循環(huán)結(jié)構(gòu)程序的設(shè)計關(guān)鍵是循環(huán)控制部分的設(shè)計關(guān)鍵是循環(huán)控制部分循環(huán)控制可以在進入循環(huán)之前進行,也可循環(huán)控制可以在進入循環(huán)之前進行,也可以在循環(huán)
58、體后進行,于是形成兩種結(jié)構(gòu):以在循環(huán)體后進行,于是形成兩種結(jié)構(gòu):“先判斷、后循環(huán)先判斷、后循環(huán)”結(jié)構(gòu)結(jié)構(gòu)“先循環(huán)、后判斷先循環(huán)、后判斷”結(jié)構(gòu)結(jié)構(gòu)循環(huán)結(jié)束的控制可以用循環(huán)次數(shù),還可以循環(huán)結(jié)束的控制可以用循環(huán)次數(shù),還可以用特定條件等,于是又有:用特定條件等,于是又有:計數(shù)控制循環(huán)計數(shù)控制循環(huán)條件控制循環(huán)條件控制循環(huán)第第3章:先循環(huán)后判斷的循環(huán)結(jié)構(gòu)章:先循環(huán)后判斷的循環(huán)結(jié)構(gòu) 結(jié)束結(jié)束 初始化初始化 循環(huán)的初始狀態(tài)循環(huán)的初始狀態(tài) 循環(huán)體循環(huán)體 循環(huán)的工作部分循環(huán)的工作部分及修改部分及修改部分 計數(shù)控制循環(huán)計數(shù)控制循環(huán)條件控制循環(huán)條件控制循環(huán)修改部分修改部分控制條件控制條件Y YN N第第3章:章:3.
59、5.1 計數(shù)控制循環(huán)計數(shù)控制循環(huán) 計數(shù)控制循環(huán)計數(shù)控制循環(huán)利用利用循環(huán)次數(shù)循環(huán)次數(shù)作為控制條件作為控制條件易于采用循環(huán)指令易于采用循環(huán)指令LOOP和和JCXZ實現(xiàn)實現(xiàn)初始化:將循環(huán)次數(shù)或最大循初始化:將循環(huán)次數(shù)或最大循環(huán)次數(shù)置入環(huán)次數(shù)置入CX循環(huán)體循環(huán)體循環(huán)控制:用循環(huán)控制:用LOOP指令對指令對CX減減1、并判斷是否為、并判斷是否為0第第3章:用二進制顯示章:用二進制顯示BL內(nèi)容(參例內(nèi)容(參例3.8)mov cx,8;CX8(循環(huán)次數(shù))(循環(huán)次數(shù))again: shl bl,1;左移進;左移進CF,從高位開始顯示從高位開始顯示mov dl,0;MOV指令不改變指令不改變CFadc dl,3
60、0h ;DL030HCF;CF若是若是0,則,則DL 0 ;CF若是若是1,則,則DL 1 mov ah,2int 21h;顯示;顯示loop again;CX減減1,如果,如果CX未減至未減至0,則循環(huán),則循環(huán)計數(shù)控制循環(huán)計數(shù)控制循環(huán)先循環(huán)后判斷先循環(huán)后判斷第第3章:例章:例3.9 求數(shù)組元素的最大值和最小值求數(shù)組元素的最大值和最小值;數(shù)據(jù)段數(shù)據(jù)段arraydw 10;假設(shè)一個數(shù)組,其中頭個數(shù)據(jù);假設(shè)一個數(shù)組,其中頭個數(shù)據(jù)10表示元素個數(shù)表示元素個數(shù)dw -3,0,20,900,587,-632,777,234,-34,-56;這是一個有符號字量元素組成的數(shù)組;這是一個有符號字量元素組成的數(shù)
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 自信度測試題及答案
- 音樂教編面試題及答案
- 統(tǒng)計學(xué)7版試題及答案
- 硬幣擺放測試試題及答案
- 2025年輸注延長管合作協(xié)議書
- 2025年互聯(lián)網(wǎng)信息服務(wù)合作協(xié)議書
- 2024大數(shù)據(jù)下銀發(fā)經(jīng)濟趨勢前瞻-解數(shù)咨詢-23正式版
- 2025年低功率氣動閥島用控制閥項目合作計劃書
- 運輸企業(yè)節(jié)日安全教育
- 專題07 燃燒條件的探究-中考化學(xué)實驗精講精練
- Q∕GDW 12152-2021 輸變電工程建設(shè)施工安全風(fēng)險管理規(guī)程
- 第四章邊界層理論基礎(chǔ)合肥工業(yè)大學(xué)傳遞過程基礎(chǔ)
- E4A使用手冊(DOC)
- 質(zhì)量經(jīng)濟性分析
- 社會救助內(nèi)容和工作職責(zé)
- ISO9001_2016年[全套]質(zhì)量管理體系文件
- 學(xué)校工會組織機構(gòu)(共3頁)
- 正泰電器低壓電器選型手冊
- 黃河頌朗誦PPT
- 室內(nèi)電氣施工設(shè)計說明
評論
0/150
提交評論