[fpc-pascal] Intel x86 inline assembler problem
leledumbo
leledumbo_cool at yahoo.co.id
Wed Nov 19 04:08:26 CET 2008
procedure DumpRegs;
var
Reg: array [0..7] of LongWord;
SReg: array [0..5] of Word;
EIP: LongWord;
EFLAGS : LongWord;
begin
asm
// save registers while they are not modified by another procedure call.
note that depending
// on your compiler settings, ebp may already be trashed (stack frame)
mov dword ptr Reg[4*0],eax
mov dword ptr Reg[4*1],ecx
mov dword ptr Reg[4*2],edx
mov dword ptr Reg[4*3],ebx
mov dword ptr Reg[4*4],esp // esp is already incorrect since it was
decreased by the amount of stack space the local variables require
mov eax, 16*4+6*2+4+4
add dword ptr Reg[4*4],eax // correct esp
mov dword ptr Reg[4*5],ebp
mov dword ptr Reg[4*6],esi
mov dword ptr Reg[4*7],edi
// save segment registers
mov word ptr SReg[2*0],ds
mov word ptr SReg[2*1],es
mov word ptr SReg[2*2],cs
mov word ptr SReg[2*3],ss
mov word ptr SReg[2*4],fs
mov word ptr SReg[2*5],gs
// save EFLAGS
pushfd
pop dword ptr EFLAGS
// now get eip.
//call $+3 -- $ is considered Hex instead of current line
address
//pop dword ptr EIP -- invalid operand (EIP)
end;
WriteStrLn('EAX = '+HexStr(Reg[0],8));
WriteStrLn('ECX = '+HexStr(Reg[1],8));
WriteStrLn('EDX = '+HexStr(Reg[2],8));
WriteStrLn('EBX = '+HexStr(Reg[3],8));
WriteStrLn('ESP = '+HexStr(Reg[4],8));
WriteStrLn('EBP = '+HexStr(Reg[5],8));
WriteStrLn('ESI = '+HexStr(Reg[6],8));
WriteStrLn('EDI = '+HexStr(Reg[7],8));
WriteStrLn('DS = '+HexStr(SReg[0],8));
WriteStrLn('ES = '+HexStr(SReg[1],8));
WriteStrLn('CS = '+HexStr(SReg[2],8));
WriteStrLn('SS = '+HexStr(SReg[3],8));
WriteStrLn('FS = '+HexStr(SReg[4],8));
WriteStrLn('GS = '+HexStr(SReg[5],8));
WriteStrLn('EFLAGS = '+HexStr(EFLAGS,8));
WriteStrLn('EIP = '+HexStr(EIP,8));
end;
Questions:
What's Free Pascal's substitution for $ (used as Hex in FPC, current line
address in normal assembler)?
EIP is recognized by the assembler? How come? AFAIK, it's not visible to the
programmer. Thus, the above EIP should refer to EIP in the local variables
section.
--
View this message in context: http://www.nabble.com/Intel-x86-inline-assembler-problem-tp20572969p20572969.html
Sent from the Free Pascal - General mailing list archive at Nabble.com.
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.freepascal.org/pipermail/fpc-pascal/attachments/20081118/f107ad50/attachment.html>
More information about the fpc-pascal
mailing list