原程序如下:
procedure tform1.pcrc(pcrcstr:string);
const
testtab:array[0..255] of word =(
$0000,$1021,$2042,$3063,$4084,$50a5,$60c6,$70e7,$8108,$9129,
$0a14a,$0b16b,$0c18c,$0d1ad,$0e1ce,$0f1ef,$1231,$0210,$3273,$2252,
$52b5, $4294,$72f7, $62d6, $9339,$8318,$0b37b,$0a35a,$0d3bd,$0c39c,
$0f3ff,$0e3de,$2462,$3443,$0420,$1401,$64e6,$74c7,$44a4,$5485,
$0a56a,$0b54b,$8528,$9509,$0e5ee,$0f5cf,$0c5ac,$0d58d,$3653,$2672,
$1611,$0630,$76d7,$66f6,$5695,$46b4,$0b75b,$0a77a,$9719,$8738,
$0f7df,$0e7fe,$0d79d,$0c7bc,$48c4,$58e5,$6886,$78a7,$0840,$1861,
$2802,$3823,$0c9cc,$0d9ed,$0e98e,$0f9af,$8948,$9969,$0a90a,$0b92b,
$5af5,$4ad4,$7ab7,$6a96,$1a71,$0a50,$3a33,$2a12,$0dbfd,$0cbdc,
$0fbbf,$0eb9e,$9b79,$8b58,$0bb3b,$0ab1a,$6ca6,$7c87,$4ce4,$5cc5,
$2c22,$3c03,$0c60,$1c41,$0edae,$0fd8f,$0cdec,$0ddcd,$0ad2a,$0bd0b,
$8d68,$9d49,$7e97,$6eb6,$5ed5,$4ef4,$3e13,$2e32,$1e51,$0e70,
$0ff9f,$0efbe,$0dfdd,$0cffc,$0bf1b,$0af3a,$9f59,$8f78,$9188,$81a9,
$0b1ca,$0a1eb,$0d10c,$0c12d,$0f14e,$0e16f,$1080,$00a1,$30c2,$20e3,
$5004,$4025,$7046,$6067,$83b9,$9398,$0a3fb,$0b3da,$0c33d,$0d31c,
$0e37f,$0f35e,$02b1,$1290,$22f3,$32d2,$4235,$5214,$6277,$7256,
$0b5ea,$0a5cb,$95a8,$8589,$0f56e,$0e54f,$0d52c,$0c50d,$34e2,$24c3,
$14a0,$0481,$7466,$6447,$5424,$4405,$0a7db,$0b7fa,$8799,$97b8,
$0e75f,$0f77e,$0c71d,$0d73c,$26d3,$36f2,$0691,$16b0,$6657,$7676,
$4615,$5634,$0d94c,$0c96d,$0f90e,$0e92f,$99c8,$89e9,$0b98a,$0a9ab,
$5844,$4865,$7806,$6827,$18c0,$08E1,$3882,$28a3,$0cb7d,$0db5c,
$0eb3f,$0fb1e,$8bf9,$9bd8,$0abbb,$0bb9a,$4a75,$5a54,$6a37,$7a16,
$0af1,$1ad0,$2ab3,$3a92,$0fd2e,$0ed0f,$0dd6c,$0cd4d,$0bdaa,$0ad8b,
$9dE8,$8dc9,$7c26,$6c07,$5c64,$4c45,$3ca2,$2c83,$1ce0,$0cc1,
$0ef1f,$0ff3e,$0cf5d,$0df7c,$0af9b,$0bfba,$8fd9,$9ff8,$6e17,$7e36,
$4e55,$5e74,$2e93,$3eb2,$0ed1,$1ef0 );var
bbhh,bbll,aall,ddhh,ddll:byte;
aaa:word;
llen,kk:integer;
begin
bbhh:=$ff;
bbll:=$ff;
llen:=length(pcrcstr);
for kk:=1 to llen do
begin
aall:=ord(pcrcstr[kk]);
aall:=aall xor bbhh;
aall:=aall;
aaa:=testtab[aall];
asm
push ax
mov ax,aaa
mov ddhh,ah
mov ddll,al
mov aaa,ax
pop ax
end;
ddhh:=ddhh xor bbll;
bbhh:=ddhh;
bbll:=ddll;
end; highcrc:=not bbhh;
lowcrc:=not bbll;
end;该程序在WIN98及WINME下运行正常,但怀疑在WIN2000及XP下运行不正常。
所以还请各位帮忙把程序转成PASCAL的。
procedure tform1.pcrc(pcrcstr:string);
const
testtab:array[0..255] of word =(
$0000,$1021,$2042,$3063,$4084,$50a5,$60c6,$70e7,$8108,$9129,
$0a14a,$0b16b,$0c18c,$0d1ad,$0e1ce,$0f1ef,$1231,$0210,$3273,$2252,
$52b5, $4294,$72f7, $62d6, $9339,$8318,$0b37b,$0a35a,$0d3bd,$0c39c,
$0f3ff,$0e3de,$2462,$3443,$0420,$1401,$64e6,$74c7,$44a4,$5485,
$0a56a,$0b54b,$8528,$9509,$0e5ee,$0f5cf,$0c5ac,$0d58d,$3653,$2672,
$1611,$0630,$76d7,$66f6,$5695,$46b4,$0b75b,$0a77a,$9719,$8738,
$0f7df,$0e7fe,$0d79d,$0c7bc,$48c4,$58e5,$6886,$78a7,$0840,$1861,
$2802,$3823,$0c9cc,$0d9ed,$0e98e,$0f9af,$8948,$9969,$0a90a,$0b92b,
$5af5,$4ad4,$7ab7,$6a96,$1a71,$0a50,$3a33,$2a12,$0dbfd,$0cbdc,
$0fbbf,$0eb9e,$9b79,$8b58,$0bb3b,$0ab1a,$6ca6,$7c87,$4ce4,$5cc5,
$2c22,$3c03,$0c60,$1c41,$0edae,$0fd8f,$0cdec,$0ddcd,$0ad2a,$0bd0b,
$8d68,$9d49,$7e97,$6eb6,$5ed5,$4ef4,$3e13,$2e32,$1e51,$0e70,
$0ff9f,$0efbe,$0dfdd,$0cffc,$0bf1b,$0af3a,$9f59,$8f78,$9188,$81a9,
$0b1ca,$0a1eb,$0d10c,$0c12d,$0f14e,$0e16f,$1080,$00a1,$30c2,$20e3,
$5004,$4025,$7046,$6067,$83b9,$9398,$0a3fb,$0b3da,$0c33d,$0d31c,
$0e37f,$0f35e,$02b1,$1290,$22f3,$32d2,$4235,$5214,$6277,$7256,
$0b5ea,$0a5cb,$95a8,$8589,$0f56e,$0e54f,$0d52c,$0c50d,$34e2,$24c3,
$14a0,$0481,$7466,$6447,$5424,$4405,$0a7db,$0b7fa,$8799,$97b8,
$0e75f,$0f77e,$0c71d,$0d73c,$26d3,$36f2,$0691,$16b0,$6657,$7676,
$4615,$5634,$0d94c,$0c96d,$0f90e,$0e92f,$99c8,$89e9,$0b98a,$0a9ab,
$5844,$4865,$7806,$6827,$18c0,$08E1,$3882,$28a3,$0cb7d,$0db5c,
$0eb3f,$0fb1e,$8bf9,$9bd8,$0abbb,$0bb9a,$4a75,$5a54,$6a37,$7a16,
$0af1,$1ad0,$2ab3,$3a92,$0fd2e,$0ed0f,$0dd6c,$0cd4d,$0bdaa,$0ad8b,
$9dE8,$8dc9,$7c26,$6c07,$5c64,$4c45,$3ca2,$2c83,$1ce0,$0cc1,
$0ef1f,$0ff3e,$0cf5d,$0df7c,$0af9b,$0bfba,$8fd9,$9ff8,$6e17,$7e36,
$4e55,$5e74,$2e93,$3eb2,$0ed1,$1ef0 );var
bbhh,bbll,aall,ddhh,ddll:byte;
aaa:word;
llen,kk:integer;
begin
bbhh:=$ff;
bbll:=$ff;
llen:=length(pcrcstr);
for kk:=1 to llen do
begin
aall:=ord(pcrcstr[kk]);
aall:=aall xor bbhh;
aall:=aall;
aaa:=testtab[aall];
asm
push ax
mov ax,aaa
mov ddhh,ah
mov ddll,al
mov aaa,ax
pop ax
end;
ddhh:=ddhh xor bbll;
bbhh:=ddhh;
bbll:=ddll;
end; highcrc:=not bbhh;
lowcrc:=not bbll;
end;该程序在WIN98及WINME下运行正常,但怀疑在WIN2000及XP下运行不正常。
所以还请各位帮忙把程序转成PASCAL的。
我调试了一下。
发现函数真是没什么问题。
这是一个串口通讯的程序,为什么在WIN98和WINME下就没事,在2000和XP下就不行呢?