<div dir="ltr">I followed Bart's suggestion and added the -al switch to the fpc.cfg file.<br><br>This was probably the right move, as - after a new compile - I could see<br>the wanted .s file beside the regular EXE.<br><br>I uploaded the .s file here:<br><a href="https://mega.nz/file/rlpyHa7b#fx0LYTjapmUdFRkzVGCCzFFogqYuEu7UvYQ5HtilLks">https://mega.nz/file/rlpyHa7b#fx0LYTjapmUdFRkzVGCCzFFogqYuEu7UvYQ5HtilLks</a><br><br>I opened the new .s file with a text editor and had a new surprising result: the instruction<br><br>i:=cmbYear.ItemIndex+2005;<br><br>is nowhere to be found.<br><br>I tried to find the figure 2005 both as 07D5 and as D507: no hit.<br><br>I tried to find the string 'peppe' (that I correctly find in the EXE) in the S file: no hit.<br><br>I tried to find the string 'peppe' in hex format (7065707065) in the S file: no hit.<br><br>I tried to understand where the OnClick event could be written, but - with little surprise - I could not.<br><br>I recompiled with no debug info + using the option 'no optimization'. The new .s file is stored here<br><a href="https://mega.nz/file/X1B2mJpL#smqDJOoDOBZOMoDUpeNutXw3C3YgqHurbdC6L7m2vf4">https://mega.nz/file/X1B2mJpL#smqDJOoDOBZOMoDUpeNutXw3C3YgqHurbdC6L7m2vf4</a><br><br>The new .s file gives no new information than the old one.<br><br>With all this: the EXE works ok.<br><br>This case shows that I have a lot of things to learn.<br><br>Any help?<br><br>Peppe<br><br>PS:<br><br>if interested:<br><br>unit1.lfm<br><a href="https://mega.nz/file/O1IDhIwb#0SDAninq5yfTOKELksfTRnaXqpIocwh3ugthDzFK2G8">https://mega.nz/file/O1IDhIwb#0SDAninq5yfTOKELksfTRnaXqpIocwh3ugthDzFK2G8</a><br><br>unit1.pas<br><a href="https://mega.nz/file/fgYjFQzJ#wuaS4A7CeTR0Ra35_E5gk8ggGlAFPBqaSJS_p_yi8Ss">https://mega.nz/file/fgYjFQzJ#wuaS4A7CeTR0Ra35_E5gk8ggGlAFPBqaSJS_p_yi8Ss</a><br><br><br><br></div><br><div class="gmail_quote"><div dir="ltr" class="gmail_attr">On Fri, Sep 3, 2021 at 11:07 PM duilio foschi <<a href="mailto:octopushole@gmail.com">octopushole@gmail.com</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><div dir="ltr">today I did an experiment that gave me surprising results (due to my ignorance,<br>of course).<br><br>I have an application written in Lazarus and I need to do one fix only.<br><br>This line<br><br>   result:=EncodeDate(<br>   cmbYear.ItemIndex+2005,<br>   cmbMonth.ItemIndex+1,<br>   1);<br><br><br>needs to be changed into<br><br><br>   result:=EncodeDate(<br>   cmbYear.ItemIndex+2006,<br>   cmbMonth.ItemIndex+1,<br>   1);<br><br><br>I thought it would be easy to use an hex editor like PSPad hex, find the number<br>2005 as 07D5 then fix it (maybe after the right guess in case of multiple hits).<br><br>To my surprise, I could not find the word 07D5. As I vaguely remember the<br>big endian/little endian question, I tried to look for D507: no hit.<br><br>In order to dig into the question, I created a Lazarus windows application<br>made of a TCombobox and a TButton. I used v. 2.0.6 on windows 7.<br><br>I added the following code:<br><br>procedure TForm1.Button1Click(Sender: TObject);<br>var<br>   a:string;<br>   i:integer;<br>begin<br>   cmbYear.Items.Add('2020');<br>   cmbYear.Items.Add('2021');<br>   Caption:='peppe';<br>   i:=cmbYear.ItemIndex+2005;<br>   Caption:=inttostr(i);<br>end;<br><br>I compiled/linked that application then opened the EXE using PsPad Hex.<br><br>Looking for string 'peppe', I can easily spot the part that contains<br>the code of interest.<br><br>Please see here for a screenshot of PsPad Hex:<br><a href="https://i.ibb.co/2M054Qx/1.jpg" target="_blank">https://i.ibb.co/2M054Qx/1.jpg</a><br><br>(I encircled a few familiar names).<br><br>I cannot understand how this instruction<br><br>   i:=cmbYear.ItemIndex+2005;<br><br>is coded here.<br><br>I am no assembly expert, but I expect that the compiler would translate the instruction into something like<br><br>move 2005 to register X<br>add register X to register Y     (where register Y represents cmbYear.ItemIndex)<br>move register Y to register Z    (where register Z represents var i)<br><br>In any case I would expect that the figure 2005 (07D5) be written somewhere,<br>but facts prove me wrong.<br><br>I am very curious: what really happens in the EXE?<br><br>In which form gets this instruction compiled?<br>   i:=cmbYear.ItemIndex+2005;<br><br>Could someone explain?<br><br>Thank you<br><br>Peppe<br><br></div>
</blockquote></div>