再加100分问关于intel hex的问题.http://community.csdn.net/Expert/topic/3307/3307685.xml?temp=.3423426

解决方案 »

  1.   

    比如这样一段代码
    CODE SEGMENT
    ASSUME CS:CODE
    org 2000h
    START:  MOV AL,80H
    CODE ENDS
    END  START
    编译后列表为
    2000 B080          MOV AL,80
    2002 206375        AND [BP+DI+75],AH
    是不是说数据就是 B080 206375 呢,请高手指点啊.
      

  2.   

    hex其实是显示时的格式,在文件里物理存放的数据还是0和1组成的数据串。读取的时候进行格式处理
      

  3.   

    这个问题折磨了我好几天了.现在总算是有眉目了。
    现在帖出部分代码,供参考也请各为好友指出不足之处.
    再次深深感谢回帖的朋友.function MakeCC(Str: String):String;
    var
      I,J : integer;
      temp : String;
    begin
      J := 0;
      for i := 1 to (StrLen(PChar(str)) div 2) do begin
        j:= j+HexToInt(copy(str,((i-1)*2+2),2));
      end;
      j:= 1 + not(j);
      temp:= IntToHex( j,2);
      result := Copy (IntToHex( j,2),StrLen(PChar(IntToHex( j,2)))-1,2);
    end;function MakeIntelHex(HexData,StartAddr,EndAddr:String;HexfilePath : String) : boolean;
    {
      功能:生成intel hex文件
      参数:hexData: 16进制数据的字符串 StartAddr ; EndAddr : 起始,结束地址
      LineData : 每一行的数据
    }
    var
      lastData : Integer;
      DataLine : Integer;
      LineData : array[1..2050] of String;
      TempAddr : String;
      tempData : String;
      i,j:integer;
      buffer : array[0..2050] of byte;
      HexFile : TextFile;
      NumrecsWriten:integer;  
    begin
      result := false;
      DataLine := StrLen(PChar(HexData)) div (32*2);
      LastData := Strlen(PChar(HexData)) mod (32*2);
      i:=0;
    if  DataLine <> 0 then begin
      for i:= 1 to DataLine do begin
        tempAddr := IntToHex(HexToInt(StartAddr)+32*(i-1),4);
        tempData := Copy(HexData,(i-1)*64+1,64); 
        LineData[i] := ':20'+TempAddr+TempData;
        LineData[i] := LineData[i] + MakeCC(LineData[i]);
      end;
      if LastData <> 0  then begin
        DEC(i);
        tempAddr := IntToHex(HexToInt(StartAddr)+32*(i-1)+ (LastData div 2),4);
        INC(i);
        tempData := Copy(HexData,(i-1)*64+1,64);
        LineData[i] := ':'+IntToHex((StrLen(PChar(tempData)) div 2),2)+TempAddr+TempData;
        LineData[i] := LineData[i] + MakeCC(LineData[i]);
      end;
    end  else begin
        i := 1;
        tempAddr := IntToHex(HexToInt(StartAddr),4);
        tempData := Copy(HexData,1,64);
        LineData[i] := ':'+IntToHex((StrLen(PChar(tempData)) div 2),2)+TempAddr+TempData;
        LineData[i] := LineData[i] + MakeCC(LineData[i]);
    end; 
      INC(i);
      LineData[i] := ':00000001FF';
      Assignfile(HexFile,HexfilePath);
      Rewrite(HexFile);
      try
      for j := 1 to i do begin
          writeln(HexFile,LineData[j]);
      end
      finally
          CloseFile(HexFile);
      end;
    end;