Δημιουργία κώδικα για συμβολοσειρές
Αντίθετα με ό,τι αναφέρθηκε στο εργαστήριο, ο κώδικας για τη
δημιουργία των συμβολοσειρών δεν είναι απαραίτητο να φτιαχτεί σε
δεύτερη φάση μεταγλώττισης.
Μπορεί μια συμβολοσειρά να περιληφθεί και μέσα στις εντολές του
υπόλοιπου κώδικα αρκεί να προβλεφθεί μια εντολή jmp για να
μην εκτελείται η συμβολοσειρά ως κώδικας.
Οι ετικέτες για τη συμβολοσειρά και τον προορισμό της jmp θα δημιουργούνται
από τη συνάρτηση new_label().
Παράδειγμα για την printf:
.globl main
.type main,@function
main:
pushl %ebp
movl %esp,%ebp
jmp .LC2 // Skip the string data
.LC0: // Label for the string data
.string "hello\n" // String data
.LC2: // Label for skipping
pushl $.LC0 // Push the address of the string data ...
call printf // ... for printf to print
addl $4,%esp
.L1:
leave
ret
Στο παραπάνω παράδειγμα φαίνεται και ότι ο συμβολομεταφραστής μπορεί
να χειριστεί τους κωδικούς διαφυγής όπως το \n χωρίς επέμβαση από
το μεταγλωττιστή.