




已閱讀5頁,還剩19頁未讀, 繼續(xù)免費閱讀
版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領
文檔簡介
2019/7/1,80x86匯編語言程序設計,第5章基本控制結構,講授要點,字符與字符串的輸入/輸出方法 雙分支與多分支結構 循環(huán)程序的控制方法,2019/7/1,80x86匯編語言程序設計,5.1 順序結構 5.1.1 簡單程序設計,DATAS SEGMENT ;此處輸入數(shù)據(jù)段代碼 DATAS ENDS STACKS SEGMENT ;此處輸入堆棧段代碼 STACKS ENDS CODES SEGMENT ASSUME CS:CODES,DS:DATAS,SS:STACKS START: MOV AH,1 INT 21H ;輸入字母 CMP AL,a JB EXIT ;小于a退出 CMP AL,z,JA EXIT ;大于z退出 SUB AL,20H ;大于a小于z,則轉(zhuǎn)換成大寫字母(減20h后轉(zhuǎn)換為大寫) MOV DL,AL MOV AH,02H ;AH=2,顯示字符 INT 21H JMP START EXIT: MOV AH,4CH ;前面沒有入棧操作,所以要調(diào)用編號為4C的功能返回DOS INT 21H CODES ENDS END START,2019/7/1,80x86匯編語言程序設計,5.1.2 字符與字符串的輸入/輸出方法,DOS系統(tǒng)調(diào)用INT 21H提供了字符及字符串的I/O功能,例如: 01H:從鍵盤讀入一個字符 02H:顯示一個字符 09H:顯示一個字符串 0AH:從鍵盤讀入一個字符串,2019/7/1,80x86匯編語言程序設計,5.1.2 字符與字符串的輸入/輸出方法,1. 從鍵盤讀入一個字符 功能號:01H 出口參數(shù):AL = 輸入字符的ASCII碼 功能:等待從鍵盤讀入一個字符,將其ASCII碼送入AL,同時將該字符顯示在屏幕上。 調(diào)用方法: mov ah, 1 int 21h 說明:輸入一個字符后,不需要回車。若只鍵入回車,則AL = 0DH。,2019/7/1,80x86匯編語言程序設計,5.1.2 字符與字符串的輸入/輸出方法,2. 顯示一個字符 功能號:02H 入口參數(shù):DL = 要顯示字符的ASCII碼 功能:在當前光標位置顯示DL中的字符,光標右移。 調(diào)用方法示例: mov dl, A ; 顯示字符A mov ah, 2 int 21h 說明:顯示字符0DH和0AH將產(chǎn)生回車和換行的作用。,2019/7/1,80x86匯編語言程序設計,5.1.2 字符與字符串的輸入/輸出方法,3. 顯示一個字符串 功能號:09H 入口參數(shù):DS:DX = 欲顯示字符串在內(nèi)存的首地址,且字符串必須以$(24H)作為結束符。 功能:在當前光標位置,顯示由DS:DX所指的、以$結尾的字符串,且光標右移。其中,$不算在顯示的字符串之內(nèi)。 調(diào)用方法示例: String db Hello!, $; 顯示字符串Hello! mov ax, seg String mov ds, ax mov dx, offset String mov ah, 9 int 21h,2019/7/1,80x86匯編語言程序設計,5.1.2 字符與字符串的輸入/輸出方法,4. 從鍵盤讀入一個字符串 功能號:0AH 入口參數(shù):DS:DX = 輸入緩沖區(qū)首地址 輸入緩沖區(qū)格式:第0字節(jié)事先設置為緩沖區(qū)最多能容納的字符個數(shù)(包括回車);第1字節(jié)將存放實際字符個數(shù)(不包括回車),由系統(tǒng)自動設置;從第2字節(jié)開始存放實際輸入的字符串,最后為回車符。 功能:從鍵盤讀入一個字符串,存入DS:DX所指的緩沖區(qū)。 調(diào)用方法示例: buf db 10, ?, 10 dup (?) ; 定義輸入緩沖區(qū) mov ax, seg buf mov ds, ax lea dx, buf mov ah, 0ah int 21h,2019/7/1,80x86匯編語言程序設計,5.1.2 字符與字符串的輸入/輸出方法,5. 字符與字符串的輸入/輸出舉例 DOS系統(tǒng)調(diào)用只提供了字符與字符串的輸入/輸出方法。如果要輸入/輸出其它類型的數(shù)據(jù),如常用的整數(shù),則必須由應用程序來實現(xiàn)與字符之間的轉(zhuǎn)換。例如,欲輸出整數(shù)126,只能以字符(串)的方式輸出1 、 2 、 6 。 對于程序員來說,在需要用戶輸入時給出輸入提示,對輸入數(shù)據(jù)進行有效性檢查,在輸出結果時說明其表示的含義,是一種好的設計習慣。,2019/7/1,80x86匯編語言程序設計,2019/7/1,80x86匯編語言程序設計,2019/7/1,80x86匯編語言程序設計,2019/7/1,80x86匯編語言程序設計,第一章 基礎知識,第五章 匯編語言程序結構,例:從鍵盤輸入字符并將輸入的字符顯示出來,如果輸入是英文字符小寫字母,將小寫字母轉(zhuǎn)換成為大寫字母。,data segment message db This is a sample program of keyboard and disply db 0dh,0ah,Please strike the key!,0dh,0ah,$ data ends ;定義數(shù)據(jù)段,數(shù)據(jù)段給出提示內(nèi)容。在數(shù)據(jù)段中0dh和0ah分別表示回車和 ;換行字符。字符$表示字符串的結束標志。如果沒有回車和換行會出現(xiàn)什 ;么顯示結果。,2019/7/1,80x86匯編語言程序設計,第一章 基礎知識,第五章 匯編語言程序結構,stack segment stack db 50 dup(?) stack ends ;定義堆棧段。其中 參數(shù)stack表示程序在運行過程中,該段為系統(tǒng)堆棧段中 ;的一部分。如果不加這個,將單獨對本程序建立堆棧。,code segment assume cs:code,ds:data,ss:stack ;明確段寄存器與段定義之間的關系,start: mov ax,data mov ds,ax mov ax,stack;可以省,為什么? mov ss,ax ;可以省,為什么? ;初始化段寄存器,2019/7/1,80x86匯編語言程序設計,第一章 基礎知識,第五章 匯編語言程序結構,mov dx,offset message mov ah,9 int 21h ;顯示字符串。調(diào)用21H中斷(也是DOS功能調(diào)用)的9號功能,該功能是 ;顯示字符串,其中DS:DX為字符串地址,$為字符串結束標志。,again: mov ah,1 int 21h;調(diào)用21H中斷的1號功能,將鍵盤輸入的字符ASC碼存在al寄存器 cmp al,1bh;和ESC鍵輸入字符對比 je exit;如果是按下ESC鍵,就跳轉(zhuǎn)結束 cmp al,61h;和a字符對比 jc nd;產(chǎn)生借位,就是小于a字符,跳轉(zhuǎn)到nd直接輸入結果 cmp al,7ah;和z字符對比 ja nd;沒有借位同時不為零,大于z字符,跳轉(zhuǎn)到nd直接輸入結果,2019/7/1,80x86匯編語言程序設計,第一章 基礎知識,第五章 匯編語言程序結構,and al,11011111b;如果輸入字符在a與z之間,通過與運算,將小寫轉(zhuǎn) ;換為大寫。Sub al,aA也一樣 nd: mov dl,al;將字符傳入到dl寄存器中 mov ah,2 int 21h;調(diào)用21中斷的功能2,將dl寄存器的字符輸出 jmp again;循環(huán)執(zhí)行,直到按下ESC鍵退出 exit: mov ah,4ch int 21h;調(diào)用21中斷的4ch功能,返回dos code ends;代碼段結束 end start;結束匯編,程序結束,如果將主程序建立為過程,由DOS調(diào)用該過程。進入程序后,首先把DS的內(nèi)容和0作為段地址和偏移地址入棧,以便在程序結束時用RET指令返回DOS,這是一種較好的工作方式。如果在主程序開始時沒有用上面三條指令在堆棧中建立返回信息,則在程序結束時效不能直接用RET返回指令,而應該使用編號為4c的功能調(diào)用返回DOD。程序改為如下。,2019/7/1,80x86匯編語言程序設計,5.4 串操作 5.4.1 串操作指令及其用途,1. 串操作指令 (1) MOVS(Move String):串傳送 語法格式: MOVSB MOVSW MOVSD 功能描述: ES:DI = DS:SI; if ( DF = 0 ) then SI = SI + size; DI = DI + size; else SI = SI size; DI = DI size; endif 其中,size = 1(B)、2(W)或4(D)。 也就是說,MOVS(B/W/D)將DS:SI所指源串的1個元素(字節(jié)/字/雙字)復制到ES:DI所指的內(nèi)存單元。然后,SI和DI增加或減少1/2/4。若DF = 0,則增加,否則減少。 對標志位的影響:無。,2019/7/1,80x86匯編語言程序設計,5.4.1 串操作指令及其用途,(2)LODS(Load String):串裝入 語法格式: LODSB LODSW LODSD 功能描述: AL/AX/EAX = DS:SI; if ( DF = 0 )then SI = SI + size; else SI = SI size; endif 其中, size = 1(B)、2(W)或4(D)。 也就是說,LODS(B/W/D)將DS:SI所指源串的1個元素(字節(jié)/字/雙字)復制到AL/AX/EAX。然后,SI增加或減少1/2/4。若DF = 0,則增加,否則減少。 對標志位的影響:無。,2019/7/1,80x86匯編語言程序設計,5.4.1 串操作指令及其用途,(3)STOS(Store String):串存儲 語法格式: STOSB STOSW STOSD 功能描述: ES:DI = AL/AX/EAX; if ( DF = 0 )then DI = DI + size; else DI = DI size; endif 其中,size = 1(B)、2(W)或4(D)。 也就是說,STOS(B/W/D)將AL/AX/EAX的值復制到ES:DI所指的內(nèi)存單元。然后,DI增加或減少1/2/4。若DF = 0,則增加,否則減少。 對標志位的影響:無。,2019/7/1,80x86匯編語言程序設計,5.4.1 串操作指令及其用途,(4)CMPS(Compare Strings):串比較 語法格式: CMPSB CMPSW CMPSD 功能描述: DS:SI ES:DI; if ( DF = 0 )then SI = SI + size; DI = DI + size; else SI = SI size; DI = DI size; endif 其中,size = 1(B)、2(W)或4(D)。 也就是說,CMPS(B/W/D)將DS:SI所指源串的1個元素(字節(jié)/字/雙字)與ES:DI所指目的串的1個元素(字節(jié)/字/雙字)進行比較,根據(jù)比較結果設置標志位。然后,SI和DI增加或減少1/2/4。若DF = 0,則增加,否則減少。 對標志位的影響:同CMP。,2019/7/1,80x86匯編語言程序設計,5.4.1 串操作指令及其用途,(5)SCAS(Scan String):串掃描 語法格式: SCASB SCASW SCASD 功能描述: AL/AX/EAX ES:DI; if ( DF = 0 )then DI = DI + size; else DI = DI size; endif 其中,size = 1(B)、2(W)或4(D)。 也就是說,SCAS(B/W/D)將AL/AX/EAX與ES:DI所指目的串的1個字節(jié)/字/雙字進行比較,根據(jù)比較結果設置標志位。然后,DI增加或減少1/2/4。若DF = 0,則增加,否則減少。,2019/7/1,80x86匯編語言程序設計,5.4.1 串操作指令及其用途,(6)重復前綴 REP ; 當CX 0時,重復執(zhí)行后面的串指令 ; 每執(zhí)行1次,CX = CX 1 ; 只能用在MOVS、LODS或STOS(B/W/D)之前 REPZ/REPE ; 當CX 0且ZF = 1時,重復執(zhí)行后面的串指令 ; 每執(zhí)行1次,CX = CX 1 ; 只能用在CMPS(B/W/D)或SCAS(B/W/D)之前 REPNZ/REPNE ; 當CX 0且ZF = 0時,重復執(zhí)行后面的串指令 ; 每執(zhí)行1次,CX = CX 1 ; 只能用在CMPS(B/W/D)或SCAS(B/W/D)之前 說明: 若CX初值為0,則不執(zhí)行任何操作,而且標志位不變。,2019/7/1,80x86匯編語言程序設計,5.4.1 串操作指令及其用途,2. 串指令的共性 源串:地址由DS:SI表示。 目的串:地址由ES:DI表示。 自動修改地址:每次數(shù)據(jù)操作后,SI和DI自動遞增或遞減,取決于操作的數(shù)據(jù)類型(字節(jié)、字或雙字)以及DF的值。若DF = 0, 則SI和DI自動增加1、2或4。否則,減1、2或4??梢允褂肅LD或STD指令設置DF。 計數(shù)器:使用重復前綴時,由CX表示數(shù)據(jù)個數(shù),每重復1次操作,CX減1。 3. 串指令的用途 串指令主要用于處理連續(xù)的內(nèi)存單元,與重復前綴配合使用更有效。例如: MOVS用于將一個內(nèi)存塊的數(shù)據(jù)復制到另一塊; CMPS用于比較兩個內(nèi)存區(qū)的數(shù)據(jù); SCAS可以在一個內(nèi)存區(qū)中掃描與給定值首次匹配或不匹配的元素; STOS能將一個內(nèi)存區(qū)的所有單元初始化為給定值。 LODS一般不用重復前綴。,2019/7/1,80x86匯編語言程序設計,5.4.2 字符串處理,1. ASCII字符串的表示方法 字符串是一種特殊的數(shù)據(jù)串,比其它類型的串更常使用,因此,有時將字符串簡稱為串。 ASCII字符串的表示方法主要有下列兩種: (1)長度前綴法。 由首字節(jié)指出字符串長度,
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 建房合同安全協(xié)議書
- 室內(nèi)瓷磚購買協(xié)議書
- 清吧轉(zhuǎn)租協(xié)議書
- 市場改造房租協(xié)議書
- 工程材料承包協(xié)議書
- 法國并購協(xié)議書
- 工程相關費用協(xié)議書
- 監(jiān)護幫教協(xié)議書
- 家庭燒烤轉(zhuǎn)讓協(xié)議書
- 工程委托代辦協(xié)議書
- 防汛搶險人員安全培訓
- 《香菱形象分析》課件
- 風電螺栓更換施工方案
- 含兩級混合運算(同步練習) 二年級下冊數(shù)學人教版
- 2024年彩鋼房鋼構出售合同范本
- 聲光電采購合同范例
- 2024年七月醫(yī)療器械質(zhì)量管理制度
- 檁條施工方案
- 2024年廣東省深圳市中考道德與法治試題卷
- 國家職業(yè)技術技能標準 4-10-04-02 保健按摩師 人社廳發(fā)202332號
- 保險三方賠償協(xié)議書范文模板
評論
0/150
提交評論