<div dir="ltr"><div>Please disregard my previous statement abour renaming register names. I was completely wrong. The problem most likely was with a wrong asm mode. Try to specify the asm mode explicitly by adding</div><div>{$ASMMODE INTEL} <br></div><div>at the begging of the unit.</div><div><br></div><div>You might try an alternative version here: <a href="http://pastebin.com/ujyBLjYZ">http://pastebin.com/ujyBLjYZ</a></div><div><br></div><div>Register names and more important ABIs are CPU dependent 32 vs 64 bit. </div><div>Has little to do with OS, though knowledgable apporach is necessary.<br></div><div><br></div><div>If you need to have the code working for both 32 and 64, you might need to use compiler directive $IFDEF.with the CPU target you need.</div><div><br></div><div><div><div><div><div>The good news, if you compile win32 bit application it will run just fine on win64 and will provide you with the most accurate results possible.So you can use the existing 32-bit code.</div><div><br></div><div>IRC, some extra efforts would be needed to run 32-bit binary on 64bit Linux.</div><div><br></div><div>thanks,</div><div>Dmitry</div><div><br><div><br><div class="gmail_extra"><br><div class="gmail_quote">On Fri, Sep 12, 2014 at 11:12 PM, Xiangrong Fang <span dir="ltr"><<a href="mailto:xrfang@gmail.com" target="_blank">xrfang@gmail.com</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-color:rgb(204,204,204);border-left-style:solid;padding-left:1ex"><div dir="ltr"><span><div style="font-family:'courier new',monospace"><span style="font-family:arial">2014-09-13 0:28 GMT+08:00 Dmitry Boyarintsev </span><span dir="ltr" style="font-family:arial"><<a href="mailto:skalogryz.lists@gmail.com" target="_blank">skalogryz.lists@gmail.com</a>></span><span style="font-family:arial">:</span><br></div></span><div class="gmail_extra"><div class="gmail_quote"><span><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-color:rgb(204,204,204);border-left-style:solid;padding-left:1ex"><div dir="ltr">You're compiling for x64, You need to replace "eax" and "edx" with "rax" and "rdx", since e?x are available for i386 only.<br><br></div></blockquote><div><br></div></span><div><div style="font-family:'courier new',monospace">My situation is, I program and test on Ubuntu x64 on a i3-M390. Then compile it to Windows 32bit on a VirtualBox on this machine, then run it on a Windows 32bit running on a rather old pentium dual core (T-something, I don't know if it is 32bit or 64bit processor).</div><div style="font-family:'courier new',monospace"><br></div><div style="font-family:'courier new',monospace">regarding e?x vs. r?x, is it only related to the CPU, or also has something to do with the OS (32bit or 64bit)?  How to do "conditional compiling" for assembly code?</div><br></div></div></div></div>
<br>_______________________________________________<br>
fpc-pascal maillist  -  <a href="mailto:fpc-pascal@lists.freepascal.org" target="_blank">fpc-pascal@lists.freepascal.org</a><br>
<a href="http://lists.freepascal.org/cgi-bin/mailman/listinfo/fpc-pascal" target="_blank">http://lists.freepascal.org/cgi-bin/mailman/listinfo/fpc-pascal</a><br></blockquote></div><br></div></div></div></div></div></div></div></div>