原程序如下:
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的。

解决方案 »

  1.   

    运行不正常应该不是汇编的问题。你可以在windows 9x下和windows 2000下分别单步跟踪,查看内存和寄存器的值分别有什么不一样。应该可以找出问题所在。如果没有不同之处,我想这整个函数就应该没有什么问题。
      

  2.   

    靠,写的真TMD乱。汇编代码就是把数组中数的高位移到ddhh,低位移到ddll
      

  3.   

    呵呵,别骂我。是我以前的一个同事写的。
    我调试了一下。
    发现函数真是没什么问题。
    这是一个串口通讯的程序,为什么在WIN98和WINME下就没事,在2000和XP下就不行呢?