If you want C like structure there is the MACROSS assembler for those who don't like 6502 ASM
I would love an assembler that did assignment optimisation for me.
LDA #0
STA Addr
LDA #80
STA OtherAddr
LDA #1
STA AnotherAddr
where it works out the optimal way to store and sort the data, so if you want to set 14 values in a row and 7 else where it makes a table, splits it up into a loop of 7 with 3 load/stores, and I just write
{ size
$d000 = Logo.x,Logo.y,Logo.X+24,Logo.Y,Logo.X+48,Logo.Y,Logo.x,Logo.y+21,Logo.X+24,Logo.Y+21,Logo.X+48,Logo.Y+21,Logo.X+72,Logo.Y+21
$d027 = Colours.(White,Red,White,Red,White,Red,White)
}
and it makes the code for me.
Number of times I have optimised a store of 0, like
LDA #0
STA PlaceOne
STA PlaceTwo
Accidentally modified the fist 0 and broken something. Or had an INX further down the code...
Doing the actual code generation is easy, limited number of patterns and a easy heuristic but gaming the assembler to get the info I need was the hard part..