📄
字号:
CMP AL,20
JZ +5
CMP AL,":"
JZ +3
CMP AL,"'"
JZ +1
CMP AL,'"'
RET
后断符6种
XCHG EAX,EDX
CALL 前断符6种
XCHG EAX,EDX
RET
在这里增加数引连续吧?? 冒号连续呢?
取串
英界符取串 当前行无串为JB,有则:SI为串首,CX为长.AL前符,DL尾符.
本程序设计为16位/32/64位通用.但16位下只处理64K以下数据.
MOV CL,5 如果串前的符号个数太多不取 三种形式的无串?
英界串环 小于不等:文尾. 小于等:`. 大于等于:"'. 大于不等:有串!
PUSH ESI 此处SI即串首或即引号.
CALL 读一字节 大于等于为:引号串!
JB 无英界串 停串文尾
CMP AL,22 "
JZ 引号串
CMP AL,27 '
JZ 引号串
CMP AL,D
JZ 无英界串 借出 JZ 失败
CMP AL,A
JZ 无英界串 借出 JZ 失败
CMP AL,'`'
JZ 无英界串 软失败 废行型
CALL 英界符检查
JAE 普通串 取到了一个普通串首.
DEC CL 串前符个数限定.
JZ 无英界串 软失败 废行型
POP EAX 重新开始记忆串首.
JMP 英界串环
无英界串
POP ESI
STC 其中,JB且不等是文尾. JB且JZ:普通无串.
RET 要注意:AL是无法得串时处的界符了, SI:指正是该符.
普通串
CALL 读一字节 有效的非界符数据不能在文最尾.
JB +2 文尾时,串尾符可能就是串本身最后一个字节.??有效吗?
CALL 英界符检查
JAE -2 注意返回的SI为:串尾+2,即串尾后的第二个可能的界符.
MOV DL,AL 或XCHG AX,DX. 串后符
XCHG ECX,ESI
POP ESI 在我的V1文章中,另一方式也一样.
DEC ECX 使CX=串尾+1,即串尾后的第一个界符.
CALL 测减读1字节 串前符为AL.
MOV DH,AL
SUB ECX,ESI 一定为JA,即NZ且NC.
RET 正好: 大且不等有正常串.
引号串
MOV DL,AL
CALL 读一字节
JB 无英界串 引号串败
CMP AL,DL
JNZ -2
MOV ECX,ESI 些时,SI为另一个引号后的值.
CALL 读一字节 再此时,SI可能更后了,不用了!!
MOV DL,AL 串后符.
POP ESI 最早早就压入的SI是正指向前引号的.
CALL 测减读1字节 取出串前符到AL.
MOV DH,AL
INC ESI 串首址
DEC ECX
SUB ECX,SI 计算串长
JA +2
STC 串长为零非法,错误的串长. 是否可以为合法的其它含义呢?
RET
CMP AL,AL 无借位,且相等为引号串.
RET
英界符检查 它和检查并转换的标志相反
结果 JB 成功,围内; JAE 或JNC 失败
第一个数为首,第二个数为其后加1 3A:-40:@
CMP AL,30 使用了AL,BX,CX!隐含注意ES!!
JB 界符检查回 是界符 有借位
CMP AL,A0 注意,普通汉字是从汉字空格A1A0(或A1A1)开始的
JA 界符检查回 不是界符, 这里,类汉字全部作不是界符.
JB为是, JAE/NB为不是
PUSH EDI 要压栈DI的为好.
MOV EDI,英界符 GBK汉字8140-FEFE/FEFF.注意内存按1,2字节放着!
JMP 判内围
16制界检查
PUSH EDI
MOV EDI,16制界符
判内围
PUSH ECX
MOVZX ECX,BY [DI] 循环次数.
INC EDI
界符继续查
SCASB 可相等,也为围外(目前不用).
JB 界符围外 不是界符 ;改为无借位
SCASB 围内不可相等. +1的!
JB 界符围内 是界符 有借位
LOOP 界符继续查 (一般若为JB 则不可转化)
界符围外
CLC 围外标志. 清借位
界符围内
POP ECX
POP EDI
界符检查回
RET
CLC JNB为失败
RET
判16制偶串
TEST CL,1
JNZ -2
判16制串 检查串中是否全是16制方式的.
PUSHAD
LODSB
CALL 16制界检查 JB为成功,JAE为失败.
JAE +1
LOOP -2
POPAD
RET
判再取16制数
ADD ESI,ECX
CALL 取串
JB -2
判得16制数
CALL 判16制串
JNB +3 不能取得16制 此串失去 不认识,
CALL 倒取16制数 取成后,已是串后.
CLC
RET
ADD ESI,ECX 已是串后
STC 判取16制败
RET
关于16制串处理的大量程序.
倒取16制数 此为一般正式可视数据. 倒取原始数据并且限定8字节.
原数址ESI,原数长ECX,移后,ESI为串后址,ECX为有效新长度.
PUSH EDI EDI不变
PUSH EDX 前面可以有叮的.
MOV EDX,[EBP+标准数值长] 8字节标准数据长度.
ADD ESI,ECX 例串:2-5,长度4,尾指6.
PUSH ESI 此处ESI已为串后址 ? 要注意
STD 倒移,相当于减1了.
LODSB 串后前移至正好最后一个字节. 也即 DEC ESI
PUSH ECX
SHR ECX,1 取偶整.
JZ 倒半16制 只有1位半16制.
标准的倒移换16制程序 {
CMP ECX,EDX
JBE +1
MOV ECX,EDX 超过8字节也只取8字节.
STD 倒移
CALL 倒译16制 先取是低半位,再高半位,合并的.
CLD 正向写入.
STOSB
LOOP -3 }
倒半16制
POP ECX
MOV EDX,[EBP+标准数值长]
PUSH ECX
SHR ECX,1
JNB +5
CMP ECX,EDX
JAE +3
CALL 半16制
CLD 正向写入.
STOSB
POP ECX
INC ECX
SHR ECX,1 换成了新的长度.
CMP ECX,EDX
JBE +1
MOV ECX,EDX
POP ESI
JMP 高处置零 ECX长度比8差的哪一部分清零.
引号取数 前面可以有叮的? 标准长数据是8字节64位的.
移后,ESI为串后址,ECX为有效新长度. EDI不受影响.
PUSH EDI
PUSH EDX 这里也是引号取数
PUSH ESI
PUSH ECX
MOV EDX,[EBP+标准数值长] 为8字节.
CMP ECX,EDX
JB +1
MOV ECX,EDX 只取长度小于等于8的有效字节.
REP
MOVSB
POP ECX
POP ESI
ADD ESI,ECX ESI要放在串尾部.
INC ESI 走过其后的引号.
高处置零 标准的长度未到的检查并清零程序.标志自动CF=0
CMP ECX,EDX 长度未到的清零.
JAE +6 长度已过则不用清零了.
XCHG ECX,EDX 清零需要原小长度后剩下的值.
SUB ECX,EDX EDX成为原小长度.
SUB AL,AL
REP
STOSB
MOV ECX,EDX 保持着数据的有效长度. 8或者比8小.
POP EDX
POP EDI
JMP 缓址数成 已经取到了数据值.并且还有长度标志. 等且无借.
与RM和叮类有关的取串子程序.
缓址数败
MOV AH,0 不等,且没有借进位.
SAHF
RET
RM符串取数 取到直接数据和断句都算取完.即JA回.
CALL RM查符 只有有不认识的串时才为:JNB
JB -1
EDI为写入点且不受影响. BX为返回叮标志情况.
如果成功取到数,则ESI为串后址,ECX为有效新长度.
RM取串
CALL 取串
JB -3
取引数值 将引号数或16制数入缓.失败为JB.带嘱BH.
JZ 引号取数 自动CF=0成功 标准长数据 EDI不变,ESI已串尾.
CALL 判16制串 界检查为相反,JB成功,JNB非16制串.
JNB 缓址数败 未知串, 置不等且无借.
CALL 倒取16制数
CMP DH,'-'
JNZ 缓址数成
求反呢? 大概是这个意思吧.NEG方式不行!它以0的方式影响着CF位.
PUSHAD ESI不受影响,已为串尾
MOV ESI,EDI
MOV ECX,[EBP+标准数值长]
MOV AL,0
SBB AL,[DI]
STOSB
LOOP -2
POPAD EDI不受影响
缓址数成
CALL 长度标志 也叫嘱
OR BL,40 置BL的位6有I标志.
CMP AL,AL 成功的标志:等且无进借位.
RET
AND BH,BE 1字节标导.
RET 如果叮已经存在,将不进行标志.
长度标志 如果有址的话,也不要? 如果叮后紧[符?
TEST BH,80 位8,叮存在的标志.
JNZ -1 已经存在叮.
CMP CL,2
JB -4 出 1字节
CMP CL,3
JB +6 2字节
CMP CL,5
JB +2
OR BH,41
RET
OR BH,40
RET
OR BH,1
RET
注意,DL被作了缓冲用数. 但在写值时,整个EDX都被压栈了.
直译16制 必须是偶数个的,16制文本顺序的数据.合成1字节.无叮!
CALL 半16制
SHL AL,4 第一次取的是一字节中高的4位的.
MOV DL,AL AH不许动???
CALL 半16制
ADD AL,DL 第二次取的是低的4位的.
RET
倒译16制 STD的!!方向减1.1字节,将被用于组装可带叮16制数目的.
CALL 半16制
MOV DL,AL 第一次取的是一字节中低的4位的.
CALL 半16制
SHL AL,4 第二次取得是高4位.
ADD AL,DL
RET
半16制 取得半个16制的值到AL上.
LODSB
SUB AL,30
CMP AL,A
JB +1
SUB AL,7
RET
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -