[Coco] Linville's ramblings on assembly vs machine code

Dave Philipsen dave at davebiz.com
Mon Jul 10 19:06:34 EDT 2017


Of course it's important.  Read the text below.  I'm referring to the order in which *you* order the registers when you write an assembler program.  It makes no difference since the CPU stacks them in a specified manner no matter what the source indicates.

Dave

> On Jul 10, 2017, at 5:05 PM, L. Curtis Boyle <curtisboyle at sasktel.net> wrote:
> 
> It should be mentioned that the order of the stack registers is VERY important in OS-9, system all the system calls use SWI (which pushes all registers), and the calls themselves get parameters passed to them by the registers on the stack, each with a specific purpose/function.
> 
> L. Curtis Boyle
> curtisboyle at sasktel.net
> 
> TRS-80 Color Computer Games website
> http://www.lcurtisboyle.com/nitros9/coco_game_list.html
> 
> 
> 
>> On Jul 10, 2017, at 3:34 PM, Robert Gault <robert.gault at att.net> wrote:
>> 
>> Dave Philipsen wrote:
>>> <snip>
>>> I was talking with someone once about pushing and pulling registers to/from the stack on the 6809.
>>> He had a concern about how one particular disassembler represented the order in which a list of
>>> registers would be pushed or pulled.  From the point of view of someone who worked purely with
>>> assembly mnemonics and never even bothered to look at the machine codes that had been assembled,
>>> this might be a valid question.  Does it matter how you order the registers when you push or pull
>>> them? (i.e. is pshs  a,b,x,y different than pshs y,x,b,a ?)
>>> If when you learned assembler you at least got a taste of how it relates to machine code you would
>>> know right away that it matters not because each of the registers to be pushed or pulled is
>>> represented by a single bit in a post code byte that follows the opcode.  The processor will always
>>> push or pull the registers in the same order regardless of how you write it in assembler.  So to
>>> answer the question: no, pshs a,b,x,y is not any different than pshs y,x,b,a.
>>> 
>>> <snip>
>> 
>> Well, here is at least one exception that proves the rule. :)
>> 
>> It makes a very big difference what order the stacking process takes place! You can easily find examples in the Coco code where a stack has been pushed and depending on the following code, the contents of the stack was changed and then eventually pulled.
>> If you don't know where a particular register was placed on the stack, then you won't know where that value is located so it can be changed.
>> 
>> One example of this issue occurs when you replace a 6809 with a 6309 and try to work in native mode. The NMI routine in DOS1.1 is
>> DNMISV    LDA    NMIFLAG
>>    BEQ    LD7BB
>>    LDX    DNMIVC
>>    STX    10,S
>>    CLR    NMIFLG
>> LD7BB    RTI
>> 
>> The above works with a 6809 or a 6309 in emulation mode. With a 6309 in native mode, the code needs to be
>>    STX    12,S
>> as the stacking is changed.
>> 
>> Robert
>> 
>> 
>> 
>> -- 
>> Coco mailing list
>> Coco at maltedmedia.com
>> https://pairlist5.pair.net/mailman/listinfo/coco
>> 
> 
> 
> -- 
> Coco mailing list
> Coco at maltedmedia.com
> https://pairlist5.pair.net/mailman/listinfo/coco



More information about the Coco mailing list