




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、第 4 章 匯編語言程序設(shè)計(jì)4.1匯編語言源程序匯編語言源程序4.2 偽指令偽指令4.3 DOS功能調(diào)用功能調(diào)用4.4 匯編語言程序設(shè)計(jì)基礎(chǔ)匯編語言程序設(shè)計(jì)基礎(chǔ) 思考題、作業(yè)題思考題、作業(yè)題4.1 匯編語言源程序匯編語言源程序匯編語言源程序4.1.14.1.1 匯編語言源程序的結(jié)構(gòu)匯編語言源程序的結(jié)構(gòu)4.14.1.2 .2 匯編語言語句類型及格式匯編語言語句類型及格式4.14.1.3 .3 數(shù)據(jù)項(xiàng)及表達(dá)式數(shù)據(jù)項(xiàng)及表達(dá)式返回匯編語言源程序與匯編程序 匯編語言源程序匯編程序用助記符編寫用助記符編寫匯編程序匯編程序匯編語言匯編語言源程序源程序機(jī)器語言機(jī)器語言目標(biāo)程序目標(biāo)程序源程序的編譯程序源程序的編
2、譯程序接下頁匯編語言程序設(shè)計(jì)與上機(jī)過程 輸入?yún)R編語言源程序(EDIT) 匯編(MASM) 鏈接(LINK) 調(diào)試(TD)源文件源文件 . ASM目標(biāo)文件目標(biāo)文件 .OBJ可執(zhí)行文件可執(zhí)行文件.EXE最終程序最終程序返回 (1) 編輯程序是用來輸入?yún)R編語言源程序的編輯程序是用來輸入?yún)R編語言源程序的工具,包括記事本工具,包括記事本, EDLIN.EXE等等; (2) 匯編語言是以匯編語言是以文本文本格式保存的格式保存的; (3) 匯編程序的源程序必須以匯編程序的源程序必須以 .ASM 作為擴(kuò)作為擴(kuò)展名展名; (4) 輸入和編輯源程序時(shí)必須遵循匯編語言輸入和編輯源程序時(shí)必須遵循匯編語言的語法規(guī)定的語
3、法規(guī)定. 編輯程序返回 (1) 匯編程序用來把源程序翻譯成機(jī)器碼匯編程序用來把源程序翻譯成機(jī)器碼, 包括包括ASM.EXE, MASM.EXE; (2) 匯編程序在翻譯源程序匯編程序在翻譯源程序, 產(chǎn)生一個(gè)產(chǎn)生一個(gè)目標(biāo)目標(biāo)代碼文件代碼文件,與源程序文件名相同與源程序文件名相同,擴(kuò)展名為擴(kuò)展名為.OBJ. 匯編程序返回 通過匯編產(chǎn)生的通過匯編產(chǎn)生的OBJ文件是二進(jìn)制目標(biāo)文文件是二進(jìn)制目標(biāo)文件件, 但用的是浮動地址但用的是浮動地址, 不能直接運(yùn)行不能直接運(yùn)行, 必須用連必須用連接程序接程序LINK.EXE連接和定位連接和定位.連接程序連接程序 返回 DEBUG.exe是是DOS提供的一個(gè)調(diào)試匯編語
4、言提供的一個(gè)調(diào)試匯編語言程序的程序,每個(gè)版本的程序的程序,每個(gè)版本的DOS都帶有該程序。都帶有該程序。 DEBUG程序采用的是程序采用的是命令行命令行方式使用不方便,方式使用不方便,但實(shí)用性強(qiáng)但實(shí)用性強(qiáng).是學(xué)習(xí)匯編語言程序、計(jì)算機(jī)硬件等是學(xué)習(xí)匯編語言程序、計(jì)算機(jī)硬件等課程的有效工具課程的有效工具.DEBUG程序的具體作用:1.查看/修改寄存器, 內(nèi)存單元的內(nèi)容;2.學(xué)習(xí)尋址方式和指令系統(tǒng);3.了解計(jì)算機(jī)取指令, 執(zhí)行指令的工作過程;4.調(diào)試有問題的匯編語言程序。 其他調(diào)試程序其他調(diào)試程序: Turbo Debugger ( TD.exe )調(diào)試程序調(diào)試程序 返回調(diào)試程序調(diào)試程序 下頁調(diào)試程序調(diào)
5、試程序 返回匯編語言程序設(shè)計(jì)的上機(jī)過程返回用 編 輯 程 序 將 源 程 序輸 入 計(jì) 算 機(jī) 保 存 為 .asm文 件調(diào) 用 匯 編 程 序?qū)?源 程 序 文 件 進(jìn) 行 匯 編是 否 有 錯(cuò) 誤 ?調(diào) 用 連 接 程 序 對 匯 編 生 成 的目 標(biāo) 文 件 .obj進(jìn) 行 連 接是 否 有 錯(cuò) 誤 ?運(yùn) 行 連 接 后 生 成 的可 執(zhí) 行 文 件 .exe結(jié) 果 是 否 正 確 ?調(diào) 用 調(diào) 試 程 序 進(jìn) 行 調(diào) 試結(jié) 果 是 否 正 確 ?結(jié) 束編 寫 源 程 序修 改 已 輸 入 的 源 程 序YYNYNNYN4.1.1 匯編語言源程序的結(jié)構(gòu)匯編語言源程序的結(jié)構(gòu)數(shù)據(jù)段名數(shù)據(jù)段名
6、 SEGMENT 數(shù)據(jù)段名數(shù)據(jù)段名 ENDS附加段名附加段名 SEGMENT 附加段名附加段名 ENDS堆棧段名堆棧段名 SEGMENT 堆棧段名堆棧段名 ENDS代碼段名代碼段名 SEGMENT 代碼段名代碼段名 ENDS END 返回4.1.2 匯編語言語句類型及格式匯編語言語句類型及格式指令性語句指示性語句CPU執(zhí)行的語句,能執(zhí)行的語句,能夠生成目標(biāo)代碼夠生成目標(biāo)代碼CPU不執(zhí)行,而由匯編不執(zhí)行,而由匯編程序執(zhí)行的語句,不生程序執(zhí)行的語句,不生成目標(biāo)代碼成目標(biāo)代碼返回匯編語言語句格式匯編語言語句格式 指令性語句指令性語句: 標(biāo)號: 前綴 助記符 操作數(shù),操作數(shù) ;注釋指令的符號地址指令的
7、符號地址標(biāo)號后要有冒號標(biāo)號后要有冒號操作碼操作碼注釋前加分號注釋前加分號例:例:START:MOV AX,X返回匯編語言語句格式匯編語言語句格式名字 偽指令助記符 操作數(shù) ,操作數(shù), ;注釋變量的符號地址變量的符號地址其后不加冒號其后不加冒號指示性語句中至指示性語句中至少有一個(gè)操作數(shù)少有一個(gè)操作數(shù)指示性語句:指示性語句:例:例:X DW100返回標(biāo)號、名字標(biāo)號、名字 標(biāo)號后有冒號,在指令性語句前;名字后不加冒號,在指示性語句前。 英文字母、數(shù)字及專用字符組成,最大長度不能超過31個(gè),且不能由數(shù)字打頭,不能用保留字(如寄存器名,指令助記符,偽指令)。 返回操作碼操作碼 指令碼 偽指令助記符 指示
8、匯編程序要完成的操作。 作用: 定義變量 分配存儲單元 指示程序開始和結(jié)束等命令命令CPU要完成的操作要完成的操作返回注注 釋釋 用分號作為注釋的開始; 用于說明程序或語句的功能,以便于閱讀和理解返回操作數(shù)操作數(shù)寄存器存儲器單元常量變量或標(biāo)號表達(dá)式返回1常量常量常量常量是在程序執(zhí)行過程中不變的量。是在程序執(zhí)行過程中不變的量。包括數(shù)字常量和字符串常量兩種。包括數(shù)字常量和字符串常量兩種。(1)數(shù)字常量數(shù)字常量【例例3-1】3D,10101001B,0F800H(2)字符串常量字符串常量【例例3-2】AB 41H、42H4.1.3 數(shù)據(jù)項(xiàng)及表達(dá)式數(shù)據(jù)項(xiàng)及表達(dá)式接下頁2標(biāo)號標(biāo)號 標(biāo)號標(biāo)號只在代碼段使用
9、。是其后緊跟指令只在代碼段使用。是其后緊跟指令所在存儲單元的符號首地址。所在存儲單元的符號首地址。 一般情況下只有一般情況下只有 跳轉(zhuǎn)、循環(huán)、過程調(diào)跳轉(zhuǎn)、循環(huán)、過程調(diào)用、中斷等指令引用標(biāo)號。用、中斷等指令引用標(biāo)號。 標(biāo)號具有標(biāo)號具有3種屬性:種屬性:段、偏移量、類型段、偏移量、類型(near,far)。 【例例3-3】start: mov ax, 234.1.3 數(shù)據(jù)項(xiàng)及表達(dá)式數(shù)據(jù)項(xiàng)及表達(dá)式接下頁 3變量變量 變量變量是程序運(yùn)行期間可以隨時(shí)修改的數(shù)據(jù)是程序運(yùn)行期間可以隨時(shí)修改的數(shù)據(jù)對象,用來存放計(jì)算時(shí)的初值、中間結(jié)果或最對象,用來存放計(jì)算時(shí)的初值、中間結(jié)果或最終結(jié)果。先定義后使用。終結(jié)果。先定
10、義后使用。 變量名變量名對應(yīng)某個(gè)數(shù)據(jù)或數(shù)據(jù)區(qū)的首地址。對應(yīng)某個(gè)數(shù)據(jù)或數(shù)據(jù)區(qū)的首地址。 變量有變量有3種屬性:段、偏移量、類型種屬性:段、偏移量、類型(byte,word 等)。等)。【例例3-4】num db 11H,22H,33H mov al,num mov bl,num+24.1.3 數(shù)據(jù)項(xiàng)及表達(dá)式數(shù)據(jù)項(xiàng)及表達(dá)式接下頁4表達(dá)式表達(dá)式 表達(dá)式表達(dá)式是由運(yùn)算符連接起來的式子。表達(dá)式的是由運(yùn)算符連接起來的式子。表達(dá)式的求值任務(wù)是由匯編程序完成的。求值任務(wù)是由匯編程序完成的。(1)算術(shù)運(yùn)算符算術(shù)運(yùn)算符: +、*、/、mod【例例3-5】mov al, 8 + 5(2)邏輯運(yùn)算符邏輯運(yùn)算符: an
11、d、or、xor、not【例例3-6】mov al, 0adh and 0cch;邏輯運(yùn)算符按位運(yùn)算;邏輯運(yùn)算符按位運(yùn)算4.1.3 數(shù)據(jù)項(xiàng)及表達(dá)式數(shù)據(jù)項(xiàng)及表達(dá)式接下頁(3)關(guān)系運(yùn)算符關(guān)系運(yùn)算符:eq、ne、lt、gt、le、ge【例例3-7】mov ax, 4 eq 3 ;關(guān)系真,值為;關(guān)系真,值為FFFFH。關(guān)系假,值為。關(guān)系假,值為0(4)取值運(yùn)算符和屬性運(yùn)算符取值運(yùn)算符和屬性運(yùn)算符: offset、seg、type、length、size、ptr OFFSET:得到一個(gè)標(biāo)號或變量的偏移地址。:得到一個(gè)標(biāo)號或變量的偏移地址?!纠?-8】mov si, offset data1SEG:得到
12、一個(gè)標(biāo)號或變量的段地址。:得到一個(gè)標(biāo)號或變量的段地址?!纠?-9】mov ax, seg data4.1.3 數(shù)據(jù)項(xiàng)及表達(dá)式數(shù)據(jù)項(xiàng)及表達(dá)式接下頁TYPE:如果是變量,則匯編程序?qū)⒒厮驮撟兞康念愋椭等绻亲兞?,則匯編程序?qū)⒒厮驮撟兞康念愋椭担―B為為1,DW為為2,DD為為4););如果是標(biāo)號,則匯編程序?qū)⒒厮驮摌?biāo)號的類型值如果是標(biāo)號,則匯編程序?qū)⒒厮驮摌?biāo)號的類型值(NEAE為為1,F(xiàn)AR為為2)。)。LENGTH:只對變量有效。只對變量有效。對于變量中使用對于變量中使用DUP的情況,匯編程序?qū)⒒厮头峙浣o該的情況,匯編程序?qū)⒒厮头峙浣o該變量的單元數(shù)。而對于其它情況則回送變量的單元數(shù)。而對于其它
13、情況則回送1。4.1.3 數(shù)據(jù)項(xiàng)及表達(dá)式數(shù)據(jù)項(xiàng)及表達(dá)式接下頁 SIZE:只對變量有效。只對變量有效。匯編程序回送分配給該變量的字節(jié)數(shù)。匯編程序回送分配給該變量的字節(jié)數(shù)。此值是此值是LENGTH值和值和TYPE值的乘積。值的乘積。PTR:指定位于其后的存儲器操作數(shù)的類型。指定位于其后的存儲器操作數(shù)的類型。【例例3-10】mov al, byte ptr si;源操作數(shù)為字節(jié)類型;源操作數(shù)為字節(jié)類型4.1.3 數(shù)據(jù)項(xiàng)及表達(dá)式數(shù)據(jù)項(xiàng)及表達(dá)式返回 偽指令偽指令是告訴匯編程序生成目標(biāo)代碼的指是告訴匯編程序生成目標(biāo)代碼的指示性指令語句示性指令語句. 1. 符號定義偽指令符號定義偽指令2. 內(nèi)存數(shù)據(jù)定義偽指
14、令內(nèi)存數(shù)據(jù)定義偽指令3. 段定義偽指令段定義偽指令 4. 段寄存器說明偽指令段寄存器說明偽指令5. 定位偽指令定位偽指令 6. 子程序偽指令子程序偽指令7. 一個(gè)完整源程序結(jié)構(gòu)例一個(gè)完整源程序結(jié)構(gòu)例4.2 偽指令偽指令返回(1)EQU偽指令偽指令 偽指令格式偽指令格式: EQU 指令功能指令功能: 給符號名賦值給符號名賦值. 名字可以由程序員名字可以由程序員取定取定, 表達(dá)式應(yīng)該是可以計(jì)算得出一個(gè)具體值表達(dá)式應(yīng)該是可以計(jì)算得出一個(gè)具體值. 例例: PORT EQU 88H;定義符號定義符號PORT代表代表88H DATA EQU PORT+2;定義符號定義符號DATA代表代表PORT+2 注意
15、注意: 用用EQU定義的符號定義的符號,不能重新再定義不能重新再定義; 如果在表達(dá)式中用了其他符號如果在表達(dá)式中用了其他符號,必須事必須事先定義先定義;符號定義偽指令接下頁(2)(賦值賦值)偽指令偽指令 格式格式: = 指令功能指令功能:與與EQU類似類似,唯一的區(qū)別是唯一的區(qū)別是“=”可以可以隨時(shí)對符號名賦新值隨時(shí)對符號名賦新值, 而不必使用而不必使用PURGE偽指偽指令令. 例例: PORT=88H;定義符號定義符號PORT代表代表88H DATA=PORT+2;定義符號定義符號DATA代表代表PORT+2 PORT=08H;定義符號定義符號PORT代表代表08H符號定義偽指令接下頁(3)
16、 PURGE解除符號定義偽指令解除符號定義偽指令 格式格式: PURGE 符號符號1, 符號符號2, 功能功能:撤消用撤消用EQU賦值的符號名賦值的符號名, 以便于賦予以便于賦予新值新值. 例例: PURGE PORT, DATA ;撤消用撤消用EQU對對PORT,DATA的賦值的賦值符號定義偽指令返回 格式格式: 變量變量 命令命令 參數(shù)參數(shù)1, 參數(shù)參數(shù)2, 功能功能:數(shù)據(jù)定義語句用來分配存儲單元數(shù)據(jù)定義語句用來分配存儲單元.數(shù)據(jù)數(shù)據(jù)定義語句的命令有定義語句的命令有: DB 定義定義字節(jié)字節(jié)數(shù)據(jù)數(shù)據(jù) DW定義定義字字?jǐn)?shù)據(jù)數(shù)據(jù) DD定義定義雙字雙字?jǐn)?shù)據(jù)數(shù)據(jù) DQ定義定義8字節(jié)字節(jié)數(shù)據(jù)數(shù)據(jù) D
17、T定義定義10字節(jié)字節(jié)數(shù)據(jù)數(shù)據(jù) 內(nèi)存數(shù)據(jù)定義偽指令接下頁 復(fù)制操作復(fù)制操作 格式格式: DUP 數(shù)據(jù)數(shù)據(jù)1,數(shù)據(jù)數(shù)據(jù)2,內(nèi)存數(shù)據(jù)定義偽指令接下頁例例: VAR1 DB 12H,ABVAR2 DW 1234H DD 12345678H DB ?, 11H Y1 DB 2 DUP(0,1) Y2 DW 2 DUP(?,(?,1) 內(nèi)存數(shù)據(jù)定義偽指令返回VAR1 12H Y1 00H 41H A 01H 42H B 00HVAR2 34H 1234H 01H 12H Y2 - - 78H 12345678H - 56H 01H 34H 00 12H - - - 預(yù)留存儲單元 - 11H 01H 00
18、H 定義匯編語言源程序中的邏輯段。定義匯編語言源程序中的邏輯段。格式:格式: 段名段名 SEGMENT 定位類型定位類型組合類型組合類型類別類別 段名段名 ENDS 內(nèi)的可選項(xiàng)主要用于多個(gè)程序模塊的連接。內(nèi)的可選項(xiàng)主要用于多個(gè)程序模塊的連接。 段定義偽指令返回 告訴匯編程序用告訴匯編程序用SEGMENT定義過的段的段定義過的段的段地址將要放到哪個(gè)段寄存器中。但真正把段地址地址將要放到哪個(gè)段寄存器中。但真正把段地址裝入段寄存器的操作需由程序員自己完成(代碼裝入段寄存器的操作需由程序員自己完成(代碼段除外)。段除外)。 格式:格式: ASSUME 段寄存器名:段名段寄存器名:段名,段寄存器:段,段
19、寄存器:段名名,段寄存器說明偽指令返回1)ORG 表達(dá)式表達(dá)式表示該語句后的指令或數(shù)據(jù)將以表達(dá)式的值作表示該語句后的指令或數(shù)據(jù)將以表達(dá)式的值作起始存放單元的偏移量。起始存放單元的偏移量。2)$(當(dāng)前位置計(jì)數(shù)器)(當(dāng)前位置計(jì)數(shù)器)記錄匯編時(shí)所匯編的當(dāng)前字節(jié)的偏移量。記錄匯編時(shí)所匯編的當(dāng)前字節(jié)的偏移量。3)END 標(biāo)號標(biāo)號說明源程序結(jié)束,并說明程序執(zhí)行起始位置。說明源程序結(jié)束,并說明程序執(zhí)行起始位置。定位偽指令返回 將具有某種功能的程序塊定義為一個(gè)過程(即將具有某種功能的程序塊定義為一個(gè)過程(即子程序)。子程序)。 格式:格式:過程名過程名 PROC NEAR/FAR RET過程名過程名 ENDP
20、子程序偽指令返回一個(gè)完整源程序結(jié)構(gòu)例一個(gè)完整源程序結(jié)構(gòu)例DSEG SEGMENTDATA1 DB 1,2,DATA2 DW 1234HDSEG ENDSESEG SEGMENT DB 20 DUP(?)ESEG ENDSSSEG SEGMENT STACK STACK DB 200 DUP(?)SSEG ENDS接下頁一個(gè)完整源程序結(jié)構(gòu)例一個(gè)完整源程序結(jié)構(gòu)例 CSEG SEGMENT ASSUME CS:CSEG,DS:DSEG, ES:ESEG,SS:SSEG START:MOV AX,DSEG MOV DS,AX MOV AX,ESEG MOV ES,AX MOV AX,SSEG MOV
21、SS,AX CSEG ENDS END START源程序源程序 代碼代碼返回一什么是什么是DOS系統(tǒng)功能調(diào)用系統(tǒng)功能調(diào)用二二DOS系統(tǒng)功能調(diào)用的方法系統(tǒng)功能調(diào)用的方法三三DOS系統(tǒng)功能調(diào)用示例系統(tǒng)功能調(diào)用示例 DOS功能調(diào)用綜合示例功能調(diào)用綜合示例4.3 DOS功能調(diào)用功能調(diào)用返回功能調(diào)用功能調(diào)用 微型機(jī)的系統(tǒng)軟件提供了許多微型機(jī)的系統(tǒng)軟件提供了許多可供用戶調(diào)用的可供用戶調(diào)用的功能子程序功能子程序,用戶,用戶可在自己的程序中直接調(diào)用這些功可在自己的程序中直接調(diào)用這些功能,無需再自行編寫。能,無需再自行編寫。功能調(diào)用的種類功能調(diào)用的種類 1、DOS功能調(diào)用功能調(diào)用 :高級調(diào)用,:高級調(diào)用,不依賴
22、于具體的硬件系統(tǒng)不依賴于具體的硬件系統(tǒng) 。 2、BIOS功能調(diào)用功能調(diào)用:低級調(diào):低級調(diào)用,用戶程序必須在與用,用戶程序必須在與IBM PC/XT 兼容的計(jì)算機(jī)上運(yùn)行。兼容的計(jì)算機(jī)上運(yùn)行。一什么是DOS系統(tǒng)功能調(diào)用返回 應(yīng)用程序應(yīng)用程序 PC 硬件硬件 BIOS DOS高級語言高級語言硬件CS 的層次模型的層次模型 DOS系統(tǒng)功能調(diào)用簡表(系統(tǒng)功能調(diào)用簡表(附錄附錄C)DOS系統(tǒng)功能調(diào)用的使用方法系統(tǒng)功能調(diào)用的使用方法step1:AH功能號功能號step2:在其他寄存器中放入該功能所需的入口參數(shù):在其他寄存器中放入該功能所需的入口參數(shù)step3:執(zhí)行:執(zhí)行INT 21H指令指令step4:分析
23、出口參數(shù):分析出口參數(shù) 二DOS系統(tǒng)功能調(diào)用的方法返回功能號功能入口參數(shù) 出口參數(shù)一、單字符輸入一、單字符輸入 調(diào)用方法: MOV AH,01 INT 21H 輸入的字符在AL中下頁單字符輸入例GET_KEY: MOV AH,1 INT 21H CMP AL,Y JZ YES CMP AL,N JZ NO JNZ GET_KEY YES: NO: 交互式應(yīng)交互式應(yīng) 答程序答程序下頁二、字符串輸入二、字符串輸入 注意問題: 調(diào)用格式 字符輸入緩沖區(qū)的定義下頁1. 調(diào)用格式 功能號OAH 字符串在內(nèi)存中的存放地址 INT 21Hn AHn DS:DX下頁2. 定義字符緩沖區(qū) 用戶自定義緩沖區(qū)格式:
24、0DHN1N2整個(gè)緩沖區(qū)整個(gè)緩沖區(qū)最大可鍵入字符數(shù)最大可鍵入字符數(shù)實(shí)際鍵入字符數(shù)實(shí)際鍵入字符數(shù)存放鍵入的字符存放鍵入的字符存放字符個(gè)數(shù):存放字符個(gè)數(shù):65533下頁輸入字符串程序段 DAT1 DB 20,?,20 DUP(?) LEA DX,DAT1 MOV AH,0AH INT 21H在數(shù)據(jù)段在數(shù)據(jù)段中定義中定義下頁輸入緩沖區(qū)14H ?20個(gè)字節(jié)個(gè)字節(jié)定義后的輸入緩定義后的輸入緩沖區(qū)初始狀態(tài):沖區(qū)初始狀態(tài):下頁三、單字符顯示輸出 功能號O2H 待輸出字符 INT 21Hn AHn DL下頁單字符顯示輸出例 MOVAH,02 MOVDL,41H INT21H執(zhí)行結(jié)果:執(zhí)行結(jié)果:屏幕顯示屏幕顯示
25、A下頁四、字符串輸出顯示 功能號O9H 待輸出字符串的偏移地址 INT 21Hn AHn DS:DX下頁字符串輸出顯示 被顯示的字符串必須以$結(jié)束,且所顯示的 內(nèi)容不應(yīng)出現(xiàn)非可見的ASCII碼下頁字符串輸出顯示例DATA SEGMENTMESS1 DB Input String: 0DH,0AH,$DATA ENDSCODE SEGMENT MOV AH,09MOV DX,OFFSET MESS1INT21H 返回例例:從鍵盤讀入一串字符,并在屏幕上顯示出來。從鍵盤讀入一串字符,并在屏幕上顯示出來。解:解:(1)從鍵盤讀入一串字符。(從鍵盤讀入一串字符。(功能號:功能號:0AH) 緩沖區(qū)的首地
26、址由緩沖區(qū)的首地址由DS:DX指定。緩沖區(qū)結(jié)構(gòu):指定。緩沖區(qū)結(jié)構(gòu):DOS功能調(diào)用綜合示例功能調(diào)用綜合示例接下頁緩沖區(qū)長度 n實(shí)際讀入的字符個(gè)數(shù) m預(yù)留n個(gè)字節(jié)保存實(shí)際鍵入的字符n + 2 個(gè)字節(jié)DS:DX (2)在屏幕上顯示字符串。(在屏幕上顯示字符串。(功能號:功能號:09H)字字符串首地址由符串首地址由DS:DX指定。被顯示的字符串必須以指定。被顯示的字符串必須以“$”字符結(jié)束。字符結(jié)束。 要顯示的 n 個(gè)字符 $ DS:DXDATA SEGMENTBUFFER DB50,0,50 DUP(?) ;最多可鍵入最多可鍵入50個(gè)字符個(gè)字符DATA ENDSCODESEGMENTASSUME C
27、S:CODE, DS:DATASTART:MOV AX,SEG DATAMOV DS,AX;將緩沖區(qū)段地址送將緩沖區(qū)段地址送DS ;程序功能部分;程序功能部分CODEENDSEND STARTDOS功能調(diào)用綜合示例功能調(diào)用綜合示例返回MOV DX, OFFSET BUFFER ;將緩沖區(qū)起始偏移地址送將緩沖區(qū)起始偏移地址送DXMOV AH, 0AH ;字符串輸入功能;字符串輸入功能 INT21HMOV BX, OFFSET BUFFER MOV CL,BX+1;實(shí)際輸入字符個(gè)數(shù)送實(shí)際輸入字符個(gè)數(shù)送CLXOR CH,CHMOV SI,CX ;實(shí)際輸入字符個(gè)數(shù)送實(shí)際輸入字符個(gè)數(shù)送SIMOV BYT
28、E PTR BX+SI+2,$ ;插入串結(jié)束符插入串結(jié)束符MOV DX,OFFSET BUFFERINCDXINCDX ;顯示字符串起始地址送顯示字符串起始地址送DX MOV AH,09H;字符串顯示功能;字符串顯示功能 INT21HDOS功能調(diào)用綜合示例功能調(diào)用綜合示例返回1 順序結(jié)構(gòu)順序結(jié)構(gòu)2 分支分支結(jié)構(gòu)結(jié)構(gòu)3 循環(huán)循環(huán)結(jié)構(gòu)結(jié)構(gòu)4 子程序子程序4.4 匯編語言程序設(shè)計(jì)基礎(chǔ)匯編語言程序設(shè)計(jì)基礎(chǔ)返回例:編程例:編程實(shí)現(xiàn)實(shí)現(xiàn)X+YZ, 源程序源程序 DATA1 SEGMENT; 數(shù)據(jù)段數(shù)據(jù)段 X DB ? Y DB ? Z DB ? DATA1 ENDSCODE1 SEGMENT;代碼段代碼段
29、 ASSUME CS:CODE1,DS:DATA1 START: MOV AX,DATA1; 數(shù)據(jù)段段地址數(shù)據(jù)段段地址AX MOV DS,AX; AX DS 1 順序結(jié)構(gòu)順序結(jié)構(gòu)接下頁 順序結(jié)構(gòu)程序是指在程序中不包含任何轉(zhuǎn)移類順序結(jié)構(gòu)程序是指在程序中不包含任何轉(zhuǎn)移類指令指令. 執(zhí)行時(shí)按指令的先后次序從第一條開始逐條執(zhí)執(zhí)行時(shí)按指令的先后次序從第一條開始逐條執(zhí)行行,直至程序結(jié)束直至程序結(jié)束. MOV AL,X ; 內(nèi)存單元內(nèi)存單元X的數(shù)據(jù)的數(shù)據(jù)AL ADD AL,Y; 內(nèi)存單元內(nèi)存單元Y的數(shù)據(jù)的數(shù)據(jù)+ALAL, ;即即X+Y AL MOV Z, AL ; AL內(nèi)存單元內(nèi)存單元Z, 即求和結(jié)果即求和
30、結(jié)果; ;送回送回Z MOV AH,4CH;送功能號送功能號 INT 21H;系統(tǒng)功能調(diào)用,返回操作系統(tǒng)系統(tǒng)功能調(diào)用,返回操作系統(tǒng) CODE1 ENDS END START1 順序結(jié)構(gòu)順序結(jié)構(gòu)返回 利用轉(zhuǎn)移指令,控制計(jì)算機(jī)執(zhí)行某段程序或不利用轉(zhuǎn)移指令,控制計(jì)算機(jī)執(zhí)行某段程序或不執(zhí)行某段程序,就是執(zhí)行某段程序,就是分支程序分支程序。2 分支結(jié)構(gòu)接下頁判定條件YN條件1?P1YN條件2?P2YN條件m?PmYNPm+1兩路分支多路分支 例例:計(jì)算符號函數(shù)計(jì)算符號函數(shù)SGN (X)的值。的值。 1當(dāng)當(dāng)X0Y= 0當(dāng)當(dāng)X=0 -1當(dāng)當(dāng)X02 分支結(jié)構(gòu)接下頁 解: 編寫流程圖Y YAX 0?AX 0?A
31、X 0?Y Y0 0Y Y1 1N NN NY YDATA SEGMENTX DW?YDW?DATA ENDSCODE SEGMENTASSUME CS: CODE, DS: DATASTART:MOV AX, DATAMOV DS, AX ;DS指向指向DATA段段;功能部分功能部分 RES:MOV AH, 4CH ;返回;返回DOSINT 21H CODE ENDS END START程序清單程序清單返回MOV AX, XCMP AX, 0;X與與0比較比較JL NEXT1 ;若;若X0,則轉(zhuǎn),則轉(zhuǎn)NEXT2處理處理MOV Y, 0;X=0,則,則Y=0JMP RES;轉(zhuǎn)處理結(jié)束處;轉(zhuǎn)處理
32、結(jié)束處NEXT1:MOV Y, -1;X0,則,則Y=1 程序清單程序清單返回 控制計(jì)算機(jī)反復(fù)執(zhí)行一段指令序列的程序結(jié)構(gòu)控制計(jì)算機(jī)反復(fù)執(zhí)行一段指令序列的程序結(jié)構(gòu)就是就是循環(huán)程序循環(huán)程序.3 循環(huán)結(jié)構(gòu)接下頁循 環(huán) 初 始 狀 態(tài)循 環(huán) 控 制 條 件循 環(huán) 體YN循環(huán)初始狀態(tài)循環(huán)控制條件循環(huán)體YN非零次循環(huán)結(jié)構(gòu)零次循環(huán)結(jié)構(gòu) 例:例:統(tǒng)計(jì)字節(jié)數(shù)據(jù)統(tǒng)計(jì)字節(jié)數(shù)據(jù)Z的的1的個(gè)數(shù)的個(gè)數(shù), 將結(jié)果放在將結(jié)果放在RESULT內(nèi)。內(nèi)。3 循環(huán)結(jié)構(gòu)接下頁YN NCF = 1?CF = 1?結(jié)束結(jié)束 ALAL右移一位右移一位BL+1 BLBL+1 BL 初始化初始化計(jì)數(shù)器初值計(jì)數(shù)器初值 BLBL0 0 設(shè)置循環(huán)次數(shù)
33、設(shè)置循環(huán)次數(shù) CXCX8 8 Z Z 的值送入的值送入ALALCX = 0?CX = 0?N NY YCX-1 CXCX-1 CX統(tǒng)計(jì)結(jié)果統(tǒng)計(jì)結(jié)果BL RESULTBL RESULT 解: 編寫流程圖DATAZ SEGMENT Z DB?RESULT DB?DATAZ ENDSCODE SEGMENT ASSUME CS:CODE,DS:DATAZSTART: MOV AX,DATAZ MOV DS,AX ;送段地址至送段地址至DS ;功能部分功能部分MOV AH,4CH INT 21H CODE ENDS END START 程序清單程序清單返回XOR BL,BL;累加器累加器BL清清0 M
34、OV CX,08H;循環(huán)次數(shù)送循環(huán)次數(shù)送CX LEA SI,Z ;取取X的指針的指針 MOV AL,SI;取取X送送AL SUM: SHR AL,1;邏輯右移邏輯右移1位位 JNC NONE;CF=0,轉(zhuǎn)移到轉(zhuǎn)移到NONE INC BL;CF=1,BL+1BL NONE: LOOP SUM MOV RESULT,BL;統(tǒng)計(jì)值送統(tǒng)計(jì)值送RESULT內(nèi)存單元內(nèi)存單元程序清單程序清單返回 一個(gè)程序中,當(dāng)在不同的地方需要多次使用某一個(gè)程序中,當(dāng)在不同的地方需要多次使用某段程序時(shí),我們常將這段程序單獨(dú)編寫成一個(gè)程序段程序時(shí),我們常將這段程序單獨(dú)編寫成一個(gè)程序段,稱為段,稱為子程序子程序/過程過程.(1)
35、子程序的定義格式子程序的定義格式(2)子程序的調(diào)用子程序的調(diào)用(3)編寫子程序的注意事項(xiàng)編寫子程序的注意事項(xiàng)(4)子程序的基本框架子程序的基本框架 例題例題4 子程序返回格式格式: 子程序名子程序名 PROC RET 子程序名子程序名 ENDP(1)子程序的定義格式返回格式:格式:CALL 子程序名子程序名(2)子程序的調(diào)用返回入口參數(shù)入口參數(shù):主程序向子程序傳遞的數(shù)據(jù)。:主程序向子程序傳遞的數(shù)據(jù)。出口參數(shù)出口參數(shù):子程序向主程序傳遞的數(shù)據(jù):子程序向主程序傳遞的數(shù)據(jù)。 1.現(xiàn)場保護(hù)現(xiàn)場保護(hù): 保護(hù)調(diào)用子程序的現(xiàn)場保護(hù)調(diào)用子程序的現(xiàn)場, 即保即保護(hù)子程序中會用到的寄存器護(hù)子程序中會用到的寄存器,
36、 將這些寄存器入棧將這些寄存器入棧; 2.功能子程序功能子程序: 子程序要完成的功能子程序要完成的功能; 3. 恢復(fù)現(xiàn)場恢復(fù)現(xiàn)場: 為了使計(jì)算機(jī)返回到主程序?yàn)榱耸褂?jì)算機(jī)返回到主程序調(diào)用時(shí)的狀態(tài)調(diào)用時(shí)的狀態(tài), 將入棧的數(shù)據(jù)出棧將入棧的數(shù)據(jù)出棧.注意順序注意順序!(3)編寫子程序的注意事項(xiàng)返回設(shè)某一子程序中要用到寄存器設(shè)某一子程序中要用到寄存器BX,CX,SI,DI 則:則: AAA PROC PUSH BX PRSH CX PUSH SI PUSH DI ;子程序的功能程序子程序的功能程序 POP DIPOP SI POP CX POP BX RET AAA ENDP(4)子程序的基本框架子程序
37、的基本框架返回 編寫編寫子程序子程序統(tǒng)計(jì)統(tǒng)計(jì)AL (入口參數(shù)入口參數(shù))中的中的“1”的個(gè)數(shù)的個(gè)數(shù),結(jié)果放在結(jié)果放在AL(出口參數(shù)出口參數(shù))中)中ABC PROC PUSH BX PUSH CX XOR BL,BL;累加器累加器BL清清0 MOV CX,08H;循環(huán)次數(shù)送循環(huán)次數(shù)送CXSUM:SHR AL,1;邏輯右移邏輯右移1位位 JNC NONE;CF=0,轉(zhuǎn)移到轉(zhuǎn)移到NONE INC BL;CF=1,BL+1BL NONE: LOOP SUM MOV AL, BL; AL里保存的是里保存的是“1”的統(tǒng)計(jì)個(gè)數(shù)的統(tǒng)計(jì)個(gè)數(shù) POP CX POP BX RET ABC ENDP例題接下頁 通過子程序調(diào)用通過子程序調(diào)用統(tǒng)計(jì)數(shù)據(jù)統(tǒng)計(jì)數(shù)據(jù)X 中的中的“1”的個(gè)數(shù)的個(gè)數(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)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年激光隧道斷面測量系統(tǒng)項(xiàng)目合作計(jì)劃書
- 電競酒店宵禁管理協(xié)議
- 第11講 美國 巴西 第2課時(shí) 教學(xué)設(shè)計(jì) 2023-2024學(xué)年高二下學(xué)期
- 常泰過江通道主橋施工方案
- 第2課 學(xué)會寬容 第一課時(shí) 教學(xué)設(shè)計(jì)-2023-2024學(xué)年道德與法治六年級下冊統(tǒng)編版
- XX年招生網(wǎng)點(diǎn)加盟合同6篇
- 第三章 實(shí)驗(yàn)活動1 乙酸乙酯的制備與性質(zhì) 教學(xué)設(shè)計(jì) 2023-2024學(xué)年高二下學(xué)期化學(xué)人教版(2019)選擇性必修3
- 奇妙的門鈴(教學(xué)設(shè)計(jì))-2023-2024學(xué)年小學(xué)生科學(xué)課后服務(wù)拓展
- 室內(nèi)鋼結(jié)構(gòu)防銹漆施工方案
- 第七單元第 23 課 內(nèi)戰(zhàn)爆發(fā)2023-2024學(xué)年八年級上冊歷史同步教學(xué)設(shè)計(jì)(部編版)
- 春節(jié)習(xí)俗中的傳統(tǒng)節(jié)日服飾與裝扮
- 兒童編程課件
- (完整word版)英語四級單詞大全
- 腺樣體護(hù)理查房
- 備考期末-六選五-專項(xiàng)練習(xí)-2022-2023學(xué)年人教版英語八年級上冊
- 產(chǎn)品設(shè)計(jì)思維 課件 第1章 產(chǎn)品設(shè)計(jì)思維概述
- 兒童和青少年高尿酸血癥的預(yù)防和管理
- 中國移動企業(yè)文化理念體系
- 酒店服務(wù)禮儀(中職酒店服務(wù)與管理專業(yè))PPT完整全套教學(xué)課件
- 混合動力汽車構(gòu)造與檢修(高職新能源汽車專業(yè))PPT完整全套教學(xué)課件
- 佛教寺院修繕方案
評論
0/150
提交評論