Interprétation d'une liste d'assembleur
L'indicateur -l de la commande as génère une liste d'un fichier de langage assembleur.
L'indicateur -l de la commande as génère une liste d'un fichier de langage assembleur.
main ( )
{
printf ("hello, world\n");
}
as -l hello.s
hello.s V4.0 01/25/1994
File# Line# Mode Name Loc Ctr Object Code Source
0 1 | #############################
0 2 | # C source code
0 3 | #############################
0 4 | # hello()
0 5 | # {
0 6 | # printf("hello,world\n");
0 7 | # }
0 8 | #############################
0 9 | # Compile as follows:
0 10 | # cc -o helloworld hello.s
0 11 | #
0 12 | #############################
0 13 | .file "hello.s"
0 14 | #Static data entry in
0 15 | #T(able)O(f)C(ontents)
0 16 | .toc
0 17 | COM data 00000000 00000040 T.data: .tc data[tc],data[rw]
0 18 | .globl main[ds]
0 19 | #main[ds] contains definitions for
0 20 | #runtime linkage of function main
0 21 | .csect main[ds]
0 22 | COM main 00000000 00000000 .long .main[PR]
0 23 | COM main 00000004 00000050 .long TOC[tc0]
0 24 | COM main 00000008 00000000 .long 0
0 25 | #Function entry in
0 26 | #T(able)O(f)C(ontents)
0 27 | .toc
0 28 | COM .main 00000000 00000034 T.hello: .tc .main[tc],main[ds]
0 29 | .globl .main[PR]
0 30 |
0 31 | #Set routine stack variables
0 32 | #Values are specific to
0 33 | #the current routine and can
0 34 | #vary from routine to routine
0 35 | 00000020 .set argarea, 32
0 36 | 00000018 .set linkarea, 24
0 37 | 00000000 .set locstckarea, 0
0 38 | 00000001 .set ngprs, 1
0 39 | 00000000 .set nfprs, 0
0 40 | 0000003c .set szdsa, 8*nfprs+4*ngprs+linkarea+
argarea+locstckarea
0 41 |
0 42 | #Main routine
0 43 | .csect .main[PR]
0 44 |
0 45 |
0 46 | #PROLOG: Called Routines
0 47 | # Responsibilities
0 48 | #Get link reg.
0 49 | COM .main 00000000 7c0802a6 mflr 0
0 50 | #Not required to Get/Save CR
0 51 | #because current routine does
0 52 | #not alter it.
0 53 |
0 54 | #Not required to Save FPR's
0 55 | #14-31 because current routine
0 56 | #does not alter them.
0 57 |
0 58 | #Save GPR 31.
0 59 | COM .main 00000004 bfe1fffc stm 31, -8*nfprs-4*ngprs(1)
0 60 | #Save LR if non-leaf routine.
0 61 | COM .main 00000008 90010008 st 0, 8(1)
0 62 | #Decrement stack ptr and save
0 63 | #back chain.
0 64 | COM .main 0000000c 9421ffc4 stu 1, -szdsa(1)
0 65 |
0 66 |
0 67 | #Program body
0 68 | #Load static data address
0 69 | COM .main 00000010 81c20000 l 14,T.data(2)
0 70 | #Line 3, file hello.c
0 71 | #Load address of data string
0 72 | #from data addr.
0 73 | #This is a parameter to printf()
0 74 | COM .main 00000014 386e0000 cal 3,_helloworld(14)
0 75 | #Call printf function
0 76 | COM .main 00000018 4bffffe9 bl .printf[PR]
0 77 | COM .main 0000001c 4def7b82 cror 15, 15, 15
0 78 |
0 79 |
0 80 | #EPILOG: Return Sequence
0 81 | #Get saved LR.
0 82 | COM .main 00000020 80010044 l 0, szdsa+8(1)
0 83 |
0 84 | #Routine did not save CR.
0 85 | #Restore of CR not necessary.
0 86 |
0 87 | #Restore stack ptr
0 88 | COM .main 00000024 3021003c ai 1, 1, szdsa
0 89 | #Restore GPR 31.
0 90 | COM .main 00000028 bbe1fffc lm 31, -8*nfprs-4*ngprs(1)
0 91 |
0 92 | #Routine did not save FPR's.
0 93 | #Restore of FPR's not necessary.
0 94 |
0 95 | #Move return address
0 96 | #to Link Register.
0 97 | COM .main 0000002c 7c0803a6 mtlr0
0 98 | #Return to address
0 99 | #held in Link Register.
0 100 | COM .main 00000030 4e800021 brl
0 101 |
0 102 |
0 103 | #External variables
0 104 | .extern.printf[PR]
0 105 |
0 106 | ##############################
0 107 | #Data
0 108 | ##############################
0 109 | #String data placed in
0 110 | #static csect data[rw]
0 111 | .csect data[rw]
0 112 | .align2
0 113 | _helloworld:
0 114 | COM data 00000000 68656c6c .byte 0x68,0x65,0x6c,0x6c
0 115 | COM data 00000004 6f2c776f .byte 0x6f,0x2c,0x77,0x6f
0 116 | COM data 00000008 726c640a .byte 0x72,0x6c,0x64,0xa,0x0
| COM data 0000000c 00
La première ligne de la liste de l'assembleur fournit deux informations:
- Nom du fichier source (dans ce cas, hello.s)
- Date de création du fichier de listage
La liste de l'assembleur contient plusieurs colonnes. Les en-têtes de colonne sont les suivants:
| Article | Descriptif |
|---|---|
| File# | Répertorie le numéro de fichier source. Les fichiers inclus avec le processeur de macros M4 (option-l ) sont affichés par le numéro du fichier dans lequel l'instruction a été trouvée. |
| Line# | Fait référence au numéro de ligne du code source assembleur. |
| Mode | Indique le mode d'assemblage en cours pour cette instruction. |
| Name | Répertorie le nom de l'élément csect d'où provient cette ligne de code source. |
| Loc Ctr | Répertorie la valeur contenue dans le compteur d'emplacement de l'assembleur. La liste affiche une valeur de compteur d'emplacement uniquement pour les instructions de langage assembleur qui génèrent du code objet. |
| Object Code | Affiche la représentation hexadécimale du code objet généré par chaque ligne du programme assembleur. Chaque instruction étant de 32 bits, chaque ligne de la liste de l'assembleur affiche un maximum de 4 octets. Tous les octets restants d'une ligne de code source assembleur sont affichés sur la ou les lignes suivantes. Remarque: Si la deuxième étape échoue, la liste de l'assembleur ne contient pas de code objet.
|
| Source | Répertorie le code source assembleur du programme. Une limite de 100 caractères ASCII sera affichée par ligne. |
Si l'option -s est utilisée sur la ligne de commande, la liste de l'assembleur contient des informations de références croisées mnémoniques.
Si le mode d'assemblage se trouve dans la catégorie PowerPC® (com, ppcou 601), un en-tête de colonne est PowerPC®. Cette colonne contient la mnémonique PowerPC® pour chaque instance où la mnémonique de la famille POWER ® est utilisée dans le programme source. Le mode d'assemblage any n'appartient à aucune catégorie, mais il est traité comme dans la catégorie PowerPC® .
Si le mode d'assemblage se trouve dans la catégorie POWER ® family (pwr ou pwr2), un en-tête de colonne est POWER ® family. Cette colonne contient la mnémonique de la famille POWER ® pour chaque instance où la mnémonique PowerPC® est utilisée dans le programme source.
L_dfmt_1.s V4.0 01/26/1994
File# Line# Mode Name Loc Ctr Object Code PowerPC Source
0 1 |
0 2 | #%% -L
0 3 | machine "com"
0 4 | csect dfmt[PR]
0 5 | using data,5
0 6 | COM dfmt 00000000 8025000c lwz l1,d1 # 8025000c
0 7 | COM dfmt 00000004 b8c50018 lmw lm 6,d0 # b8650018
0 8 | COM dfmt 00000008 b0e50040 sth 7,d8 # b0e50040
0 9 | COM dfmt 0000000c 80230020 lwz l 1,0x20(3) # 80230020
0 10 | COM dfmt 00000010 30220003 addic ai 1,2,3 # 30220003
0 11 | COM dfmt 00000014 0cd78300 twi ti 6,23,-32000 # 0cd78300
0 12 | COM dfmt 00000018 2c070af0 cmpi 0,7,2800 # 2c070af0
0 13 | COM dfmt 0000001c 2c070af0 cmpi 0,0,7,2800 # 2c070af0
0 14 | COM dfmt 00000020 30220003 subic si 1,2,-3 # 30220003
0 15 | COM dfmt 00000024 34220003 subic. si. 1,2,-3 # 34220003
0 16 | COM dfmt 00000028 703e00ff andi. andil.30,1,0xFF # 703e00ff
0 17 | COM dfmt 0000002c 2b9401f4 cmpli 7,20,500 # 2b9401f4
0 18 | COM dfmt 00000030 0c2501a4 twlgti tlgti 5,420 # 0c2501a4
0 19 | COM dfmt 00000034 34220003 addic. ai. 1,2,3 # 34220003
0 20 | COM dfmt 00000038 2c9ff380 cmpi 1,31,-3200 # 2c9ff380
0 21 | COM dfmt 0000003c 281f0c80 cmpli 0,31,3200 # 281f0c80
0 22 | COM dfmt 00000040 8ba5000c lbz 29,d1 # 8ba5000c
0 23 | COM dfmt 00000044 85e5000c lwzu lu 15,d1 # 85e5000c
0 24 | COM dfmt 00000048 1df5fec0 mulli muli 15,21,-320 # 1df5fec0
0 25 | COM dfmt 0000004c 62af0140 ori oril 15,21,320 # 62af0140
0 26 | COM dfmt 00000050 91e5000c stw st 15,d1 # 91e5000c
0 27 | COM dfmt 00000054 bde5000c stmw stm 15,d1 # bde5000c
0 28 | COM dfmt 00000058 95e5000c stwu stu 15,d1 # 95e5000c
0 29 | COM dfmt 0000005c 69ef0960 xori xoril 15,15,2400 # 69ef0960
0 30 | COM dfmt 00000060 6d8c0960 xoris xoriu 12,12,2400 # 6d8c0960
0 31 | COM dfmt 00000064 3a9eff38 addi 20,30,-200 # 3a9eff38
0 32 |
0 33 | .csect also[RW]
0 34 | data:
0 35 | COM also 00000000 00000000 .long 0,0,0
| 00000004 ....
| COM also 00000008 00000000
0 36 | COM also 0000000c 00000003 d1:.long 3,4,5 # d1 = 0xC = 12
| COM also 00000010 00000004
| COM also 00000014 00000005
0 37 | COM also 00000018 00000068 d0: .long data # d0 = 0x18 = 24
0 38 | COM also 0000001c 00000000 data2: .space 36
| 00000020 ....
| COM also 0000003c 000000000
39 | COM also 00000040 000023e0 d8: .long 9184 # d8 = 0x40 = 64
0 40 | COM also 00000044 ffffffff d9: .long 0xFFFFFFFF # d9 = 0x44
0 41 | #
0 42 | # 0000 00000000 00000000 00000000 00000003
0 43 | # 0010 00000004 00000005 0000000C 00000000
0 44 | # 0020 00000000 00000000 00000000 00000000
0 45 | # 0030 000023E0
L_dfmt_2.s V4.0 01/26/1994
File# Line# Mode Name Loc Ctr Object Code POWER Source
0 1 | #%% -L
0 2 | .machine "pwr"
0 3 | .csect dfmt[PR]
0 4 | .using data,5
0 5 | PWR dfmt 00000000 8025000c l lwz 1,d1
0 6 | PWR dfmt 00000004 b8650018 lm lmw 3,d0
0 7 | PWR dfmt 00000008 b0e50040 sth 7,d8
0 8 | PWR dfmt 0000000c 80230020 l lwz 1,0x20(3)
0 9 | PWR dfmt 00000010 30220003 ai addic 1,2,3
0 10 | PWR dfmt 00000014 0cd78300 ti twi 6,23,-32000
0 11 | PWR dfmt 00000018 2c070af0 cmpi 0,7,2800
0 12 | PWR dfmt 0000001c 2c070af0 cmpi 0,0,7,2800
0 13 | PWR dfmt 00000020 30220003 si subic 1,2,-3
0 14 | PWR dfmt 00000024 34220003 si. subic. 1,2,-3
0 15 | PWR dfmt 00000028 703e00ff andil. andi. 30,1,0xFF
0 16 | PWR dfmt 0000002c 2b9401f4 cmpli 7,20,500
0 17 | PWR dfmt 00000030 0c2501a4 tlgti twlgti 5,420
0 18 | PWR dfmt 00000034 34220003 ai. addic. 1,2,3
0 19 | PWR dfmt 00000038 2c9ff380 cmpi 1,31,-3200
0 20 | PWR dfmt 0000003c 281f0c80 cmpli 0,31,3200
0 21 | PWR dfmt 00000040 8ba5000c lbz 29,d1
0 22 | PWR dfmt 00000044 85e5000c lu lwzu 15,d1
0 23 | PWR dfmt 00000048 1df5fec0 muli mulli 15,21,-320
0 24 | PWR dfmt 0000004c 62af0140 oril ori 15,21,320
0 25 | PWR dfmt 00000050 91e5000c st stw 15,d1
0 26 | PWR dfmt 00000054 bde5000c stm stmw 15,d1
0 27 | PWR dfmt 00000058 95e5000c stu stwu 15,d1
0 28 | PWR dfmt 0000005c 69ef0960 xoril xori 15,15,2400
0 29 | PWR dfmt 00000060 6d8c0960 xoriu xoris 12,12,2400
0 30 | PWR dfmt 00000064 3a9eff38 addi 20,30,-200
0 31 |
0 32 |
0 33 | .csect also[RW]
0 34 | data:
0 35 | PWR also 00000000 00000000 .long 0,0,0
| 00000004 ....
| PWR also 00000008 00000000
0 36 | PWR also 0000000c 00000003 d1: long 3,4,5
| PWR also 00000010 00000004 # d1 = 0xc = 12
| PWR also 00000014 00000005
0 37 | PWR also 00000018 00000068 d0: long data # d0 = 0x18 = 24
0 38 | PWR also 0000001c 00000000 data2: space 36
| 00000020 ....
| PWR also 0000003c 00000000
0 39 | PWR also 00000040 000023e0 d8: long 9184 # d8 = 0x40 = 64
0 40 | PWR also 00000044 ffffffff d9: long 0xFFFFFFFF # d9 = 0x44
0 41 | #
0 42 | # 0000 00000000 00000000 00000000 00000003
0 43 | # 0010 00000004 00000005 0000000C 00000000
0 44 | # 0020 00000000 00000000 00000000 00000000
0 45 | # 0030 000023E0