




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、3 -1 組合語言的程式開發流程 微電腦硬體的動作,通常是由軟體來控制,而這軟體即所謂的機器語言(Machine Language),然而我們所寫的組合語言(Assembly)並不是機器語言,要透過組譯器(Assembler)的翻譯,把組合語言翻譯成機器語言才可為電腦所執行,以控制電腦硬體的動作。 以組合語言的程式設計而言從頭至尾的流程包括:一、程式設計(PROGRAMMING) 以程式設計的步驟,用我們的頭腦配合紙及筆來完成,詳細情形在3 - 3中說明。二、編輯(EDIT) 以編輯器來建立組合語言的原始程式,並以某一個檔名儲存於磁碟中而副檔名要用 .ASM。每一個檔案皆以文書檔方式存於磁碟中
2、,而一般採用的編輯器有EDIT(附在DOS),PE2,PE3,DW3,CWI,KS3,HE5.等,視個人的使用方便而選用。三、組譯(ASSEMBLE) 透過組譯器的幫助,把原始程式的內容轉換成機器碼格式的目的檔(OBJECT FIFE)副檔名是 .OBJ,但這個目的檔無法在DOS下執行。四、連結(LINK) 透過連結器(LINKER)的幫助,將一個或多個目的檔,連結成一個可執行檔,副檔名是 .EXE,這個檔案可在DOS下執行。五、除錯(DEBUG) 一般人設計程式很難一次完成,除錯這件事是非常普遍且重要的,前面完成組合語言程式設計的每一個流程皆可能出現錯誤,如此我們應當根據錯誤內容進行修改,直
3、到每一個流程都正確為止。3 - 2 實際的操作過程實例:設計一個組合語言程式,執行的時候可以在螢幕顯示出一串字。”大家好!我是劉德華!”二、存檔: 把程式以編輯器來輸入至電腦中存檔,副檔名是 .ASM,主檔名可自行決定。假設此程式的檔名為A3.ASM,同時是儲存在C磁碟機的根目錄之下。三、組譯與連結:1 以TASM組譯:C:>TASM A3以上若正確,則產生A3.0BJ檔,若有一些語法上的錯誤,TASM將告知是在第幾行及何種錯誤。連結:C:>TLINK A3以上若連結正確,則產生A3.EXE檔。2 以MASM組譯:C:>MASM A3以上若正確,則產生A3.0BJ檔,若有一些
4、語法上的錯誤,MASM將告知是在第幾行及何種錯誤。連結:C:>LINK A3以上若連結正確,則產生A3.EXE檔,至於選用TASM或MASM由使用者自行決定。四、執行:C:>A3執行A3.EXE,執行結果將在下一橫列顯示”大家好!我是劉德華!”'。3-2.1 程式的基本架構與指令的語法l 指合的語法 整個程式,分成資料區、程式區及堆疊區,其中程式區是整個程式的重心,而程式區是由一行一行的敘述所構成,而每一橫行可包括四大部份,其中標記(LABEL)、運算碼 (OPCODE)、運算元 (OPERAND)及註解(COMMAND)等四個欄位,每個欄位間至少空一格。一、標記(LABE
5、L)標記通常在第一格出現,以英文字母開頭較多見(其實中文字也可以),標記依使用的情形,分成程式標記、資料標記及常數名稱。1大小寫不拘。2標記代表一個16位元的偏移位址。3標記後必須加上冒號":"。4標記名稱長度不可超過31個字,(視組譯程式不同而有不同)。5不可使用保留字。6標記可有可無。I程式標記程式標記用以標示某一行敘述的程式位址,通常後面加上冒號(:),如以右之實例中的BEGIN即為程式標記。II資料標記資料標記出現在資料區,用以設定相關資料的內容及其內容的所在位址。如以右之實例中的MESSAGE1即為資料標記。III常數名稱用某一常數名稱來代表一個固定不變的數值,因
6、為某一數值可能有其意思,不如以一英文的相關名稱來出現在程式中,增加程式的閱讀性實例如下的CR與LF。二、運算碼(OPCODE) 在組合語言中,運算碼又分兩種,一種是指令,另一種是假指令。1運算碼即為指令(mnemonic)名稱或組譯程式之虛擬指令。2大小寫不拘。I指令(INSTRUCTION)用來控制電腦做什麼動作的文字,例如以右實例中的MOV指令與JMP指令。II假指令 (虛擬指令)是在組譯過程中,告訴組譯器做什麼的文字,例如以右實例中的.MODEL,.DATA,DB,.CODE三、運算元(OPERAND)運算元就是運算碼運算時所需要的資料所在,可能是一個、二個或者不用運算元,運算元可能是暫
7、存器、立即值記憶體或運算式。1運算元與運算元之間必須以逗號","隔開。2視定址法之不同而有差異,有兩個運算元或一個運算元成沒有運算元3指令與運算元之間,至少必須空一格。例如:以右實例的DL,AL,I,AH,02H,21H等。四、註解(COMMENT)許多電腦的語言其可讀性都不高,尤其是別人設計的程式或自己設計的程式過了一段時日,可能都不太好看懂。那最好的方法,即直接在程式裡加以相關的文字說明,在程式裡的什麼地方寫註解並沒有特殊的限制,只要在前面加上分號 (;)即可,例如以右實例,分號(;)後面的都是一些文字說明。1註解前面要加分號";",組譯程式不處理分
8、號之後的文字或指令。2註解可有可無,主要是增加程式的可讀性。3 - 2.2 範例程式的說明 現在把A3.ASM做一個說明,該程式執行的結果是在螢幕上顯示一串字"大家好!我是劉德華!,現在依次說明該程式的內容。行號1 .MODEL SMALL ;參閱附錄D虛擬指令l 本行是一個假指令,告知組譯器本程式是使用小型記憶模式。行號2 .DATAl 本行是一個假指令,告知組譯本行DATA以下是資料的設定。行號3 MESSAGEI DB"大家好!我是劉德華!”,0DH,0AH,'$'l MESSAGE1是資料標記,代表字串"大家好!我是劉德華!"資料
9、段的位址。l DB(Define Byte)資料內容的資料單位長短不一,必須以DB,DW,DD等來指定,例如:DB是Define Byte的縮寫代表資料單位是l byteDW是Define Word的縮寫代表資料單位是2 byteDD是Define Dword的縮寫代表資料單位是4 bytesl 0DH,0AH是ASCII中的控制字元,0DH是控制游標到該橫行的第一格,0AH是控制游標到下一橫行,0DH,0AH同時出現即出現換行的動作。l 所要顯示的字串以$(錢號)為結束控制符號,$(錢號)本身不會被顯示。行號4 .CODEl 本行是一個假指令,告知組譯器本行.CODE以下是程式區。行號5 B
10、EGIN: MOV AX,DATAl BEGIN:是一種程式標記的名稱之後加上冒號(:)。行號6 MOV DS,AXl 以上兩行是成對出現,DATA是指資料段(.DATA)的起始位址,執行這兩行之後DS暫存器即儲存資料段(.DATA)的起始位址。行號7 MOV DX, OFFSET MESSAGE1行號8 MOV AH, 09H行號9 INT 21Hl 以上三行共同做一件事,即把MESSAGE1所定義的字串資料顯示於螢幕直到遇見$為止。l INT 2I H是DOS的功能呼叫,當AH = 09H時所作的事情是字串輸出於螢幕,輸出字串的起始位子是在DS:DX,所以要把MESSAGE1的偏移量(OF
11、FSET)送給DX暫存器,寫成指令的方式如下:MOV DX,OFFSET MESSAGE1行號10 MOV AH,4CH行號11 INT 21Hl 以上兩行是成對出現,做為程式結束返回DOS的控制。行號12 .STACKl 本行是定義堆疊的大小,若要使用堆疊的大小寫2048 Byte,則可使用.STACK 2048來設定。行號13 ENDl END是用來告訴組譯器程式到此結束,END之後的所有文字都不曾影響程式的執行,而我們可以在END之後做一些文字說明,也就是說END是程式的最後一行。3-3 何謂定址模式 定址模式的英文原名是(AddressingMode)又可稱為定址法,也是所謂電腦CPU
12、找尋資料所在的方法。不論學電腦的硬體或軟體,有兩句話可以好好體會那就是資料在哪裡?、資料要去哪裡?就如你每天從家裡出發到學校,這家裡就是類似資料在哪裡,而學校就類似資料要去哪裡。可是學校那麼大要到哪一棟的哪一樓的哪一間教室,是不是要想清楚、要看清楚?尤其我們電腦的資料是在電腦的裡裡外外遊走傳遞,如此資料從哪裡來?要去哪裡?這件事情就非常重要了。根據電腦的結構,資料可能來自三個地方:1.立即值(隨指令碼一起進入CPU) 2.某一個暫存器 3.存在於記憶體內3-3.2定址法的種類 80X86指令的定址法共分三類七大定址法,所謂的三類即立即定址法、暫存器定址法、與記憶體定址法,其中記憶體定址法又分為
13、五種,所以總共是七大定址法。一、立即定址法(Immediate Addressing Mode)二、暫存器定址法(Register Addressing Mode)三、記憶體直接定址法(Direct memory Addressing Mode)或直接定址法(Direct Addressing Mode)四、記憶體間接定址法(Indirect memory Addressing Mode)或間接定址法(Indirect Addressing Mode)五、基底定址法(Based Addressing Mode).六、索引定址法(Indexed Addressing Mode)七、基底索引定址法
14、(Based Indexed Addressing Mode) 以下我們對各種定址法分別加以說明:l 暫存器定址法(Register Addressing Mode):運算元是暫存器,就是暫存器定址法。 例如: MOV DS,AX 此指令以暫存器定址法取得,AX暫存器的資料,之後以暫存器定址法寫入到DS暫存器中。 例如: MOV MEM1,AX 第一個運算元MEM1 不是暫存器定址法,第二個運算元AX是使用暫存器定址法。 例 3 3 MOV AX,BX說明:上述指令執行完後,AX、BX內容相同。在80X86的暫存器群中,區段暫存器的使用有其限制,即區段暫存器不能互相傳送資料,例如:將CS暫存器
15、的內容存入DS暫存器中,則必須寫成如下格式。MOV AX,CSMOV DS,AX。 例 3 4 INC AX 說明:運算元為AX暫存器。執行後,AX暫存器的內容加1。 例 3 5 PUSH BX說明:運算元為BX暫存器。執行後,BX暫存器的內容存入堆疊中 。l 立即定址法(Immediate Addressing Mode):運算元是一個數字(立即值),就是所謂的立即定址法。 例 3 - 1, 3 2 l 記憶體直接定址法(Direct memory Addressing Mode):是記憶體定址法的一種,直接定址法就是運算元直接指出資料所在記憶體的位址的方法,例如:執行之後AX5678;PI
16、是所謂的資料標名,組譯時會算出其PI的實際位址。 例 3 6 MOV AL,VALUE說明:上述指令之運算元VALUE為一資料變數,VALUE必須在資料區段中定義。假設我們在資料區段中定義"VALUE DB 100H",且記憶體100H中的資料如右圖所示,則上述指令執行完後,AL=01H。 例 3 7 AL,102H說明:如果記憶體內容如例3-6所示,則執行後,AL=03H。 例 3 8 MOV BX,400HMOV BX2,56H說明:執行後,資料56H將存入記憶體位址DS:402H中。 例 3 9 MOV BX,400HMOV AL, BX2說明:執行後,AL=56H。
17、 l 間接定址法 (Indirect Addressing Mode)將暫存器的值當做是記憶體的位址,而暫存器可以看成是個資料的指標,到此位址去取得運算元的方法,而暫存器能是BX、BP、SI或DI,暫存器名必須用中括號 括起來。如右圖所示以上是把BX內含視為一位址,再依此位址所指之內容搬至AX暫存器內。l 基底定址法 (Based Addressing Mode) BX及BP暫存器有一項特殊用途即是做為基底暫存器使,那基底定址法就是以基底暫存器所指的位址為基底,再加上一個固定的距離來得到資料所在的位址,例如:MOV AX,BX+3 或 MOV AX,BX+3 或 MOV AX,BX3以上三行是
18、寫法不同,但是結果相同,即把BX+3這個位址的內容送給AL暫存器,舉一個例子:(資料如右圖)執行前:已知 AX1234H,BX0001H執行指令:MOV AX,BX2執行後:AXAB56Hl 索引定址法(Indexed Addressing Mode)索引定址法與基底定址法類似,但索引定址法是以固定的位址為基底再加上索引暫存器SI或Dl的值以得出資料所在的位址,因為是用SI與Dl這兩個索引暫存器,所以叫索引定址法,尤其處理一維陣列的元素,索引定址法最方便。例如:執行前,已知:AX=3388H,SI=0002HMEM1 DW 1234H,5678H執行指令:MOV AX, MEM1SI執行結果:
19、AX = 5678H註:SI或DI暫存器都可透過加減指令來改變其內容。 例3-10 MOV SI,2MOV AX,STRINGSI說明:執行之後,AL=03H,AH=04H,即 AX=0403H。 例3-11 MOV SI,0MOV AX,STRINGSI說明:同例3-9之記憶體狀態,執行之後,AL=01H,AH=02H,即AX=0201H。l 基底索引定址法(Based Indexed Addressing Mode)基底索引定址法與索引定址法類似,但是基底索引定址法有兩個變數,一個基底暫存器,另一個是索引暫存器,如此在處理二維陣列的元素,基底索引定址法最方便。例如:執行前,已知AX=338
20、8H,SI=0001H,SI=0002H,MEM1 DW 1234H,5678H執行指令:MOV AL, MEM1BX SI執行結果:AX = 56H註1:基底暫存器與索引暫存器都可透過加減指令來改變其內容。註2:以上這些記憶體定址法的表示法都很有彈性,例如以下四種寫法結果都是相同的:MOV AX,BX+DI+3 MOV AX,BX+3DI MOV AX,BX+DI3 MOV AX,BXDI3註3:在記憶體間接定址法中包含三種定址法,即基底定址法、索引定址法與基底索引定址法,必須注意的是,其運算元只能使用BX,BP,SI,DI這四個暫存器,不可使用其它暫存器。例如指令"MOV AX,
21、CX"即是一個錯誤的例子。註4:以上這些記憶體定址法都有點類似,所以把它們之間的差異整理成一個表如右: 例3-12,例3-13 MOV BX,1000HMOV SI, 2MOV Al.,BXSIMOV AH,BXSI2說明:上述程式執行之後,AL= 03H,(AH = 05H)其中記憶體的偏移位址為BX暫存器內容加上SI暫存器內容,即1000H+2 = 1002H (1000H+2+2 = 1004H)。 3-4 定址法實例說明實例:固定輸入5個字元以內,之後該字元反置輸出。 附錄D虛擬指令 補充1:註3:在記憶體間接定址法中包含三種定址法,即基底定址法、索引定址法與基底索引定址法,
22、必須注意的是,其運算元只能使用BX,BP,SI,DI這四個暫存器,不可使用其它暫存器。例如指令"MOV AX,CX"即是一個錯誤的例子。註4:以上這些記憶體定址法都有點類似,所以把它們之間的差異整理成一個表如右:1. 直接定址法:和立即定址法不同的是,運算元不是常數,而是有效記憶體位址;此位址是一個偏移值固定的記憶體位址。是利用標名直接代表記憶體位址的方法且必須配合區段暫存器DS使用。例:MOV SUM,AL說明:SUM為一標名,代表記憶體某一位址。其指令動作流程如下圖所示,而字組放在記憶中,是以低位址為指定位址。 2.暫存器間接定址法:存放運算元資料約有效位址,利用暫存器
23、來間接指出;使用間接定址法的暫存器有SI、DI、BP、BX,而暫存器兩旁必須加上中括號 ,且必須與區段暫存器DS配合使用。例:MOV AX,BX3.基底相對定址法:基底相對定址法是使用基底暫存器BP或BX再加上一偏移值(OFFSET)而得到的實際位址。例:MOV AX,BP + 24.直接索引定址法:直接索引定址法是使用索引暫存器SI或DI再加上一偏移值而得到的實際位址。一般以標名做為基本位址再加上SI或DI的值便可以求出。一般實際位址=DS+標名+SI或DI。例:MOV SI,2MOV AX,SUM SI 5.基底索引定址法:基底索引定址法是將基底定址法與索引定址法結合而成。一般使用基底暫存
24、器加上索引暫存器或是再加上偏移值(標名)而得到實際位址=DS+BX+SI+標名。例:MOV AX,BX+SISUM為了使大家對各種記憶體定址法有個整體概念,尤其是間接定址法是較複雜的,所以將這些定址方法,列在右面表中,以利各位學習。 在上表中均未加上偏移值,若有指定偏移值加上即可,在各種定址的方法中均有規定其使用的暫存器,切不可誤用。例:MOV AX, DX + SI便是個錯誤的例子,因一般在間接定址模式中只能用BX、BP、SI、DI這四個暫存器。補充2:組合語言的程式開發流程 相對於高階語言,組合語言是屬於較低階語言,前面提過組合語言是機器碼的助憶符號,所以組合語言設計者所寫出的程式內容並不
25、是機器碼;而電腦卻只懂得機器碼即一連串的0或1。所以為了使人能和電腦溝通,才發展出電腦語言如Basic、Pascal、C等。但不管如何為了達成人和電腦的溝通必須有一套翻譯的工具把程式設計者所設計的電腦語言(不管是高階或低階)翻譯成電腦可接受執行的機器碼。程式設計師事先會為我們寫一個幫助我們執行翻譯工作的程式交給電腦去執行。一般而言從事翻譯工作的程式,可分成三大類:一 、直譯器(Interpreter):一次翻譯一行電腦語言成機器碼然後去執行。我們可把它想像成雙方打電話互相溝通的情形,一次只可接收到對方的一句話,需等到整個通話結束才能知道結果。如Basic、DbaseIII、Debug皆屬直譯器
26、。其缺點是程式效率較差、速度較慢,但其優點是較適合初學者,且執行除錯工作較為容易,因為程式錯了,就會停在錯誤的那一行指令上。二 、編譯器(Compiler):把電腦語言,經過翻譯程式變成目的檔再經連結程式變成可執行程式。我們可以把它想成是寫一封信,寫信的過程便是翻譯連結的工作,對方收到信就可以知道結果。如C、Pascal等皆屬編譯器。其優點是執行速度快、效率高。三 、組譯器(Assembler):組譯器的功用和使用步驟都和編譯器相同的,只是它是組合語言專用,我們把這個步驟叫組譯。大家都知道在DOS下可以被執行的檔案共有三種,其附檔名分別是.COM(命令檔)、.EXE(執行檔)、.BAT(批次檔
27、)。開機後鍵盤輸入命令執行的流程,我們可以很清楚地看見三種可執行的檔案,其被執行的優先順序,分別是.COM再來是EXE最後才是.BAT。所以假設在磁片中有兩個檔案分別是EX1.EXE及EX1.COM,鍵入A>EX1執行,那一個檔案會被執行呢?當然是EX1.COM。而EX1.EXE則永無重見天日的一天,永遠無法被執行。若出現一行錯誤的英文訊息 "Bad Command or File name",其中的Command是指DOS的內部指令,而Filename就是指這二種可執行檔。 利用組合語言寫程式有幾個主要步驟如下:1. 訂出題目,畫出流程圖或程式的執行計畫。2. 利用編輯程式來編輯程式。編輯程式是為使用者方便所寫的公共程式(Utility Program),程式設計者藉著它輸入並編輯程
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 微生物检测新工具试题及答案
- 2025年注册会计师复习时间安排试题及答案
- 微生物检验人员的职业发展路径试题及答案
- 七年级生物下册 4.9.2 血液循环教学设计 (新版)北师大版
- 团队课题申报书范文
- 国画课题申报书
- 项目管理资格认证考点分析试题及答案
- 深入总结2025年国际金融理财师考试的学员案例与成功经验试题及答案
- 会计职业发展路径试题及答案
- 七年级历史下册 第11课 元朝的统治教学设计 新人教版
- 建筑公司证书津贴支付管理办法
- 高中英语外刊-小猫钓鱼50篇
- 矿山机械全套教学课件
- DL-T5706-2014火力发电工程施工组织设计导则
- 化学-山东省名校考试联盟2023-2024学年高一下学期5月期中检测试题和答案
- 幸福心理学智慧树知到期末考试答案章节答案2024年浙江大学
- 新版王者荣耀答题闯关
- 山东省日照市东港区2023-2024学年六年级下学期期中数学试题
- 人际交往与沟通课件第五章 人际交往的语言沟通与非语言沟通
- 人工智能伦理导论- 课件 第3、4章 人工智能伦理、人工智能风险
- 护士团队建设指南如何带领和管理护理团队
评论
0/150
提交评论