亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? 匯010.txt

?? 會(huì)變語言實(shí)現(xiàn)的一些程序
?? TXT
?? 第 1 頁 / 共 3 頁
字號(hào):
了解的內(nèi)容:打印機(jī)輸出、磁盤輸入輸出、通信口輸入輸出和異常情況處理等程序的編程方法,程序段前綴PSP的含義及其應(yīng)用。

掌握的內(nèi)容:駐留程序的設(shè)計(jì)方法,結(jié)構(gòu)和記錄在匯編語言中的應(yīng)用方法,文件操作的編程,鼠標(biāo)(Mouse)應(yīng)用程序的編程。

熟練掌握的內(nèi)容:處理鍵盤輸入的各種方法,屏幕的定位和顯示方法,字符串的處理方法,二進(jìn)制數(shù)據(jù)和字符串之間的轉(zhuǎn)換方法。

建議學(xué)習(xí)時(shí)間:12小時(shí)。
第10章 應(yīng)用程序的設(shè)計(jì)
在前面各章節(jié)中,我們側(cè)重介紹了匯編語言程序設(shè)計(jì)中各組成部分的作用,本章的重點(diǎn)是對(duì)前面所學(xué)知識(shí)的綜合運(yùn)用。希望通過各種不同類型的例子,使讀者能夠掌握用匯編語言編程的基本技巧。

10.1 字符串的處理程序
字符或字符串是一類重要的非數(shù)值計(jì)算的處理對(duì)象。許多編輯軟件都具有字符串查找、替換、大小寫的轉(zhuǎn)換、單詞的自動(dòng)識(shí)別等功能,網(wǎng)絡(luò)上的信息搜索也是現(xiàn)在一種常用的功能等,這些功能的實(shí)現(xiàn)無疑都要涉及到字符串的處理功能。

為了方便對(duì)字符串的處理,各種常用的編程環(huán)境也都給予了足夠的支持。如:C語言編程環(huán)境提供了大量處理字符串的標(biāo)準(zhǔn)函數(shù),象strlen、strcmp和strcpy等函數(shù);C++、VC或VB等編程環(huán)境提供了字符串類String等。這些函數(shù)或類大大方便了程序員的編程。

在計(jì)算機(jī)系統(tǒng)內(nèi),為了加快字符串的處理,在其指令系統(tǒng)中設(shè)置了多條處理字符串的指令,其詳細(xì)內(nèi)容請(qǐng)參閱第5.2.11節(jié)中的介紹。

下面我們將通過幾個(gè)例子來學(xué)習(xí)匯編語言處理字符串的方法。

例10.1 編寫一個(gè)求字符串長(zhǎng)度的子程序Strlen,要求字符串的首地址為入口參數(shù),且以ASCII碼0為結(jié)束符,CX為出口參數(shù),其存放該字符串的長(zhǎng)度。 

解: 
 .MODEL SMALL, C 
.DATA 
 buff DB "This is a example.", 0 
.CODE 
Strlen PROC USES AX BX, String:PTR BYTE 
MOV BX, String 
XOR CX, CX 
MOV AL, [BX] 
.WHILE AL!=0 
INC
 CX 
INC
 BX 
MOV
 AL, [BX] 
.ENDW 
RET 
Strlen ENDP 
.STARTUP 
INVOKE Strlen, ADDR buff 
.EXIT 0 
END 
例10.2 編寫一個(gè)把字符串中的所有小寫字符轉(zhuǎn)換成大寫字符的子程序Strupr,要求字符串的首地址和結(jié)束符為其入口參數(shù)。 

解: 
 .MODEL SMALL, C 
.DATA 
buff
 DB   "This is a example.", 0 
.CODE 
Strupr PROC   USES AX BX, String:PTR BYTE, Tail:BYTE 
MOV BX, String 
.REPEAT 
MOV
 AL, [BX] 
.IF AL>='a' && AL<='z'
 
SUB
 AL, 20H 
MOV
 [BX], AL 
.ENDIF
 
INC
 BX 
