mirror of
https://github.com/cc65/cc65.git
synced 2024-07-05 21:29:03 +00:00
More .sizeof explanations
git-svn-id: svn://svn.cc65.org/cc65/trunk@2721 b7a2c559-68d2-44c3-8de9-860c34a00d81
This commit is contained in:
parent
87857eced3
commit
855fdbfcb0
@ -2625,7 +2625,7 @@ Here's a list of all control commands and a description, what they do:
|
|||||||
of a name represents both, a scope and a symbol, the scope is choosen over the
|
of a name represents both, a scope and a symbol, the scope is choosen over the
|
||||||
symbol.
|
symbol.
|
||||||
|
|
||||||
Usage examples:
|
After the following code:
|
||||||
|
|
||||||
<tscreen><verb>
|
<tscreen><verb>
|
||||||
.struct Point ; Struct size = 4
|
.struct Point ; Struct size = 4
|
||||||
@ -2634,26 +2634,55 @@ Here's a list of all control commands and a description, what they do:
|
|||||||
.endstruct
|
.endstruct
|
||||||
|
|
||||||
P: .tag Point ; Declare a point
|
P: .tag Point ; Declare a point
|
||||||
|
@P: .tag Point ; Declare another point
|
||||||
|
|
||||||
.code
|
.code
|
||||||
.proc Code ; 3 bytes
|
.proc Code
|
||||||
nop
|
|
||||||
nop
|
nop
|
||||||
|
.proc Inner
|
||||||
|
nop
|
||||||
|
.endproc
|
||||||
nop
|
nop
|
||||||
.endproc
|
.endproc
|
||||||
|
|
||||||
.proc Data ; 4 bytes
|
.proc Data
|
||||||
.data ; Segment switch!!!
|
.data ; Segment switch!!!
|
||||||
.res 4
|
.res 4
|
||||||
.endproc
|
.endproc
|
||||||
|
|
||||||
lda #.sizeof(Point) ; Loads 4
|
|
||||||
lda #.sizeof(Point::xcoord) ; Loads 2
|
|
||||||
lda #.sizeof(P) ; Loads 4
|
|
||||||
lda #.sizeof(Code) ; Loads 3
|
|
||||||
lda #.sizeof(Data) ; Loads 0
|
|
||||||
</verb></tscreen>
|
</verb></tscreen>
|
||||||
|
|
||||||
|
<descrip>
|
||||||
|
<tag><tt/.sizeof(Point)/</tag>
|
||||||
|
will have the value 4, because this is the size of struct <tt/Point/.
|
||||||
|
|
||||||
|
<tag><tt/.sizeof(Point::xcoord)/</tag>
|
||||||
|
will have the value 2, because this is the size of the member <tt/xcoord/
|
||||||
|
in struct <tt/Point/.
|
||||||
|
|
||||||
|
<tag><tt/.sizeof(P)/</tag>
|
||||||
|
will have the value 4, this is the size of the data declared on the same
|
||||||
|
source line as the label <tt/P/, which is in the same segment that <tt/P/
|
||||||
|
is relative to.
|
||||||
|
|
||||||
|
<tag><tt/.sizeof(@P)/</tag>
|
||||||
|
will have the value 4, see above. The example demonstrates that <tt/.SIZEOF/
|
||||||
|
does also work for cheap local symbols.
|
||||||
|
|
||||||
|
<tag><tt/.sizeof(Code)/</tag>
|
||||||
|
will have the value 3, since this is amount of data emitted into the code
|
||||||
|
segment, the segment that was active when <tt/Code/ was entered. Note that
|
||||||
|
this value includes the amount of data emitted in child scopes (in this
|
||||||
|
case <tt/Code::Inner/).
|
||||||
|
|
||||||
|
<tag><tt/.sizeof(Code::Inner)/</tag>
|
||||||
|
will have the value 1 as expected.
|
||||||
|
|
||||||
|
<tag><tt/.sizeof(Data)/</tag>
|
||||||
|
will have the value 0. Data is emitted within the scope <tt/Data/, but since
|
||||||
|
the segment is switched after entry, this data is emitted into another
|
||||||
|
segment.
|
||||||
|
</descrip>
|
||||||
|
|
||||||
|
|
||||||
<sect1><tt>.SMART</tt><label id=".SMART"><p>
|
<sect1><tt>.SMART</tt><label id=".SMART"><p>
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user