会汇编者请进!(150分)

  • 主题发起人 主题发起人 HORNEY
  • 开始时间 开始时间
H

HORNEY

Unregistered / Unconfirmed
GUEST, unregistred user!
能否帮我把这些汇编代码翻成PASCAL之类的高级语言?
最好再讲出其中的意思,多谢。。。
MOV StackTop, ESP
MOV EAX, NameCount
INC EAX
SHL EAX, 2 // sizeof pointer = 4
SUB ESP, EAX
LEA EAX, NameRefs
MOV [EAX], ESP
其中NameCount是整型;
NameRefs类型为下面的PNamesArray
type
PNamesArray = ^TNamesArray;
TNamesArray = array[0..0] of PWideChar;
还有一段:
MOV StackTop, ESP
MOV EAX, NameCount
INC EAX
SHL EAX, 2 // sizeof pointer = 4
SUB ESP, EAX
LEA EAX, NameRefs
MOV [EAX], ESP
其中变量意义和上面一样。。。
 
不好意思,第二段在这里
MOV EAX, DestLen
ADD EAX, EAX
ADD EAX, 3
AND EAX, not 3
SUB ESP, EAX
LEA EAX, Dest
MOV [EAX], ESP
DESTLEN和DEST都是整型。
 
啊呀,又弄错了,第二段代码里面DEST是PWideChar类型。。。
真对不起,这几天太困了。。。
 
翻译不了呀
汇编直接对寄存器和地址操作,高级语言做不到,这无法翻译

第一段的大致意思是:NameRefs^:=ESP-4*(namecount+1)
后一段:dest^:=ESP-fr(destlen*2+3)
fr为将二进制方式最后两位置零
注意其中的and 和not 是位运算
 
http://www.delphibbs.com/delphibbs/dispq.asp?lid=615126

欢迎各位高手光顾这里
 
你最好把完整的代码贴出来, 估计应该是一段赋值或是内存复制的代码.
 
; MOV StackTop, ESP 保存Esp
MOV EAX, NameCount ' Eax := NameCount
INC EAX Eax := Eax+1
SHL EAX, 2 ; Eax := Eax*4
SUB ESP, EAX ; Esp =Esp-Eax
LEA EAX, NameRefs Eax= NameRefs的地址
MOV [EAX], ESP ' NameRefs := Esp

NameRefs := esp-(NameCount+1)*4


MOV EAX, DestLen Eax=EastLen
ADD EAX, EAX ' Eax = Eax+Eax
ADD EAX, 3 Eax=Eax+3
AND EAX, not 3 就是讓最后三位二進制數等于 0
讓 Eax = 8的倍數
SUB ESP, EAX Esp=esp-eax
LEA EAX, Dest
MOV [EAX], ESP

Dest := esp-((DestLen*2+3) div 8)*8

不知道對不對,也是初學
 
對不起,是最后二位,4的位數,可能是地址的字對齊吧


MOV EAX, DestLen Eax=EastLen
ADD EAX, EAX ' Eax = Eax+Eax
ADD EAX, 3 Eax=Eax+3
AND EAX, not 3 就是讓最后二位二進制數等于 0
讓 Eax = 4的倍數
SUB ESP, EAX Esp=esp-eax
LEA EAX, Dest
MOV [EAX], ESP

Dest := esp-((DestLen*2+3) div 4)*4
 
多人接受答案了。
 

Similar threads

I
回复
0
查看
675
import
I
I
回复
0
查看
816
import
I
I
回复
0
查看
785
import
I
I
回复
0
查看
753
import
I
I
回复
0
查看
730
import
I
后退
顶部