.UNTIL  AL==Tail 
RET 
Strupr ENDP 
.STARTUP 
INVOKE Strupr, ADDR buff, 0 
.EXIT 0 
END 

例10.3 編寫一個(gè)從字符串中拷貝子串的子程序Strncpy,它有四個(gè)參數(shù)str1、str2、idx和num,其具體功能為把字符串str2中從第idx個(gè)(從0開始記數(shù))字符開始、num個(gè)字符傳送給str1,字符串str1和str2都是以ASCII碼0為結(jié)束符。 

解: 
 .MODEL SMALL, C 
.DATA 
str1
 DB "12345ABCDEF", 0 
str2
 DB 20 DUP('A') 
.CODE 
Strlen PROC  USES AX BX, String:PTR BYTE 
…… ;參見例10.1 
Strlen ENDP 
Strncpy PROC  USES AX CX DI SI DS ES, str1:FAR PTR BYTE, str2:FAR PTR BYTE, idx:WORD, num:WORD 
LES DI, str1 
LDS SI, str2 ;取兩個(gè)字符串的首地址 
INVOKE Strlen, SI ;計(jì)算源字符串的長(zhǎng)度,在CX中 
MOV AX, idx 
.IF AX >= CX ;若字符起點(diǎn)就超過源串的長(zhǎng)度 
MOV
 BYTE PTR ES:[DI], 0 ;拷貝的字符串為“空” 
JMP
 over 
.ENDIF 
ADD SI, AX ;定源串中字符的起點(diǎn)SI 
MOV CX, num 
CLD 
.REPEAT 
LODSB
 
STOSB
 
.UNTILCXZ AL==0 
.IF AL!=0 ;設(shè)置目標(biāo)串的結(jié)束符 
MOV
 BYTE PTR[DI], 0 
.ENDIF 
over: RET 
Strncpy ENDP 
.STARTUP 
INVOKE Strncpy, ADDR str2, ADDR str1, 3, 5 
.EXIT 0 
END 
例10.4 編寫一個(gè)把字符串中空格和TAB壓縮掉的子程序Compress,字符串String是以ASCII碼0為結(jié)束符。 

解: 
 .MODEL SMALL, C 
.DATA 
SPACE
 EQU 20H 
TAB
 EQU 9H 
Buff
 DB "12 3 4   Ab  cdef", 0 
.CODE 
Compress PROC USES AX BX SI DS, String:FAR PTR BYTE 
LDS SI, String ;SI用于掃描字符串的指針 
MOV BX, SI ;BX用于存放結(jié)果的指針 
.REPEAT 
MOV
 AL, [SI] 
INC
 SI 
.IF AL!=SPACE && AL!=TAB
 
 MOV [BX], AL 
INC BX  
.ENDIF
 
.UNTIL AL==0 
RET 
Compress ENDP 
.STARTUP 
INVOKE Compress, ADDR Buff 
.EXIT 0 
END 

從上面四個(gè)例子,我們不難看出處理字符串的一般方法,感興趣的讀者可自行編寫實(shí)現(xiàn)字符串變小寫、整體拷貝、逆轉(zhuǎn)和查找等功能的子程序,甚至還可以建立起自己的字符串處理庫文件。

10.2 數(shù)據(jù)的分類統(tǒng)計(jì)程序
數(shù)據(jù)的分類和統(tǒng)計(jì)也是一類非數(shù)值計(jì)算,數(shù)據(jù)的分類統(tǒng)計(jì)方法在例6.10中已介紹,下面通過一個(gè)例子介紹數(shù)據(jù)的分類存儲(chǔ)問題。 

例10.5 統(tǒng)計(jì)從地址0040H:0000H開始的100個(gè)字中,把正數(shù)和負(fù)數(shù)按照它們先后出現(xiàn)的次序分別存儲(chǔ)在緩沖區(qū)Data1和Data2,并把每類的個(gè)數(shù)存入相應(yīng)緩沖區(qū)的第一個(gè)字單元中。 

解:由于在指定地址之后的100個(gè)字中,可能存在全是正數(shù)或負(fù)數(shù)的情況,所以,緩沖區(qū)Data1和Data2的容量都應(yīng)是100個(gè)字。 
 .MODEL SMALL 
