vault backup: 2022-08-01 11:30:26

This commit is contained in:
Jet Hughes 2022-08-01 11:30:26 +12:00
parent 3928774584
commit 5c974b1fa6

View File

@ -6,7 +6,7 @@ tags:
- cosc204
---
10 addressing modes
# addressing modes
- implied `inca`
- immediate `lda #$00`
- extended `LDA $31FE`
@ -25,6 +25,50 @@ tags:
- program counter relative `LDA TABLE,PCR ; A = the value stored at TABLE`
- if all memory references are relative, then the program cna be loaded anywhere is memory, and will still work. It is said to be **relocatable**
![operand cheat sheet](https://i.imgur.com/mA7Y8bE.png)
# Calling conventions
all global vars. this is discouraged in high level languages
The calling convention is the set of rules that describe
- How to pass parameters
- How to return a result
- Which registers a routine may alter
## CMOC
a 6809 C compiler
callling conventions
- A routine must preserve Y, U, S and DP
- A routine may change A, B, X and CC
- Parameters are pushed on the stack in the reverse order
- The caller pops them off the stack after the call
- char parameters are promoted to int
- unsigned char are promoted to unsigned int
- Return 8-but values in B
- Return 16-bit values in D
- Were not going to talk about passing a struct by value
### example in C
``` c
uint16_t two_params(uint8_t first, uint16_t second) {
return first + second;
}
uint16_t call_one(void) {
return two_params(204, 431);
}
```
```
LDD #$01AF ;
decimal 431 PSHS B,A ;
argument 2, int CLRA LDB #$CC ;
decimal 204 PSHS B,A ;
argument 1, int LBSR _two_params
```