33
examples/data/README.md
Normal file
33
examples/data/README.md
Normal file
@@ -0,0 +1,33 @@
|
||||
# data
|
||||
|
||||
Constructing data sections in `avo`.
|
||||
|
||||
A data section is declared with the `GLOBL` function, and values are specified with `DATA`. The size of the data section will grow as values are added to it.
|
||||
|
||||
[embedmd]:# (asm.go go /.*GLOBL\(/ /^$/)
|
||||
```go
|
||||
bytes := GLOBL("bytes", RODATA|NOPTR)
|
||||
DATA(0, U64(0x0011223344556677))
|
||||
DATA(8, String("strconst"))
|
||||
DATA(16, F32(math.Pi))
|
||||
DATA(24, F64(math.Pi))
|
||||
DATA(32, U32(0x00112233))
|
||||
DATA(36, U16(0x4455))
|
||||
DATA(38, U8(0x66))
|
||||
DATA(39, U8(0x77))
|
||||
```
|
||||
|
||||
The `GLOBL` function returns a reference which may be used in assembly code. The following function indexes into the data section just created.
|
||||
|
||||
[embedmd]:# (asm.go go /.*TEXT.*DataAt/ /RET.*/)
|
||||
```go
|
||||
TEXT("DataAt", "func(i int) byte")
|
||||
Doc("DataAt returns byte i in the 'bytes' global data section.")
|
||||
i := Load(Param("i"), GP64v())
|
||||
ptr := Mem{Base: GP64v()}
|
||||
LEAQ(bytes, ptr.Base)
|
||||
b := GP8v()
|
||||
MOVB(ptr.Idx(i, 1), b)
|
||||
Store(b, ReturnIndex(0))
|
||||
RET()
|
||||
```
|
||||
@@ -5,13 +5,13 @@ package main
|
||||
import (
|
||||
"math"
|
||||
|
||||
"github.com/mmcloughlin/avo"
|
||||
. "github.com/mmcloughlin/avo"
|
||||
. "github.com/mmcloughlin/avo/build"
|
||||
. "github.com/mmcloughlin/avo/operand"
|
||||
)
|
||||
|
||||
func main() {
|
||||
bytes := GLOBL("bytes", avo.RODATA|avo.NOPTR)
|
||||
bytes := GLOBL("bytes", RODATA|NOPTR)
|
||||
DATA(0, U64(0x0011223344556677))
|
||||
DATA(8, String("strconst"))
|
||||
DATA(16, F32(math.Pi))
|
||||
|
||||
Reference in New Issue
Block a user