1
0
mirror of https://github.com/chai2010/advanced-go-programming-book.git synced 2025-05-24 04:22:22 +00:00

images: 增加 asm 相关图片

This commit is contained in:
chai2010 2018-06-15 13:48:47 +08:00
parent d6a2cb54d4
commit 97bfb64bb1
19 changed files with 276 additions and 1 deletions

2
.gitignore vendored
View File

@ -29,3 +29,5 @@ _book
*.obj *.obj
*.o *.o
a.out a.out
.oracle_jre_usage

View File

@ -9,7 +9,10 @@ UML_PNG_FILES=$(patsubst %.plantuml,%.uml.png,$(UML_FILES))
DOT_FILES=$(wildcard ./*.dot) DOT_FILES=$(wildcard ./*.dot)
DOT_PNG_FILES=$(patsubst %.dot,%.dot.png,$(DOT_FILES)) DOT_PNG_FILES=$(patsubst %.dot,%.dot.png,$(DOT_FILES))
default: $(UML_PNG_FILES) $(DOT_PNG_FILES) DITAA_FILES=$(wildcard ./*.ditaa.txt)
DITAA_PNG_FILES=$(patsubst %.ditaa.txt,%.ditaa.png,$(DITAA_FILES))
default: $(UML_PNG_FILES) $(DOT_PNG_FILES) $(DITAA_PNG_FILES)
@echo "ok" @echo "ok"
logo: logo:
@ -29,3 +32,6 @@ clean:
%.dot.png: %.dot %.dot.png: %.dot
dot -Tpng -o $@ $< dot -Tpng -o $@ $<
%.ditaa.png: %.ditaa.txt
docker run --rm -it -v `pwd`:/root chai2010/ibox:ditaa $< $@

Binary file not shown.

After

Width:  |  Height:  |  Size: 20 KiB

View File

@ -0,0 +1,29 @@
X86/AMD64 Architecture
+----------+ +---------+ +--------------------+
| cRED | high | FLAGS | | MOV/LEA |
| stack | ^ +---------+ +--------------------+
| | | | | IP | | CMP/TEST/JMP/J[CC] |
| | | | +---------+ +--------------------+
| v | | | PUSH/POP |
+----------+ | +---------+ +--------------------+
| | | | AX | | CALL/RET |
| cAAA | | +---------+ +--------------------+
| unused | | | BX |
| | | +---------+ +--------------------+
| | | | CX | | ADD/SUB/MUL/DIV |
+----------+ | +---------+ +--------------------+
| cYEL | | | DX | | AND/OR/XOR/NOT |
| heap | | +---------+ +--------------------+
| | | | SI | | SHL/SHR |
+----------+ | +---------+ +--------------------+
| cGRE | | | DI |
| data | | +---------+ +--------------------+
+----------+ | | BP | | |
| cGRE | | +---------+ | |
| rodata | | | SP | | ...more ins... |
+----------+ | +---------+ | |
| cBLU | | | R8~R15 | | |
| text | low +---------+ +--------------------+
+----------+
Memory Register Instructions

Binary file not shown.

After

Width:  |  Height:  |  Size: 24 KiB

View File

@ -0,0 +1,29 @@
Go's Assembler pseudo registers
+----------+ +---------+ +--------------------+
| cYEL | | FLAGS | | MOV/LEA |
| heap | +---------+ +---------+ +--------------------+
| | | PC cBLU+-----+ IP cBLU| | CMP/TEST/JMP/J[CC] |
+----------+ +---------+ +---------+ +--------------------+
| cRED | | PUSH/POP |
| stack | +---------+ +--------------------+
+----------+ | AX | | CALL/RET |
| cRED | a+0(FP)+---------+ +---------+ +--------------------+
| frame | <-=----+ FP cRED| | BX |
+----------+ +---------+ +---------+ +--------------------+
| cRED | <-=----+ SP cRED| | CX | | ADD/SUB/MUL/DIV |
| local | t-8(SP)+---------+ +---------+ +--------------------+
| | | | DX | | AND/OR/XOR/NOT |
| : | +---------+ +--------------------+
| v | <-=--------+ | SI | | SHL/SHR |
+----------+ +0(SP) | +---------+ +--------------------+
| cGRE | | | DI |
| data | | +---------+ +--------------------+
+----------+ | | BP | | |
| cGRE | | +---------+ | |
| rodata | +-=---------+ SP cPNK| | ...more ins... |
+----------+ +---------+ +---------+ | |
| cBLU | +--+ SB cBLU| | R8~R15 | | |
| text | | +---------+ +---------+ +--------------------+
+----------+ <-=-+
Memory Pseudo Registers Real Register Instructions

Binary file not shown.

After

Width:  |  Height:  |  Size: 30 KiB

View File

@ -0,0 +1,50 @@
function arguments and return values layout
+------+-----+-------------------+--------+
| | | | |
| func | Foo | (a bool, b int16) | []byte | unsafe.Sizeof(struct{a bool; b int16; c []byte})
| c1AB | c1AB| cRED | cRED |
+------+-----+-------------------+--------+
| |
+-----------=-+ +-=--------------------------+
| |
v v
+-----------------+-------------------------------+--------------------------------------+
| | | |
| a bool, b int16 | | c reflect.SliceHeader |
| cRED | | cRED |
+-----------------+-=-----------------------------+--------------------------------------+
| | | | |
: : : : :
| | | | |
v v v v v
+---------+----------+----------------------------+-----------------+--------+-----------+
| | | | | | |
| a bool, | b int16, | | c.Data uintptr, | c.Len, | c.Cap int |
| cBLU | cPNK | | cGRE | cGRE | cGRE |
+---------+----------+-=--------------------------+-----------------+--------+-----------+
| | | | |
+---------+ argsize+32(FP)---=-+ | | |
: | | | |
| +-------------------------------------+ <-+ | | |
| | cGRE | | | :
| | c.Cap | | | |
| | 64bit | | | |
| +-------------------------------------+ <-=-|-=------------|---------+
| | cGRE | | | c.Cap+24(FP)
| | c.Len | | |
| | 64bit | | |
| +-------------------------------------+ <-=-|-=------------+c.Len+16(FP)
| | cGRE | |
| | c.Data | |
| | 64bit | |
| +----+----+--------+------------------+ <-=-+c.Data+8(FP)
| |cBLU|cAAA|cPNK |cAAA |
+----> | a | | b | |
|8bit|8bit| 16bit | 32bit |
+----+----+--------+------------------+ <--=-0(FP)
^ ^
| |
| +-=-b+2(FP)
|
+-=-a+0(FP)

Binary file not shown.

After

Width:  |  Height:  |  Size: 14 KiB

View File

@ -0,0 +1,25 @@
func Swap(a, b int) (int, int)
+------+------+-------------------------------------------------------+-----------------------+
| | | | |
| func | Swap | | (a, b int) (int, int) |
| cYEL | cGRE | cAAA | cRED |
+------+------+-------------------------------------------------------+-----------------------+
| | |
: : :
v v v
+------+-------+-------+-----------------------------+------------+---+-----------------------+
| | | | | | | |
| TEXT | ·Swap | (SB), | [NOSPLIT/WRAPPER/NEEDCTXT,] | $framesize | - | $32 |
| cYEL | cGRE | cGRE | cPNK | cRED | | cRED |
+------+-------+-------+-----------------------------+------------+---+-----------------------+
| | |
: : +-------------------------------=-+
| | |
v v v
+------+------------+------------+
| | | |
| TEXT | ·Swap(SB), | $framesize |
| cYEL | cGRE | cRED |
+------+------------+------------+

Binary file not shown.

After

Width:  |  Height:  |  Size: 18 KiB

View File

@ -0,0 +1,30 @@
func Swap(a, b int) (int, int)
+----------+
| |
| stack |
| cRED | call frame
+----------+ +-----------+ <-=-arg+argsize(FP)
| stack | <--------=- | argsize | <------------------------+argsize
| | | cPNK | :
|call frame| +-----------+ <-=-arg+0(FP) |
| | | | cAAA | |
| | | +-----------+ <-=-tmp-0(SP) |
|cRED| | <--------=- | framesize | <---------+framesize |
| v | | cRED | : |
+----------+ <-=-0(SP) +-----------+ <-=-0(SP) | |
| cAAA | | |
| unused | | |
| | | |
+----------+ | |
| cGRE | | |
| heap | | |
| | +------+------------+------------+---+------+
+----------+ | | | | | |
| cBLU | +-----=- | TEXT | ·Swap(SB), | $framesize | - | 32 |
| data | | | cYEL | cYEL | cRED | | cRED |
+----------+ | +------+------------+------------+---+------+
| cYEL | <--+TEXT |
| text | :
+----------+ <--------------------------+SB

Binary file not shown.

After

Width:  |  Height:  |  Size: 15 KiB

View File

@ -0,0 +1,30 @@
var num [2]int
+-------+------+-------------------------------+--------+-----------------+
| | | | | |
| var | num | | [2]int | // [2]int{0, 0} |
| cBLU | cGRE | cAAA | cRED | cGRE |
+-------+------+-------------------------------+--------+-----------------+
| | | |
| | NOPTR+---------------+ |
: : : : |
v v v v |
+-------+------+-------+-----------------------+--------+ |
| | | | | | |
| GLOBL | ·num | (SB), | [NOPTR|RODATA|DUPOK,] | $16 | |
| cBLU | cGRE | | | cRED | |
+-------+------+-------+-----------------------+--------+ |
| | | |
| | +-------------+--------------------+ |
| | | | +-------------------------+
: : : : :
v v v v v
+-------+--------------+---+------+-----+
| | | | | |
| DATA | ·num+0(SB) | / | 8, | $0 |
| cBLU | cYEL | | cRED |cRED |
+-------+--------------+---+------+-----+
| | | | | |
| DATA | ·num+8(SB) | / | 8, | $0 |
| cBLU | cYEL | | cRED |cRED |
+-------+--------------+---+------+-----+

Binary file not shown.

After

Width:  |  Height:  |  Size: 21 KiB

View File

@ -0,0 +1,37 @@
var num [2]int
+----------+
| |
| stack |
| cRED |
+----------+ +----------------+ +--------------------+
| cAAA | | cGRE | | cPNK |
| unused | | var num [2]int | -=------------> | unsafe.Sizeof(num) |
| | | | | |
+----------+ +----------------+ +--------------------+
| cAAA | | |
| heap | | |
| | | |
+----------+ | |
| cBLU | | |
| data | : |
| | v |
+----------+ +-------+--------------+---+------+-----+ |
| | | | | | | | |
|pkg·num[1]| <------=-- | DATA | ·num+8(SB) | / | 8, | $0 | |
| cBLU | | cBLU | cYEL | | cRED |cRED | |
+----------+ +-------+--------------+---+------+-----+ |
| | | | | | | | |
|pkg·num[0]| <------=-- | DATA | ·num+0(SB) | / | 8, | $0 | |
| cBLU | | cBLU | cYEL | | cRED |cRED | |
+----------+ <--+ +-------+--------------+---+------+-----+ |
| cBLU | | |
| data | +----------------=-+pkg·num :
| | | v
+----------+ +-------+------+-------+-----------------------+--------+
| cYEL | | | | | | |
| text | | GLOBL | ·num | (SB), | NOPTR, | $16 |
| | | cBLU | cYEL | cYEL | cPNK | cRED |
+----------+ <--+ +-------+------+-------+-----------------------+--------+
| |
+------------------------=-+SB

Binary file not shown.

After

Width:  |  Height:  |  Size: 27 KiB

View File

@ -0,0 +1,37 @@
var pt image.Point
+----------+
| |
| stack | +--------------------+ +-------------------+
| cRED | | cGRE | | cPNK |
+----------+ | var pt image.Point | -=--------> | unsafe.Sizeof(pt) |
| cAAA | | | | |
| unused | +--------------------+ +-------------------+
| | | |
+----------+ | |
| cAAA | | +=-unsafe.Offsetof(pt.Y) |
| heap | | +=-unsafe.Offsetof(pt.X) |
| | | | |
+----------+ | | unsafe.Sizeof(pt.Y) |
| cBLU | | | unsafe.Sizeof(pt.X) |
| data | : | | |
| | v v v |
+----------+ +-------+--------------+---+------+-----+ |
| | | | | | | | |
| pkg·pt.Y | <------=-- | DATA | ·pt+8(SB) | / | 8, | $0 | |
| cBLU | | cBLU | cYEL | | cRED |cRED | |
+----------+ +-------+--------------+---+------+-----+ |
| | | | | | | | |
| pkg·pt.X | <------=-- | DATA | ·pt+0(SB) | / | 8, | $0 | |
| cBLU | | cBLU | cYEL | | cRED |cRED | |
+----------+ <--+ +-------+--------------+---+------+-----+ |
| cBLU | | |
| data | +----------------=-+ :
| | pkg·pt | v
+----------+ +-------+------+-------+-----------------------+--------+
| cYEL | | | | | | |
| text | | GLOBL | ·pt | (SB), | NOPTR, | $16 |
| | | cBLU | cYEL | cYEL | cPNK | cRED |
+----------+ <--+ +-------+------+-------+-----------------------+--------+
| |
+------------------------=-+SB

Binary file not shown.

After

Width:  |  Height:  |  Size: 38 KiB