.DATA 
Num = 100
 
Data1
 DW ?, Num dup(?) 
Data2
 DW ?, Num dup(?) 
.CODE 
.STARTUP
 
MOV
 AX, 40H 
MOV
 ES, AX 
LEA
 SI, Data1+2 ;指向存儲(chǔ)正數(shù)的緩沖區(qū) 
LEA
 DI, Data2+2 ;指向存儲(chǔ)負(fù)數(shù)的緩沖區(qū) 
XOR
 BX, BX ;BX用于掃描存儲(chǔ)單元 
MOV
 CX, 100 ;字符個(gè)數(shù) 
.REPEAT
 
MOV
 AX, ES:[BX] 
ADD
 BX, 2 
CMP
 AX, 0 
.CONTINUE .IF ZERO?
 
JL
 next1 
MOV 
 [SI], AX  ;向正數(shù)緩沖區(qū)內(nèi)存儲(chǔ)數(shù)據(jù) 
ADD
 SI, 2 
.CONTINUE
 
next1:
 
 MOV
 [DI], AX ;向負(fù)數(shù)緩沖區(qū)內(nèi)存儲(chǔ)數(shù)據(jù) 
ADD
 DI, 2 
.UNTILCXZ
 
SUB
 SI, OFFSET Data1+2 
SUB
 DI, OFFSET Data2+2 
SHR
 SI, 1 
SHR
 DI, 1 
MOV
 Data1, SI 
MOV 
 Data2, DI  ;把每類的統(tǒng)計(jì)個(gè)數(shù)存入緩沖區(qū)的第一個(gè)字單元 
.EXIT
 0 
END 
 例10.6 用鍵盤輸入任意一字符串,分類統(tǒng)計(jì)該字符串中每個(gè)數(shù)字和字母的出現(xiàn)次數(shù)。 

解: 
 .MODEL SMALL 
.DATA 
N = 80
 
Buff
 DB N, ?, N DUP(?) 
Num
 DW 36 DUP(0) ;每個(gè)字用于存放'0'~'9','A'~'Z'出現(xiàn)的個(gè)數(shù) 
.CODE 
.STARTUP
 
LEA
 DX, Buff 
MOV
 AH, 0AH 
INT
 21H ;輸入一個(gè)字符串 
XOR
 CH, CH 
MOV
 CL, Buff+1 ;CX=輸入字符串的個(gè)數(shù) 
LEA
 SI, Buff+2 
XOR
 BX, BX 
.REPEAT
 
MOV
 BL, [SI] ;考慮下面的思考題 
INC
 SI 
.IF BL>='0' && BL<='9'
 ;分類統(tǒng)計(jì)'0'~'9'中的每個(gè)數(shù)字的個(gè)數(shù) 
SUB
 BL, '0' 
ADD
 BX, BX 
INC
 Num[BX] 
.CONTINUE
 
.ENDIF
 
.IF BL>='a' && BL<='z'
 
SUB
 BL, 20H ;小寫變大寫 
.ENDIF
 
.IF BL>='A' && BL<='Z'
 ;分類統(tǒng)計(jì)'A'~'Z'中的每個(gè)字母的個(gè)數(shù) 
SUB
 BL, 'A'-10 
ADD
 BX, BX 
INC
 Num[BX] 
.ENDIF
 
.UNTILCXZ
 
.EXIT   0
 
END
 

思考題:在本例中,用指令“MOV  BL, [SI]”來把當(dāng)前檢測(cè)的字符存入BL,當(dāng)然,我們也可以用AL來代替BL,有關(guān)指令要作相應(yīng)的改動(dòng),但這樣做,會(huì)更方便嗎?希望讀者能知道:為什么要用BL,而不用AL?
10.3 數(shù)據(jù)轉(zhuǎn)換程序
數(shù)據(jù)類型轉(zhuǎn)換是輸入輸出過程中經(jīng)常遇到的問題。輸入時(shí),計(jì)算機(jī)系統(tǒng)要把用戶從鍵盤上輸入的字符串轉(zhuǎn)變成相應(yīng)的數(shù)值,并存儲(chǔ)在內(nèi)存中;輸出時(shí),要把計(jì)算機(jī)內(nèi)部的二進(jìn)制數(shù)據(jù)形式轉(zhuǎn)換成相應(yīng)的十進(jìn)制字符串,然后再輸出。 

