变态重口极致另类在线-波多久久夜色精品国产-波多野结衣在线观看一区-波多野结衣在线观看一区二区-污污的网站免费阅读-污污视频网址

軟件首頁 |  文章首頁
最新更新 軟件分類 設為首頁 加入收藏 聯系我們
當前位置:首頁文章首頁 IT學院 Delphi

DELPHI7的通配符比較的匯編函數

作者:東坡下載  來源:uzzf  發布時間:2010-10-14 9:42:35  點擊:

      DELPHI7中的POS()函數是不能用通配符的,但是有匯編代碼公開的,于是我想能否把此匯編函數改編成可能用通配符,有此想法已有多年了,最近我重新研究這個問題,發現是可行了,并做了出來,由于時間倉促,錯誤在所難免,希望能發現此匯編函數有BUG者能反饋給我知,我就多謝大家了。下面是我修改DELPHI7中的POS()而成的POSLI()的匯編源碼,我試過可以通配符的,未知有無什么BUG,希望有人通知我BUG在何處。
     此匯編函數支持?號只匹配一個中文。只支持?號和*號,不支持[]號。例如:子串為"Edit*1*2*3?4*5",源串為"Edit111www222123國45qEdit222www333qq"時將返回最后一個*號之后第一個字符的匹配處INDEX。
如果子串沒有*號,返回子串第一個字符的匹配INDEX,如果子串有*號,返回最后一個最接近*號的字符的匹配INDEX值。總之,返回值大于0就表示匹配成功了。
此函數支持中文查找,如子串為"謝",源串為"中華",返回0,雖然中之后半字節和華之前半字節合成謝字,但我這匯編函數已做了處理了。
此匯編函數參數為PCHAR,可以傳多于255個字符的字串作參數也!
function Posli( substr :pchar ; s : pchar ) : Integer;
var
dlen,sublen,esi0,edi0,starnum,starnum2,ifbacknum:integer;
asm
{ ->EAX Pointer to substr }
{ EDX Pointer to string }
{ <-EAX Position of substr in s or 0 }

PUSH EBX
PUSH ESI
PUSH EDI
MOV ESI,EAX { Point ESI to substr }
MOV EDI,EAX
MOV starnum,0
MOV starnum2,0
MOV dlen,0
MOV sublen,0
XOR ECX,ECX
MOV CL,[EDI]
INC EDI
////////////////////////
XOR ECX,ECX
MOV ECX,0FFFFFFFFH
XOR AL,AL
REPNE SCASB
NOT ECX
MOV sublen,ECX
//SUB sublen,2
/////////////////////////
MOV EDI,ESI
MOV AL,'*'
@@start0:
REPNE SCASB
JNE @@start
ADD starnum,1
JMP @@start0
//////////////////////////////

@@start:
///////////////////////////////
MOV EDI,EDX
INC EDI
XOR ECX,ECX
MOV ECX,0FFFFFFFFH
XOR AL,AL
REPNE SCASB
NOT ECX
MOV dlen,ECX
//SUB dlen,1
/////////////////////////////////////////
MOV EDI,EDX { Point EDI to s }
MOV esi0,ESI
MOV edi0,EDI
XOR ECX,ECX { ECX = Length(s) }
MOV CL,[EDI]

MOV ECX, dlen
PUSH EDI { remember s position to calculate index }
//INC EDI { Point EDI to first char of s }
XOR EDX,EDX { EDX = Length(substr) }
MOV DL,[ESI]
//INC ESI { Point ESI to first char of substr }
MOV EDX, sublen
CMP EDX,0 { EDX = Length(substr) - 1 }
JS @@fail { < 0 ? return 0 }
MOV AL,[ESI] { AL = first char of substr }
//INC ESI { Point ESI to 2'nd char of substr }

