diff doc/disas_examples/x86.plan9call.disas @ 327:c0390dc85a07

- doc: added disassembly examples for many platforms and calling conventions, for reference
author Tassilo Philipp
date Fri, 22 Nov 2019 23:08:59 +0100
parents
children 97fff5d9cea1
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/doc/disas_examples/x86.plan9call.disas	Fri Nov 22 23:08:59 2019 +0100
@@ -0,0 +1,64 @@
+; void leaf_call(int a, int b, int c, int d, int e, int f)
+; {
+; }
+; 
+; int nonleaf_call(int a, int b, int c, int d, int e, int f, int g)
+; {
+;   leaf_call(b,c,d,e,f,g);
+;   return 'x';
+; }
+; 
+; int main()
+; {
+;   nonleaf_call(0,1,2,3,4,5,6);
+;   return 0;
+; }
+
+
+
+; output from plan9-4th_edition-x86 w/ 8c x.c && 8l -a x.8
+
+001020                        (1) TEXT leaf_call+0(SB),$0
+001020    c3                  (3)       RET                         ,
+
+001021                        (5) TEXT nonleaf_call+0(SB),$28
+001021    83ec1c              (5)       SUBL                        $28,SP             ; prolog (note, there is no register save area at all)
+001024    8b442424            (7)       MOVL                        b+36(FP),AX        ; |
+001028    890424              (7)       MOVL                        AX,(SP)            ; |
+00102b    8b442428            (7)       MOVL                        c+40(FP),AX        ; |
+00102f    89442404            (7)       MOVL                        AX,4(SP)           ; |
+001033    8b44242c            (7)       MOVL                        d+44(FP),AX        ; |
+001037    89442408            (7)       MOVL                        AX,8(SP)           ; | fetch in args from prev frame's param area ...
+00103b    8b442430            (7)       MOVL                        e+48(FP),AX        ; | ... and "push" onto stack
+00103f    8944240c            (7)       MOVL                        AX,12(SP)          ; |
+001043    8b442434            (7)       MOVL                        f+52(FP),AX        ; |
+001047    89442410            (7)       MOVL                        AX,16(SP)          ; |
+00104b    8b442438            (7)       MOVL                        g+56(FP),AX        ; |
+00104f    89442414            (7)       MOVL                        AX,20(SP)          ; |
+001053    e8c8ffffff          (7)       CALL                        ,1020+leaf_call    ; push return addrss and call
+001058    b878000000          (8)       MOVL                        $120,AX            ; return value: 'x' -> eax
+00105d    83c41c              (8)       ADDL                        $28,SP             ; |
+001060    c3                  (8)       RET                         ,                  ; | epilog
+
+001061                        (11) TEXT main+0(SB),$32
+001061    83ec20              (11)      SUBL                        $32,SP             ; prolog (note, there is no register save area at all)
+001064    c7042400000000      (13)      MOVL                        $0,(SP)            ; arg 0 -> "push" onto stack
+00106b    b801000000          (13)      MOVL                        $1,AX              ; arg 1 -> eax, then ...
+001070    89442404            (13)      MOVL                        AX,4(SP)           ; ... "pushed" onto stack
+001074    b802000000          (13)      MOVL                        $2,AX              ; arg 2 -> eax, then ...
+001079    89442408            (13)      MOVL                        AX,8(SP)           ; ... "pushed" onto stack
+00107d    b803000000          (13)      MOVL                        $3,AX              ;    .
+001082    8944240c            (13)      MOVL                        AX,12(SP)          ;    .
+001086    b804000000          (13)      MOVL                        $4,AX              ;    .
+00108b    89442410            (13)      MOVL                        AX,16(SP)          ;    .
+00108f    b805000000          (13)      MOVL                        $5,AX              ;    .
+001094    89442414            (13)      MOVL                        AX,20(SP)          ;    .
+001098    b806000000          (13)      MOVL                        $6,AX              ; arg 6 -> eax, then ...
+00109d    89442418            (13)      MOVL                        AX,24(SP)          ; ... "pushed" onto stack
+0010a1    e87bffffff          (13)      CALL                        ,1021+nonleaf_call ; push return addrss and call
+0010a6    31c0                (14)      MOVL                        $0,AX              ; return value
+0010a8    83c420              (14)      ADDL                        $32,SP             ; |
+0010ab    c3                  (14)      RET                         ,                  ; | epilog
+
+; vim: ft=asm
+