在高級(jí)語言編程環(huán)境中,程序員能用各種輸入輸出語句,按一定的格式進(jìn)行交互式操作,很少或根本不關(guān)心輸入輸出是如何實(shí)現(xiàn)的。有的程序員甚至認(rèn)為其輸入的就是十進(jìn)制數(shù)值,輸出數(shù)據(jù)也就是把內(nèi)存中存儲(chǔ)的數(shù)據(jù)直接輸出出來。其實(shí),輸入輸出過程并不是如此簡(jiǎn)單,計(jì)算機(jī)系統(tǒng)要進(jìn)行復(fù)雜而又細(xì)致的數(shù)據(jù)類型轉(zhuǎn)換和格式化等工作。 

本節(jié)試圖通過用匯編語言實(shí)現(xiàn)數(shù)據(jù)類型的轉(zhuǎn)換來反映輸入輸出的本來面目,使程序員在用高級(jí)語言編程時(shí),對(duì)其輸入輸出語句的實(shí)現(xiàn)過程有所了解,也知道有別人(或編譯程序)幫他完成了輸入輸出的準(zhǔn)備工作。 

例10.7 編寫一個(gè)程序,它能把字類型變量的數(shù)值以十進(jìn)制形式輸出出來。若該數(shù)值為負(fù)數(shù),則需要輸出負(fù)號(hào)"-",否則,不輸出符號(hào)。

解:



鑒于按二進(jìn)制輸出的特殊性,我們可以把它優(yōu)化成例10.8的形式,按十六進(jìn)制輸出也可以按“四位二進(jìn)制對(duì)應(yīng)一位十六進(jìn)制”的規(guī)則進(jìn)行優(yōu)化的。 
例10.7是用“用16位除10”的方法從低向高依次得到每位的數(shù)值,但若待輸出的數(shù)據(jù)是32位,用10除之后,其商很可能會(huì)超過16位,所以,不能簡(jiǎn)單地引用例10.7的方法來輸出32位二進(jìn)制。 

假設(shè):32位二進(jìn)制數(shù)Z為A×216+B,其中:A和B都是16位二進(jìn)制數(shù)。 用10去除A,得:A=A1×10+A2,于是,  

         (1)  

假設(shè)A2×216+B被10除后所得的商和余數(shù)分別為B1和C1(B1≥0,C1≥0)。  

利用式(1)和“A2<10”,我們不難看出:Z的個(gè)位就是C1和B1<216。  

令Z1=A1×216+B1,顯然,Z1就是Z/10所得到的商。  

對(duì)于Z1,再利用式(1)得到商Z2和C2。……,重復(fù)上面的步驟,直到所得商為0為止。 

下面的例10.9就是利用上面方法來輸出32位二進(jìn)制數(shù)值。

例10.9 編寫一個(gè)子程序,該子程序能把32位二進(jìn)制變量的數(shù)值以十進(jìn)制形式輸出出來。若該數(shù)值為負(fù)數(shù),則需要輸出負(fù)號(hào)"-",否則,不輸出符號(hào)。 

解: 
 .MODEL SMALL, C 
.DATA 
CR = 13
 
LF = 10
 
Data1
 DD    908976789 
.CODE 
;子程序Display是按十進(jìn)制輸出32位二進(jìn)制數(shù)值SOURCE 
Display PROC USES AX BX CX DX SI DI SOURCE:DWORD 
LOCAL FLAG:BYTE ;定義一個(gè)字節(jié)類型的局部變量FLAG 
MOV BX, WORD PTR [SOURCE] 
MOV CX, WORD PTR [SOURCE+2] 
MOV FLAG, 0 ;FLAG=0——正數(shù) 
CMP CX, 0 
JGE next 
INC FLAG ;FLAG=1——負(fù)數(shù) 
NOT BX 
NOT CX 
ADD BX, 1 ;能否用指令I(lǐng)NC BX? 
ADC CX, 0 ;上四條指令把32位數(shù)CX-BX變?yōu)檎龜?shù) 
next: 
 XOR DI, DI ;壓入堆棧字符的個(gè)數(shù) 
