Jump to content
  • entries
    39
  • comments
    57
  • views
    124,734

Action!: Byte Math


DanBoris

1,658 views

Next let’s look at some simple byte variable manipulation. Here is the first sample Action program:

 

BYTE I

PROC MAIN()
I=1
I=I+2
RETURN

 

And the assembly code

 

24B3: .byte $00
24B4: JMP  $24B7	  

24B7: LDY  #$01	 
24B9: STY  $24B3	  
24BC: CLC		
24BD: LDA  $24B3	  
24C0: ADC  #$02	 
24C2: STA  $24B3	  
24C5: RTS

 

This code starts at memory location $24B3 which is where the global variable I is stored. Next we have a jump instruction that gets us to the MAIN procedure. Like last time this is a little inefficient but not a big problem at the start of the program.

 

Next we load the immediate value 1 into I. I assume they use the Y register for this so that A can be reserved for math operations which will allow for some optimizations under certain conditions. I have another example that I will post at some point that shows this. In this situation by using Y they actually miss out on the opportunity for an optimization. If A had been used the LDA would not have been necessary. Finally a normal 6502, 8-bit add sequence is executed and the result stored by in I.

 

Now let’s look at almost the same program, but it will add one to I instead of two:

 

BYTE I

PROC MAIN()
I=1
I=I+1
RETURN

 

 

0E58: .byte #$00
0E59: JMP  $0E5C	  

0E5C: LDY  #$01	 
0E5E: STY  $0E58	  
0E61: INC  $0E58	  
0E64: RTS

 

As you can see the code is quite a bit smaller. The compiler recognized that I=I+1 is an increment so it uses the INC instruction on the memory location where I is stored resulting in a savings of three instructions.

 

You may notice that this example is at a different memory location then the first one. I am not actually sure why this happened. I have been compiling these examples using an emulator and those two examples were compiled at different times so it’s possible that I had the emulator configured differently each time.

0 Comments


Recommended Comments

There are no comments to display.

Guest
Add a comment...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Loading...
  • Recently Browsing   0 members

    • No registered users viewing this page.
×
×
  • Create New...