Assembler Directives and
.CALL Directive
;This program calls printf() with four arguments
;whose register locations are described in the .CALL directive.
;The format string goes into arg0, not to be relocated.
;The string “message” goes into arg1, specified as a general register.
;The
;specified as a
;The hexadecimal number 0xf00d goes into arg3,
;specified as a general register.
;The return value from printf() is not to be relocated.
| .LIT |
|
|
|
|
| .ALIGN | 8 |
|
|
|
| .WORD | 1197387154 |
| ; | |
| .BLOCKZ | 12 |
|
|
|
fp2 | .WORD | 0 |
|
|
|
main | .CODE |
|
|
|
|
.PROC |
|
|
|
| |
|
|
|
|
| |
| .CALLINFO CALLER,FRAME=24,SAVE_RP |
| |||
| .ENTER |
|
|
|
|
| LDIL | L’fp2,%r1 |
|
|
|
| LDO | R’fp2(1),%r31 | ; r31 < - | ||
| FLDWS |
|
| ||
| LDO |
|
| ||
| FSTWS | %fr4,0(%r19) |
|
| |
| ADDIL | L’61453,0 |
|
|
|
| LDO | R’61453(%r1),%r20 |
| ||
| STW | ; end of stacking | |||
| ADDIL |
| |||
| LDO | ; point to “message” | |||
| STW | ; stack “message” address | |||
| LDO |
|
| ||
| FLDWS | 0(%r22),%fr5 |
|
| |
| FCNVFF,SGL,DBL | %fr5,%fr6 ; convert | |||
| ADDIL |
| |||
| LDO |
| |||
|
|
|
| ;point to format string | |
| LDW | ; load “message” argument | |||
| FSTDS |
|
| ||
| FLDWS | ; load | |||
| LDWS | ; load hexadecimal argument | |||
| LDW |
|
| ||
| STW |
|
| ||
| .CALL | argw0=no,argw1=gr,argw2=fr,argw3=gr,rtnval=no | |||
| BL | printf,2 |
|
|
|
| NOP |
|
|
|
|
| .LEAVE |
|
|
|
|
Chapter 4 | 65 |