MOV SI,10 ;用10來除 
.REPEAT ;本循環(huán)把32位二進(jìn)制數(shù)轉(zhuǎn)換成十進(jìn)制 
XOR
 DX, DX ;數(shù)的字符串存入堆棧之中 
MOV
 AX, CX 
DIV
 SI 
MOV
 CX, AX 
MOV
 AX, BX 
DIV
 SI 
ADD
 DL, '0' 
PUSH
 DX 
INC
 DI 
MOV
 BX, AX 
.UNTIL BX==0 && CX==0 
.IF FLAG==1 ;判斷前面轉(zhuǎn)換的數(shù)是否為負(fù)數(shù) 
MOV
 AL, '-' ;若是,把符號(hào)'-'壓入堆棧 
PUSH
 AX 
INC
 DI 
.ENDIF  
MOV CX, DI 
.REPEAT ;本循環(huán)把堆棧中的字符串顯示出來 
POP
 DX 
MOV
 AH, 2 
INT

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號(hào) Ctrl + =
減小字號(hào) Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
丝袜亚洲另类欧美| 亚洲国产成人午夜在线一区| 亚洲一区二区三区中文字幕在线| 一本久久精品一区二区| 国产精品久久久久一区二区三区共| 国产成人在线视频网站| 国产女人18水真多18精品一级做| 成人午夜av电影| 亚洲男人电影天堂| 欧美亚洲另类激情小说| 亚洲综合久久av| 欧美嫩在线观看| 精品一区二区久久久| 久久精品欧美一区二区三区麻豆| 春色校园综合激情亚洲| 日韩毛片一二三区| 欧美精品久久99| 国产成人午夜片在线观看高清观看| 国产欧美一区二区精品性色| 成人晚上爱看视频| 亚洲国产精品一区二区尤物区| 欧美一区二区三区影视| 国模无码大尺度一区二区三区| 国产婷婷色一区二区三区四区 | 国产精品国产馆在线真实露脸| 97国产精品videossex| 亚洲成人一区在线| 久久久噜噜噜久噜久久综合| 91蜜桃网址入口| 蜜臀av性久久久久蜜臀aⅴ流畅| 欧美高清在线一区二区| 精品视频免费在线| 粉嫩高潮美女一区二区三区| 亚洲第一二三四区| 久久久久久久综合日本| 欧美日韩另类国产亚洲欧美一级| 国产一区二区三区免费在线观看| 亚洲综合色噜噜狠狠| 国产三级精品视频| 欧美日本在线观看| 成人在线视频一区| 婷婷综合久久一区二区三区| 国产精品欧美精品| 精品久久五月天| 欧洲另类一二三四区| 国产成人精品www牛牛影视| 亚洲成人精品一区二区| 亚洲国产精品成人综合色在线婷婷| 91精品国产综合久久久久久久久久| 国产精品99久久久久久久女警| 亚洲v中文字幕| 自拍偷拍亚洲激情| 久久新电视剧免费观看| 91精品国产免费| 欧美综合亚洲图片综合区| 国v精品久久久网| 老色鬼精品视频在线观看播放| 亚洲裸体在线观看| 国产精品久久影院| 欧美激情在线看| 欧美电影免费观看高清完整版| 欧美做爰猛烈大尺度电影无法无天| 国产成人小视频| 国产美女主播视频一区| 美女诱惑一区二区| 水野朝阳av一区二区三区| 一区二区三区高清不卡| 日韩毛片精品高清免费| 国产精品女主播在线观看| 26uuu国产在线精品一区二区| 欧美日韩国产三级| 欧美三级午夜理伦三级中视频| www.亚洲在线| 成人一区二区三区视频在线观看 | 国产视频一区二区在线观看| 日韩欧美黄色影院| 欧美一区二区啪啪| 日韩午夜激情av| 精品少妇一区二区三区在线播放 | 国产原创一区二区三区| 日本成人在线网站| 日本欧美大码aⅴ在线播放| 亚洲福利一区二区| 日韩主播视频在线| 青青草国产精品97视觉盛宴 | 亚洲国产成人av网| 亚洲国产精品视频| 日本视频免费一区| 久久精品国产在热久久| 狠狠色丁香婷婷综合久久片| 狠狠色狠狠色综合日日91app| 狠狠色狠狠色综合| 国产成人精品一区二| 成人免费毛片app| 欧美中文字幕一区二区三区| 日本韩国一区二区| 欧美色视频在线| 日韩午夜精品视频| 国产视频视频一区| 亚洲视频你懂的| 亚洲chinese男男1069| 毛片av中文字幕一区二区| 激情文学综合插| av影院午夜一区| 欧美日韩一区久久| 日韩视频免费观看高清完整版| 久久女同互慰一区二区三区| 国产调教视频一区| 中文幕一区二区三区久久蜜桃| 亚洲欧洲日本在线| 亚洲.国产.中文慕字在线| 天天影视色香欲综合网老头| 激情文学综合网| 一本色道久久综合亚洲精品按摩| 欧美精品 国产精品| 日韩精品一区二区三区在线观看| 国产日本欧美一区二区| 亚洲成人午夜影院| 国产在线乱码一区二区三区| 色先锋久久av资源部| 欧美成人精精品一区二区频| 中文字幕在线一区| 午夜激情久久久| 亚洲一区免费视频| 成人免费在线观看入口| 亚洲风情在线资源站| 粉嫩在线一区二区三区视频| 欧美日韩一区二区电影| 久久精品一区二区三区不卡 | 日韩免费视频一区| 亚洲日本在线a| 国产精品一区一区| 欧美另类videos死尸| 国产亚洲成aⅴ人片在线观看| 亚洲精品成a人| 国产成人午夜视频| 91精品国产91久久久久久最新毛片 | 欧美一区二区三区不卡| 中文字幕国产一区二区| 精品一区二区在线观看| 色国产综合视频| 国产精品视频第一区| 秋霞午夜鲁丝一区二区老狼| 97se亚洲国产综合自在线观| 久久精品男人的天堂| 蜜乳av一区二区| 欧美日韩不卡一区二区| 中文字幕综合网| 成人福利视频网站| 日韩一区在线免费观看| 久久成人免费网| 91麻豆精品国产91久久久| 亚洲综合在线观看视频| 国产凹凸在线观看一区二区| 日韩午夜精品视频| 午夜伦理一区二区| 91首页免费视频| 国产精品久久久一区麻豆最新章节| 韩国精品一区二区| 日韩免费高清av| 麻豆精品久久精品色综合| 欧美日韩一区二区电影| 亚洲一区电影777| 欧美在线三级电影| 亚洲精品视频免费观看| 91在线视频观看| 日韩美女视频19| 色狠狠av一区二区三区| 亚洲精品国产一区二区精华液| 大胆欧美人体老妇| 国产精品视频yy9299一区| 白白色 亚洲乱淫| 亚洲特黄一级片| 色激情天天射综合网| 亚洲精品国产一区二区三区四区在线 | 亚洲欧洲精品天堂一级| 不卡视频免费播放| 亚洲欧美色一区| 在线视频国内自拍亚洲视频| 亚洲成人高清在线| 91精品黄色片免费大全| 另类综合日韩欧美亚洲| 日韩欧美成人一区| 国产精品99久久久久久宅男| 1024国产精品| 在线免费观看日本一区| 午夜精品免费在线观看| 91麻豆精品国产91久久久更新时间| 蜜桃久久久久久| 久久久三级国产网站| 99精品视频在线播放观看| 亚洲精品第1页| 欧美一区二区三区四区视频| 久久 天天综合| 欧美国产精品久久| 色婷婷国产精品| 日本色综合中文字幕| 国产肉丝袜一区二区| 91黄视频在线| 麻豆国产欧美日韩综合精品二区 |