DEC EDX
SUB ECX,EDX { #positions in s to look at }
{ = Length(s) - Length(substr) + 1 }

ADD ECX,starnum
JLE @@fail
PUSH ESI { save outer loop substr pointer }
PUSH EDI { save outer loop s pointer }
MOV ECX,sublen
ADD EDI,1
JMP @@star

@@loop:
REPNE SCASB
JNE @@fail
MOV EBX,ECX { save outer loop counter }
PUSH ESI { save outer loop substr pointer }
PUSH EDI { save outer loop s pointer }

MOV ECX,EDX
@@loopwww:
// MOV AL,[ESI]
// MOV AL,[ESI-1]
//MOV AL,[ESI-2]
REPE CMPSB
//PUSH ESI

JE @@found
//INC EDI
///////////////
//MOV AL,[ESI]
//MOV AL,[ESI-1]
//MOV AL,[EDI-1]
//CMP AL,[ESI-1]
//JE @@found
CMP ECX,0
JE @@iffound1
{MOV AL,[ESI]
CMP AL,$12
JE @@found
CMP AL,$0
JE @@found
CMP AL,$FF
JE @@found}
/////////////////

@@iffound2:
//PUSH EAX
MOV AL,[ESI]
SUB ESI,1
MOV AL,[ESI]
INC ESI
//INC ESI
CMP AL,'?'

//POP ESI

JE @@what
CMP AL,'*'
JE @@star
//MOV AL,[ESI]
//CMP AL,$12
//JE @@fail2
//CMP AL,$0
//JE @@fail2
//POP EAX
MOV AL,[EDI]
CMP AL,$12
JE @@fail2
CMP AL,$0
JE @@fail2
////////////////有可能源串短于子串也,因?號匹配中文也
POP EDI { restore outer loop s pointer }
POP ESI { restore outer loop substr pointer }
MOV ECX,EBX { restore outer loop counter }
JMP @@loopOK
@@what:
MOV EAX,0
MOV EAX,EDI
SUB EAX,dlen
CMP EAX,edi0
JGE @@fail2
///////如果源串已結束則必NO //BUG
MOV AL,[ESI]
CMP AL,$12 //此當結束
//POP EAX
JE @@found
CMP AL,$0
JE @@found
//push eax
//MOV AL,[ESI]
//CMP AL,$0 //此也當結束,為經驗,不知何解
//POP EAX
CMP ECX,0
JE @@found
/////////////////////
MOV AL,[EDI]
CMP AL,$80
JNB @@chinese
@@whatchinese:
MOV AL,[ESI]
////////////////////////
JMP @@loopwww
@@chinese:
ADD EDI,1
JMP @@whatchinese
@@star:
ADD starnum2,1
SUB EDI,1
MOV AL,[ESI]
CMP AL,$12
//POP EAX
JE @@found
CMP AL,$0
JE @@found
// POP EAX
// POP EAX
/////////
//XOR ECX,ECX
// MOV CL,[EDI]
// INC EDI { Point EDI to first char of s }

// PUSH EDI { remember s position to calculate index }

// XOR EDX,EDX { EDX = Length(substr) }
// MOV DL,[ESI]
// INC ESI { Point ESI to first char of substr }

// DEC EDX { EDX = Length(substr) - 1 }
// JS @@fail { < 0 ? return 0 }
// XOR EAX,EAX
//////////////////////////
////////////////////
//PUSH EAX
@@www:
CMP ECX,0
JE @@found
MOV EAX,0
MOV EAX,EDI
SUB EAX,dlen
CMP EAX,edi0
JG @@fail2
////////////////////
MOV AL,[ESI]
ADD ESI,1

上一篇: 下一篇: Delphi XE 產品技術發布會

文章評論

本類推薦文章

關于本站 | 網站幫助 | 廣告合作 | 下載聲明 | 友情連接 | 網站地圖
Copyright © 20098-2010 uzzf下載站. All Rights Reserved .
主站蜘蛛池模板: 18一20岁一级毛片 | 日本xx13一18处交高清 | 农村寡妇野外情一级毛片 | 草逼视频免费观看 | 毛片免费视频网站 | 91免费精品国偷自产在线在线 | 国产bbwbbwbbwbbw | 国产免费高清在线精品一区 | 丁香六月婷婷综合 | 麻豆69堂免费视频 | 黄色片一级毛片 | 三级不卡 | 91中文字幕网 | 久久国产一级毛片一区二区 | 小黄漫画激情四射在线观看 | 亚洲综合激情另类小说区 | 香港三级日本三级三级人妇 | 香蕉网站99视频丝瓜视频 | 亚洲视频观看 | 国产va精品网站精品网站精品 | 亚洲精品欧美精品日韩精品 | 操操操天天操 | 天天插天天干天天射 | 国产亚洲人成在线影院 | 日韩欧美视频在线 | 欧美中文字幕一区二区三区 | 国内精品免费麻豆网站91麻豆 | 日韩欧美在线视频观看 | 天天综合色天天综合网 | 天天射天天爽 | 性夜黄a爽爽免费视频国产 性夜黄 a 爽免费看 | 亚洲欧洲日韩综合色天使不卡 | 狠狠干.com| 在线国产区 | 欧美一级片免费在线观看 | 欧美成人亚洲综合精品欧美激情 | 精品国产一区二区三区免费 | 午夜怡红院 | 在线观看亚洲成人 | 免费特级毛片 | 日韩天堂在线 |