aboutsummaryrefslogtreecommitdiff
### make memory reads and writes of bytes, words and dwords at both
### aligned and unaligned locations

## set up stack
set_sp 0

## store value h9A785634 at h100 writing 1 byte at a time

# write first 2 bytes using storeb
const h34
storeb h000100

# try putting some garbage in higher 3 bytes of our constant - it should
# not get written anyway
const h9ABA9E56
storeb h000101

# write another 2 bytes using storeb+
const 2
const h78
storeb+ h100

const 3
const h9A
storeb+ h100


## test single-byte loads

# sign-extend read value h9A (as hFFFFFF9A) and store it at h104
loadbsx h00103
store h00104

# sign-extend read value h78 (as h00000078) and store it at h108
const 2
loadbsx+ h00100
store h00108

# zero-extend read value h9A (as h0000009A) and store it at h10C
const 3
loadbzx+ h00100
store h0010C

# zero-extend read value h78 (as h00000078) and store it at h110
loadbzx h00102
store h00110


## store values hD4C32B1A and h8877FFEE at h200 and h204
## writing 2 bytes at a time

# make aligned writes at h200 and h206
# only byte 1A matters - higher one will be overwritten later
const h481A
storew h00200

# only byte 88 matters - lower one will be overwritten later
const 6
const h8805
storew+ h00200

# make unaligned writes at h203, h201 and h205
const hEED4
storew h00203

const 1
const hC32B
storew+ h00200

# only bytes 77FF matter - higher ones won't be written anyway
const h71F577FF
storew h00205


## test 2-word loads

# sign-extend read value h2B1A (as h00002B1A) and store it at h208
const 0
loadwsx+ h00200
store h00208

# sign-extend read value hC32B (as hFFFFC32B) and store it at h20C
loadwsx h00201
store h0020C

# zero-extend read value hD4C3 (as h0000D4C3) and store it at h210
loadwzx h00202
store h00210

# zero-extend read value h77FF (as h000077FF) and store it at h214
const 5
loadwzx+ h00200
store h00214


## test unaligned 4-byte memory writes

# write values h92837400, hBECD0001 and h000044AF at h300, h304 and h308
const 0
const 0
const 0
storeb h300
storeb h305
storew h30A

const h01928374
store h301

const 6
const h44AFBECD
store+ h300


## test unaligned 4-byte memory reads

# read value hCD000192 and write it at h30C
load h303
store h30C

# read value h0044AFBE and write it at h310
const 7
load+ h300
store h310

halt