hoho,简单?单说mov,je,cmp谁都知道什么意思。
我问的是整个汇编函数是怎么实现这个功能的,比如Mov [ECX],EAX 是什么意思,为什么要Je @OB1 。而不是什么是Je @OB1 。
不好意思,可能表达有误,有些人没有看懂。

解决方案 »

  1.   

    我很奇怪,你说你知道mov,je,cmp,但确不知道Mov [ECX],EAX ??????
    [ECX]表示32位寄存器ECX的地址!
    Mov [ECX],EAX 表示把[ECX]的地址作为一个值传给寄存器EAX!
      

  2.   

    楼上的说话怎么不看看前面的讨论?不懂就听,不要乱回答。
    别人是问“为什么”,不是“是什么”,比如ECX是第三个输入参数的存放位置,将EAX放入……是为了……,所以……。这才是一个回答嘛。
    hoho,我不懂,只是看不惯说两句。
      

  3.   

    这个outv和下一个getnextvalue是干什么的你应当从整个project分析。Procedure OutV(Value:Integer); 
    Asm 
    Mov EDX,Value 
    Inc OB            //这里是o而不是0(zero)吧,这个变量ob的定义是什么?
    And OB,3          //似乎是个byte(out byte?)为1/2/3时各有意义。 
                      //若为0,则转至ob0处,
    Cmp OB,1        
    Je @OB1 
    Cmp OB,2 
    Je @OB2 
    Cmp OB,3 
    Je @OB3 
    @OB0:Mov ECX, DstPtr //这个dstptr(目标地址?)又是什么?还有变量dw,
    Mov EAX,EDX       //thispackdw,thispackbyte,从子过程里是没法分析的。
    Shr AX,8 
    OR EAX,DW 
    Mov [ECX],EAX 
    Add ECX,4 
    Mov [Ecx],DL 
    Inc ECX 
    Mov DstPtr,Ecx 
    Jmp @Exit 
    @OB1:Shl EDX,22  //取value的低10位,
    Mov DW,EDX 
    Jmp @Exit 
    @OB2:Shl EDX,12  //取低20位,
    Or DW,EDX 
    Jmp @Exit 
    @OB3:Shl EDX,2 
    Or DW,EDX 
    @Exit: 
    End; 
      

  4.   

    不好意思,忘了给出函数变量声明。
    1。
    Var OutSize,I,J,OB,H,OS:Integer;
        Code,OldCode:Smallint;
        ThisPackDW,DataPtr,DstPtr:DWord;
        ThisPackByte:Byte;
        StringTable:Array [0.._WinSize] of Array of Byte;
        SLTable:Array [0.._WinSize] of SmallInt;    Procedure GetNextValue;                           //数据单元拆分
          Asm
               CMP OB,1
        ……
    2。
    VAR SrcData:PByteArray;
        OB,H:Integer;
        I,J:Integer;
        Found,JustComplete:Boolean;
        ADW,DstBegin,DstPtr:Dword;    Procedure OutV(Value:Integer);
         Asm
                    Mov EDX,Value
                    Inc OB
    ……
      

  5.   

    Procedure OutV(Value:Integer); 
    Asm 
    Mov EDX,Value   赋值给寄存器 EDX
    Inc OB          寄存器 OB 加 1
    And OB,3        与上 3Cmp OB,1        比较 
    Je @OB1         取OB1的地址,为零则跳转 
    Cmp OB,2        比较
    Je @OB2         取OB2的地址,为零则跳转 
    Cmp OB,3        比较
    Je @OB3         取OB1的地址,为零则跳转 
    @OB0:
    Mov ECX, DstPtr   赋值
    Mov EAX,EDX       赋值
    Shr AX,8          AX 位移8
    OR EAX,DW         EAX 和 DW 相或
    Mov [ECX],EAX     赋值
    Add ECX,4         ECX 加 4
    Mov [Ecx],DL      赋值
    Inc ECX           ecx 减一
    Mov DstPtr,Ecx    赋值
    Jmp @Exit         无条件跳转
    @OB1:Shl EDX,22   EDX 位移22
    Mov DW,EDX        AX 位移8...... 以下请参照Jmp @Exit         
    @OB2:Shl EDX,12 
    Or DW,EDX 
    Jmp @Exit 
    @OB3:Shl EDX,2 
    Or DW,EDX 
    @Exit: 
    End; 
    Procedure GetNextValue; //数据单元拆分 
    Asm 
    CMP OB,1 
    JE @OB1 
    CMP OB,2 
    JE @OB2 
    CMP OB,3 
    JE @OB3 
    @OB0: Mov ECX,DataPtr 
    MOV EDX,[ECX] 
    Add ECX,4 
    Mov ThisPackDW,EDX 
    MOV AL,[ECX] 
    Inc ECX 
    Mov DataPtr,ECX 
    Mov ThisPackByte,AL 
    Shr EDX,22 
    Mov Code,DX 
    Jmp @Exit 
    @OB1: Mov EAX,ThisPackDW 
    Shr EAX,12 
    AND EAX,$3FF 
    Mov Code,AX 
    Jmp @Exit 
    @OB2: Mov EAX,ThisPackDW 
    Shr EAX,2 
    AND EAX,$3FF 
    Mov Code,AX 
    Jmp @Exit 
    @OB3: Mov EAX,ThisPackDW 
    Shl EAX,8 
    MOV AL,ThisPackByte 
    AND EAX,$3FF 
    Mov Code,AX 
    @Exit:Inc OB 
    AND OB,3 End; 
      

  6.   

    Procedure OutV(Value:Integer); 
    Asm 
    Mov EDX,Value   ;赋值给寄存器 EDX
    Inc OB          ;缓冲区OB 加 1
    And OB,3        ;与上 3Cmp OB,1        ;比较 
    Je @OB1         ;OB=1则跳转,下同 
    Cmp OB,2        
    Je @OB2         
    Cmp OB,3        
    je @OB3         
    @OB0:
    Mov ECX, DstPtr   ;赋值
    Mov EAX,EDX       ;赋值
    Shr AX,8          ;AX 右移8位
    OR EAX,DW         ;EAX 和 DW 相或
    Mov [ECX],EAX     ;把EAX赋值给ECX指向的缓冲区
    Add ECX,4         ;ECX 加 4
    Mov [Ecx],DL      ;把DL赋值给ECX指向的缓冲区
    Inc ECX           ;ecx 加1
    Mov DstPtr,Ecx    ;赋值
    Jmp @Exit         ;无条件跳转
    @OB1:Shl EDX,22   ;EDX 左移22位
    Mov DW,EDX        ;Jmp @Exit         
    @OB2:Shl EDX,12 
    Or DW,EDX 
    Jmp @Exit 
    @OB3:Shl EDX,2 
    Or DW,EDX 
    @Exit: 
    End; 
    End;