کامپایل مجدد پویا
مثال

فرض کنید یک برنامه در یک شبیه‌ساز در حال اجرا است و نیاز به کپی کردن یک رشته منتهی به تهی دارد. این برنامه در اصل برای یک پردازنده بسیار ساده کامپایل شده‌است. این پردازنده فقط می‌تواند یک بایت را به طور همزمان کپی کند و باید این کار را ابتدا با خواندن آن از رشته مبدا به یک ثبات انجام دهد، سپس آن را از آن ثبات به رشته مقصد بنویسد. برنامه اصلی ممکن است چیزی شبیه به این باشد:
beginning:
    mov A,[first string pointer]    ; Put location of first character of source string
                                    ; in register A
    mov B,[second string pointer]   ; Put location of first character of destination string
                                    ; in register B
loop:
    mov C,[A]            ; Copy byte at address in register A to register C
    mov [B],C            ; Copy byte in register C to the address in register B
    inc A                ; Increment the address in register A to point to
                         ; the next byte
    inc B                ; Increment the address in register B to point to
                         ; the next byte
    cmp C,#0             ; Compare the data we just copied to 0 (string end marker)
     jnz loop            ; If it wasn't 0 then we have more to copy, so go back
                         ; and copy the next byte
end:                     ; If we didn't loop then we must have finished,
                         ; so carry on with something else.
شبیه‌ساز ممکن است روی یک پردازنده اجرا شود که در کپی کردن رشته‌ها بسیار خوب عمل می‌کند و شبیه‌ساز می‌تواند از این مزیت استفاده کند. شبیه‌ساز ممکن است دنباله‌ای از دستورالعمل‌ها جهت کپی رشته را تشخیص دهد و تصمیم بگیرد که آنها را درست قبل از اجرا با کارایی بیشتر بازنویسی کند تا سرعت بیشتری در شبیه‌سازی ایجاد کند.
دستورالعملی در پردازنده جدید ما بنام movs وجود دارد که به‌طور خاص برای کپی کردن رشته‌ها به‌طور کارآمد طراحی شده‌است. دستورالعمل‌های تئوریک ما ۱۶ بایت را به‌طور همزمان کپی می‌کند، بدون اینکه آنها را در یک ثبات به نام C در بین آنها بارگیری کنیم، اما در صورت کپی کردن ۰ بایت (که نشانگر پایان یک رشته‌است) متوقف می‌شود و پرچم صفر را تنظیم می‌کند. همچنین می‌داند که آدرس رشته‌ها در ثبات‌های A و B قرار خواهد گرفت، بنابراین هر بار که اجرا شود، A و B را ۱۶ بار افزایش می‌دهد، برای عملیات بعدی آماده است.
کد جدید باز کامپایل شده ما ممکن است چیزی شبیه به این باشد:
beginning:
    mov A,[first string pointer]    ; Put location of first character of source string
                                    ; in register A
    mov B,[second string pointer]   ; Put location of first character of destination string
                                    ; in register B
loop:
    movs [B],[A]            ; Copy 16 bytes at address in register A to address
                            ; in register B, then increment A and B by 16
     jnz loop               ; If the zero flag isn't set then we haven't reached
                            ; the end of the string, so go back and copy some more.
end:                        ; If we didn't loop then we must have finished,
                            ; so carry on with something else.
فواید افزایش سرعت کاملاً محسوس است زیرا پردازنده لازم نیست دستورالعمل‌های زیادی را برای انجام همان کار بارگذاری کند، همچنین دستورالعمل movs احتمالاً توسط طراح پردازنده بهینه می‌شود تا از دنباله دستورالعمل‌های استفاده شده در مثال اول بهینه تر عمل کند. به عنوان مثال، ممکن است در پردازنده، برای افزایش A و B استفاده از پردازش موازی بهتر عمل کند، در حالی که هنوز هم بایت را کپی می‌کند.