又是寄存器空间的问题,?
//16进制字符串,转换成16进制数值
void charToHexIP(unsigned char *ch,char *sch,int pnum)
{
_asm
{
PUSH EAX
PUSH ESI
PUSH EDI
MOV ESI,sch
MOV EDI,ch
MOV BYTE PTR[EDI],0
MOV BYTE PTR[EDI+1],0
MOV EAX,pnum
TEST EAX,1
JZ lop1
TEST EAX,2
JZ lop2
TEST EAX,3
JZ lop3
TEST EAX,4
JZ lop4
JMP lope
lop1:
MOV AL,BYTE PTR[ESI]
TEST AL,57
JB lop12
SUB AL,55
MOV BYTE PTR[EDI+1],AL
JMP lope
lop12:
SUB AL,48
MOV BYTE PTR[EDI+1],AL
JMP lope
lop2:
MOV AL,BYTE PTR[ESI]
TEST AL,57
JB lop22
SUB AL,55
SHL AL,4
MOV BYTE PTR[EDI+1],AL
JMP lop23
lop22:
SUB AL,48
SHL AL,4
MOV BYTE PTR[EDI+1],AL
lop23:
MOV AL,BYTE PTR[ESI+1]
TEST AL,57
JB lop24
SUB AL,55
OR BYTE PTR[EDI+1],AL
JMP lope
lop24:
SUB AL,48
OR BYTE PTR[EDI+1],AL
JMP lope
lop3:
MOV AL,BYTE PTR[ESI]
TEST AL,57
JB lop31
SUB AL,55
MOV BYTE PTR[EDI],AL
JMP lop32
lop31:
SUB AL,48
MOV BYTE PTR [EDI],AL
lop32:
MOV AL,BYTE PTR [ESI+1]
TEST AL,57
JB lop321
SUB AL,55
SHL AL,4
MOV BYTE PTR[EDI+1],AL
JMP lop322
lop321:
SUB AL,48
SHL AL,4
MOV BYTE PTR[EDI+1],AL
lop322:
MOV AL,BYTE PTR[ESI+2]
TEST AL,57
JB lop323
SUB AL,55
OR BYTE PTR[EDI+1],AL
JMP lope
lop323:
SUB AL,48
OR BYTE PTR[EDI+1],AL
JMP lope
lop4:
MOV AL,BYTE PTR[ESI]
TEST AL,57
JB lop41
SUB AL,55
SHL AL,4
MOV BYTE PTR[EDI],AL
JMP lop42
lop41:
SUB AL,48
SHL AL,4
MOV BYTE PTR[EDI],AL
lop42:
MOV AL,BYTE PTR[ESI+1]
TEST AL,57
JB lop43
SUB AL,55
OR BYTE PTR[EDI],AL
JMP lop44
lop43:
SUB AL,48
OR BYTE PTR[EDI],AL
lop44:
MOV AL,BYTE PTR[ESI+2]
TEST AL,57
JB lop45
SUB AL,55
SHL AL,4
MOV BYTE PTR[EDI+1],AL
JMP lop46
lop45:
SUB AL,48
SHL AL,4
MOV BYTE PTR[EDI+1],AL
lop46:
MOV AL,BYTE PTR[ESI+3]
TEST AL,57
JB lop47
SUB AL,55
OR BYTE PTR[EDI+1],AL
JMP lope
lop47:
SUB AL,48
OR BYTE PTR[EDI+1],AL
lope:
POP EDI
POP ESI
POP EAX
}
}
错误提示:error C2443: operand size conflict