- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
字串的基本指令
Str_trim 程序 Str_trim程序用於將空字元終止字串中被指定的尾隨字元全部移除掉。 示範: Str_trim PROTO, pString:PTR BYTE, ; points to string char:BYTE ; char to remove .data myString BYTE Hello###,0 .code INVOKE Str_trim, ADDR myString myString = Hello 範例: Str_trim 程序 這個程式的邏輯很有趣,因為讀者必須檢查幾種可能的情況 ( 這裡以 # 代表被指定的尾隨 字元 ): 字串是空的。 字串含有其他字元,而且其後接著一個或多個尾隨字元,例如 “Hello##”。 字串只含有一個字元,而這個字元即為尾隨字元,例如 #。 字串沒有尾隨字元,例如 Hello 或 H。 字串含有一個或多個尾隨字元,而且這些尾隨字元之後還接著一個或多個非尾隨字元, 例如 #H 或 ###Hello。 Str_trim 來源編碼 Str_trim PROC USES eax ecx edi, pString:PTR BYTE, ;指向字串的指標 char:BYTE ;要移除的字元 mov edi,pString INVOKE Str_length,edi ;將字串長度回傳到 EAX cmp eax,0 ;字串長度為零嗎? je L2 ;是: 則離開此程序 mov ecx,eax ;否: 計數器 = 字串長度 dec eax add edi,eax ;使 EDI 指向最後一個字元 mov al,char ;想要移除的字元 std ;方向 = 逆向 repe scasb ;跳過想要移除的字元 jne L1 ;要移除第一個字元嗎? dec edi ;調整 EDI: ZF=1 ECX=0 L1: mov BYTE PTR [edi+2],0 ;插入空位元組 L2: ret Str_trim ENDP Str_ucase 程序 Str_ucase 程序用於將一個字串,全都轉換成大寫的字元。 而且,這個程序不會回傳任何 值。 示範: Str_ucase PROTO, pString:PTR BYTE ; pointer to string .data myString BYTE Hello,0 .code INVOKE Str_ucase, ADDR myString 範例: Str_ucase 來源編碼 Str_ucase PROC USES eax esi, pString:PTR BYTE mov esi,pString L1: mov al,[esi] ;取得字元 cmp al,0 ;字串的尾端? je L3 ;是: 則離開此程序 cmp al,a ;字元的值小於 a 嗎? jb L2 cmp al,z ;字元的值大於 z 嗎? ja L2 and BYTE PTR [esi] ;轉換為大寫字元 L2: inc esi ;指向下一個字元 jmp L1 L3: ret Str_ucase ENDP 二維陣列 基底-索引運算元 基底-索引-移位運算元 基底-索引運算元 基底 - 索引運算元會將兩個暫存器的值相加,並且產生一個位移位址,其中的兩個暫存器稱 為基底 (base) 暫存器和索引 (index) 暫存器。 任何 32 位元通用暫存器 都可以當作基底和索引暫存器。 在 16 位元模式下,基底暫存器必須是 BX 或 BP。 ( 不過,除非是要定址堆疊記憶體,否則應該避免使用 BP 或 EBP。) 應用結構 一個基礎索引的普通申請演說必須做結構 (第 10 章) 的陣列發表演說.下列的 definds 叫做包含 X 和 Y 的 COORD 的結構屏幕坐標 : COORD STRUCT X WORD ? ; offset 00 Y WORD ? ; offset 02 COORD ENDS .data setOfCoordinates COORD 10 DUP() 然後我們能定義 COORD 目標的陣列: 應用結構 下列的編碼使陣列成迴路而且顯示各自Y的座標: mov ebx,OFFSET setOfCoordinates mov esi,2 ; offset of Y value mov eax,0 L1: mov ax,[ebx+esi] call WriteDec add ebx,SIZEOF COORD loop
文档评论(0)