NOP (İngilizce: no operation, "işlem yok"; boş işlem olarak da bilinir), yürütüldüğünde program sayacının ilerlemesi dışında işlemcinin durumunu değiştirmeyen, hiçbir iş yapmayan bir makine buyruğudur.:Cilt 2B: 4-160:27 NOP; buyrukları bellekte hizalamak, zamanlama amacıyla gecikme eklemek, boru hattındaki gecikme yuvalarını doldurmak ya da kod yamalamada bir buyruğu etkisizleştirmek için kullanılır.:312:2-60
Birçok buyruk kümesinde NOP ayrı bir işlem değildir, sonucu hiçbir şeyi değiştirmeyen sıradan bir buyruğun belirli bir kodlamasıdır. NOP, x86'da XCHG (E)AX, (E)AX buyruğunun, MIPS'te SLL r0, r0, 0 buyruğunun, RISC-V'te ADDI x0, x0, 0 buyruğunun, SPARC'ta alanları sıfır olan bir SETHI buyruğunun, Power ISA'da ise ORI 0,0,0 buyruğunun karşılığıdır.:Cilt 2B: 4-160:312:27:105:99 Bu yüzden bir mimaride boş işlem gibi davranan pek çok kodlama olabilir; RISC-V belirtimi bunlardan birini kurallı NOP olarak tanımlar ve kalan kodlamaları ipucu buyruklarına ayırır.:28 Yüksek düzeyli programlama dillerinde de çalıştırıldığında hiçbir işlem yapmayan deyimler vardır; C'deki boş deyim ve Python'daki pass deyimi bunlara örnektir.:147
NOP'un anımsatıcısı, uzunluğu ve kodlaması buyruk kümesine göre değişmektedir. Çizelgedeki kodlamalar on altılık tabanda yazılmıştır.
| Mimari | Anımsatıcı | Kodlama | Notlar |
|---|---|---|---|
| x86 | NOP | 90 | XCHG (E)AX, (E)AX buyruğunun takma adıdır; REX.W dahil hiçbir veri boyu öneki bunu değiştirmez.:Cilt 2B: 4-160; Cilt 2D: 6-32 |
| x86 (çok baytlı) | NOP r/m16, NOP r/m32 | 0F 1F /0 | Yalnızca aile kodu 6 ya da 15 olan işlemcilerde vardır; desteklemeyen işlemcide tanımsız işlem kodu kural dışı durumu doğurur.:Cilt 2B: 4-160 |
| x87 kayan nokta birimi | FNOP | D9 D0 | Kayan nokta biriminin durumunu etkilemez.:Cilt 2A: 3-363 |
| ARM (A32) | NOP | E320F000 | Koşul alanı 1110 (her zaman) iken; ARMv6K ve ARMv6T2 ile tanımlanmıştır.:A8-286, A8-511, D8-2460 |
| ARM (Thumb) | NOP | BF00 ya da F3AF 8000 | 16 ve 32 bitlik iki kodlaması vardır.:A8-511 |
| ARM (A64) | NOP | D503201F | HINT buyruk alanının ilk kodlamasıdır.:C6-2215, C6-2483 |
| RISC-V | NOP | 00000013 | ADDI x0, x0, 0 kodlamasıdır.:27, 554 |
| RISC-V (sıkıştırılmış) | C.NOP | 0001 | 16 bitlik biçim, NOP'a açılır.:149 |
| MIPS | NOP | 00000000 | SLL r0, r0, 0; sıfır sözcük.:312 |
| SPARC V8 | NOP | 01000000 | imm22 ve rd alanları sıfır olan SETHI.:105 |
| Power ISA | nop | 60000000 | ORI 0,0,0; yeğlenen biçimdir.:99 |
| IBM System/360 | NOPR, NOP | 07 (BCR), 47 (BC) | Maske alanı sıfır olan koşula bağlı dallanma; anımsatıcılar çeviricinin genişletilmiş anımsatıcılarıdır.:63, 64:33 |
| Motorola 68000 | NOP | 4E71 | Bekleyen veriyolu çevrimleri bitmeden yürütülmeye başlamaz.:4-147 |
| MOS 6502 | NOP | EA | Bir bayt, iki çevrim.:B-19 |
| Zilog Z80 | NOP | 00 | Bir makine çevrimi, dört T çevrimi.:180 |
| Intel 8051 | NOP | 00 | Bir bayt, bir çevrim.:2-60 |
| AVR | NOP | 0000 | Tek çevrimde yürütülür.:102 |

Tek baytlık NOP işlem kodu 90'dır ve aslında XCHG EAX, EAX (EAX yazmacını kendisiyle değiştir) buyruğunun eşdeğeridir; sonuç değişmediğinden etkin bir boş işlem oluşturur.:Cilt 2B: 4-160; Cilt 2D: 6-32 AMD'nin el kitabı da tek baytlık biçimi XCHG rAX, rAX buyruğunun takma adı olarak verir ve 0F 1F /0 biçimini 16, 32 ve 64 bitlik yazmaç ya da bellek işleneniyle tanımlar.:262 Intel'e göre çok baytlı biçim, bellek işlenenli olmasına karşın hiçbir yazmacın içeriğini değiştirmez ve bellek işlemi başlatmaz.:Cilt 2B: 4-160
Standart NOP, addi x0, x0, 0 buyruğuyla ifade edilir; x0 yazmacı her zaman sıfır tuttuğundan toplama işlemi hiçbir yan etki bırakmaz.:21, 27 Belirtim bu kurallı kodlamayı, mikromimari iyileştirmelere olanak vermek ve makine kodundan geri çevrilen çevirici dil çıktısını okunur kılmak için tanımlar. ADDI'nin seçilme nedeni, tek yazmaç okuyan bu buyruğun pek çok gerçekleştirimde en az kaynakla yürütülebilmesidir.:28 Sıkıştırılmış buyruk eklentisindeki C.NOP, 16 bitlik bir NOP'tur.:149
32 bitlik ARM kümesinde NOP'un ayrı bir kodlaması ARMv6K ve ARMv6T2 ile tanımlanmıştır. Daha eski ARM çevirici sözdiziminde NOP, ARM kümesinde MOV R0, R0, Thumb kümesinde MOV R8, R8 buyruğuna çevrilen bir sözde buyruktu.:A8-511, D8-2460 64 bitlik A64 kümesinde NOP, program sayacını 4 artırmaktan başka iş yapmaz ve HINT buyruk alanının ilk kodlamasıdır.:C6-2215, C6-2483
IBM System/360'ta boş işlem, koşula bağlı dallanma buyruğunun özel bir biçimiyle elde edilir. Bu buyruğun dört bitlik maskesi sıfır olduğunda ya da RR biçiminde R2 alanı sıfır içerdiğinde buyruk boş işleme denk düşer.:63, 64 Çevirici bunun için NOP ve NOPR genişletilmiş anımsatıcılarını sağlar; bunlar sırasıyla BC 0,D2(X2,B2) ve BCR 0,R2 buyruklarına çevrilir.:33 Motorola 68000 ailesinde NOP, program sayacı dışında işlemcinin durumunu değiştirmez; ancak bekleyen bütün veriyolu çevrimleri tamamlanana dek yürütülmeye başlamaz. Böylece boru hattını eşzamanlar ve buyrukların örtüşmesini önler.:4-147

Derleyiciler ve çeviriciler, bir buyruğun belirli bir adres sınırından başlaması gerektiğinde araya NOP koyar.:3-27:56 AMD'nin Family 17h iyileştirme kılavuzuna göre döngüler genellikle önlerine NOP eklenerek hizalanır ve bu dolguyu çok sayıda kısa NOP yerine az sayıda uzun NOP ile kodlamak daha az maliyetlidir.:29, 30 MIPS el kitabı sıfır sözcüğü hizalama dizilerini doldurmak için yeğlenen NOP olarak gösterir.:312 RISC-V belirtimi de NOP'ların kod parçalarını mikromimari açıdan önemli adres sınırlarına hizalamak için kullanılabileceğini yazar.:28
IBM System/360 çeviricisinde de hizalama için boş işlem üreten bir yönerge vardı. CNOP (koşullu boş işlem) yönergesi, bir buyruğu yarım sözcük, sözcük ya da çift sözcük sınırına hizalar. Konum sayacı zaten hizalıysa CNOP etkisiz kalır; değilse çevirici her biri iki bayt tutan bir ile üç arasında boş işlem buyruğu üretir. Böylece buyruk akışı kesintiye uğramaz.:56, 57
Intel'in iyileştirme el kitabına göre kod çözülmüş buyruk önbelleğine 32 baytlık hizalı bir öbekten en çok üç koşulsuz dallanma girebilir. Bu nedenle el kitabı, koşulsuz dallanmaların sık dizildiği atlama tablolarında dallanmaların arasına çok baytlı NOP koymayı önermektedir. Bu NOP'lar yürütülmediğinden boru hattının sonraki aşamalarında bir bedel doğurmaz; ancak kod boyunu büyüttüğü için dikkatli kullanılmaları gerekir.:3-19
Geciktirilmiş dallanma kullanan mimarilerde dallanma buyruğundan hemen sonra gelen buyruk, denetim hedefe geçmeden önce yürütülür. SPARC'ta bu buyruğa gecikme buyruğu denir; gecikme buyruğu koşulsuz dallanmada bile her zaman getirilir, ancak dallanma buyruğundaki bir bit onu etkisiz bırakabilir.:12, 32 MIPS'te de gecikme yuvasındaki buyruk, hedefteki buyruktan önce yürütülür.:54 Bu yuvaya yerleştirilebilecek yararlı bir buyruk yoksa NOP konur; MIPS el kitabı dallanma ve atlama gecikme yuvalarını doldurmak için sıfır sözcüğü yeğlenen NOP olarak gösterir.:312 MIPS'in 6. sürümü gecikme yuvası olmayan dallanma buyrukları da getirmiştir; bunlarda dallanma gerçekleştiğinde ardındaki buyruk yürütülmez.:52
Yürütme süresi sabit olan basit işlemcilerde NOP dizileri kısa ve kesin gecikmeler üretmek için kullanılabilir.:2-60 Intel'in MCS-51 el kitabı, 2. kapının 7. bitinde tam beş çevrim süren düşük düzeyli bir darbe üretmek için CLR ile SETB buyrukları arasına dört NOP konmasını örnek gösterir; bu örnek kesmelerin kapalı olduğunu varsayar.:2-60 Zilog Z80'de NOP bir makine çevrimi, dört T çevrimi sürer; Z80'de T çevrimleri saat periyotlarıdır.:7, 180 AVR el kitabındaki bir örnekte B kapısına önce sıfır, sonra bir yazan iki buyruğun arasına bekleme amacıyla bir NOP konur.:102, 103
Arm'ın iki el kitabı, NOP'un yürütme süresine etkisinin güvence altında olmadığını yazar. Bir NOP yürütme süresini uzatabilir, değiştirmeyebilir ya da kısaltabilir; bu nedenle zamanlama döngülerine uygun değildir.:A8-511:C6-2483 Power ISA iki ayrı boş işlem tanımlar. Yeğlenen nop (ORI 0,0,0), işlemcinin yürütme kaynaklarını en az kullanacak biçimde iyileştirilmiştir ve gerçekleştirim onu yürütme akışından çıkarabilir. Yürütülen biçim xnop (XORI 0,0,0) ise yürütme kaynaklarını tüketir ve yalnızca programın zamanlaması değiştirilmek istendiğinde kullanılmalıdır.:99, 100, 1032
Kod değiştirilirken NOP, sonradan doldurulacak yeri tutmak ya da bir buyruğu etkisiz kılmak için kullanılır. RISC-V belirtimine göre NOP'lar satır içi kod değişiklikleri için yer bırakmaya yarayabilir.:28 Linux çekirdeğinin işlev izleme altyapısı ftrace, derleyicinin işlevlere koyduğu mcount ya da fentry çağrılarının yerlerini bir tabloda toplar. Açılışta bu çağrıların hepsi NOP'a çevrilir, izleme etkinleştirildiğinde ise NOP'lar yeniden çağrı buyruğuyla yamalanır.
Microsoft Windows kitaplıklarındaki işlevler, çalışırken yamalamaya olanak vermek için iki baytlık bir NOP işlevi gören MOV EDI, EDI buyruğuyla başlar. Yama sırasında bu buyruk, işlevin hemen önündeki beş baytlık yama alanına atlayan iki baytlık bir JMP ile değiştirilir; yama alanı beş adet tek baytlık NOP'tan oluşur ve tam bir atlama buyruğu alacak kadar yer tutar. Raymond Chen'e göre yürütülmekte olan bir işlevin ilk beş baytına doğrudan atlama yazmak güvenli değildir, çünkü o anda başka bir iş parçacığı bu baytlarla örtüşen bir buyruğu yürütüyor olabilir. Microsoft'un C++ derleyicisindeki /hotpatch seçeneği, her işlevin ilk buyruğunun en az iki bayt olmasını ve işlev içindeki hiçbir atlamanın ilk buyruğa gitmemesini sağlar. Seçenek yalnızca x86 için vardır; Arm64 ve x64 mimarileri her zaman çalışırken yamalanabilir sayılır.
Hata ayıklayıcılar da NOP'ları işaret olarak kullanabilir. RISC-V'te çalışan programın giriş/çıkış gibi bir hizmeti hata ayıklayıcı üzerinden ana bilgisayardan istediği çağrı (İngilizce: semihosting), EBREAK buyruğunun önüne ve ardına konan iki kaydırma NOP'uyla, hata ayıklayıcının koyduğu bir EBREAK'ten ayırt edilir.:35

İstismar kodlarında NOP kızağı (İngilizce: NOP sled), saldırganın yürütmeyi aktarmak istediği yükün önüne konan ve işlevsel olarak hiçbir şey yapmayan buyruk dizisidir. Bir ara bellek taşması ya da başka bir saldırı yürütmeyi kızağın herhangi bir noktasına düşürdüğünde, art arda gelen boş işlemler denetimi yüke kadar taşır. Böylece kızak, saldırıya atlama adresindeki küçük sapmalara karşı esneklik kazandırır.:65438 Kızak yalnızca NOP buyruklarından oluşmak zorunda değildir; yürütme bağlamını bozmayan herhangi bir buyruk dizisi aynı işi görür ve x86'nın çok baytlı NOP'ları da kızakta kullanılabilir.:65438 Kızağın varlığı yükün kötü amaçlı olduğuna işaret ettiğinden, böyle dizileri tanımak saldırı algılama çalışmalarında bir dayanak sağlar.:65439
x86 mimarisinde birden fazla bayt tüketmesi gereken durumlarda çok baytlı NOP (İngilizce: multi-byte NOP) kullanılır. Bellek işlenenli 0F 1F /0 biçimi, yazılımın birkaç baytlık bir boş işlemi tek buyruk olarak oluşturmasını sağlar.:Cilt 2B: 4-160 Intel, 32 ve 64 bit kipleri için 2 ile 9 bayt arasındaki uzunluklarda önerilen dizileri listeler; 2 baytlık dizi, 90 kodunun önüne işlenen boyu öneki 66 getirilerek elde edilir.:Cilt 2A: 2-2; Cilt 2B: 4-160:3-27, 3-28 AMD'nin Family 17h kılavuzu 1 ile 15 bayt arasındaki NOP'ları listeler ve 8 baytın ötesindeki uzunlukları başa 66 önekleri ekleyerek kurar. Kılavuz, üçten fazla 66 öneki taşıyan buyrukları çözerken yavaşlayan Family 15h gibi eski işlemcileri de gözeterek 11 bayttan uzun dolgularda iki NOP'un art arda kullanılmasını önerir; çok uzun diziler dışında bu yol, dolgunun üstünden atlamaktan daha iyidir.:30
NOP'lar mimari durumu değiştirmese de işlemcide kaynak tüketir.:3-28:30 Intel'e göre NOP'lar kod çözme ve yürütme kaynağı gerektirdiğinden, istenen dolgu en az sayıda NOP ile sağlanmalıdır. Tek baytlık NOP'un özel donanım desteği vardır. Yine bir mikro işlem harcar, ancak EAX'in eski değerine bağımlılığı kaldırıldığından olabilecek en erken anda yürütülür ve en düşük maliyetli NOP odur. Öteki NOP'ların yazmaç işlenenleri donanımca yorumlandığından, kod üreticisinin en eski değeri taşıyan yazmacı seçmesi önerilir.:3-28 AMD'ye göre NOP'lar yürütme birimi kullanmaz, ancak kod çözücüden iletilmeleri ve kesinleştirme denetim biriminde izlenmeleri gerekir.:30
Bazı mimariler boru hattının davranışını bilerek değiştiren NOP biçimleri tanımlar. MIPS'in SSNOP buyruğu (SLL r0, r0, 1), çoklu buyruk başlatımlı bir işlemcide kendinden önceki buyrukla aynı çevrimde başlatılamaz ve tek başına başlatılır; tek başlatımlı bir işlemcide sıradan bir NOP gibi davranır.:387 2. sürümle gelen EHB (SLL r0, r0, 3) ise önceki buyrukların yarattığı bütün yürütme sorunları giderilene dek yürütmeyi durdurur; 1. sürüm işlemcileri onu SSNOP olarak yorumlar.:175 6. sürümde SSNOP'un bu özel davranışı kaldırılmış ve buyruk sıradan bir NOP'a dönüşmüştür.:387
Buyruk kümeleri, NOP gibi davranan kodlamaları sonradan eklenecek buyruklar için ayırarak geriye dönük uyumluluğu korur. Böyle bir kodlamayı eski bir işlemci boş işlem olarak yürütür, yeni işlemci ise ona bir anlam yükler.:Cilt 1: 18-1:A5-204:35
RISC-V'in 32 bitlik temel kümesi ipucu buyrukları için geniş bir kodlama alanı ayırır. İpucu buyrukları da NOP gibi program sayacının ilerlemesi dışında mimari durumu değiştirmez ve gerçekleştirimler bunları her zaman yok sayabilir. Bunların çoğu, hedef yazmacı x0 olan tam sayı hesaplama buyruklarıdır.:35 Zihintpause eklentisindeki PAUSE buyruğu, donanım iş parçacığının buyruk kesinleştirme hızının geçici olarak düşürülmesi gerektiğini bildiren bir ipucudur; etkisinin süresi sınırlıdır ve sıfır olabilir. PAUSE, hiçbir bellek sıralaması dayatmayan özel bir FENCE kodlamasıdır.:58
ARMv7'de ipucu alanında henüz atanmamış kodlamalar NOP gibi davranır, ancak ileride kullanılmak üzere ayrıldıklarından yazılım bunları kullanmamalıdır.:A5-204, A6-227 Hata ayıklama ipucu DBG, ARMv6T2'de NOP olarak yürütülür.:A8-378 A64'te de HINT alanındaki atanmamış kodlamalar NOP gibi davranır.:C6-2215
x86'daki PAUSE buyruğu (F3 90), NOP kodunun önüne yineleme öneki F3'ün getirilmesiyle kodlanır.:Cilt 2A: 2-1; Cilt 2B: 4-226 Buyruk, döngüsel kilit gibi meşgul bekleme döngülerinde işlemciye ipucu verir ve bu döngülerden çıkıştaki başarım kaybını ve güç tüketimini azaltır. Pentium 4 ile tanıtılmıştır; daha önceki IA-32 işlemcilerinde NOP gibi çalışır.:Cilt 2B: 4-226:11-13 Intel'in CET teknolojisinde dolaylı dallanma hedeflerini işaretleyen ENDBR64 (F3 0F 1E FA) buyruğunun işlem kodu da eski işlemcilerde NOP olacak biçimde seçilmiştir. Bu buyruk, desteği olmayan işlemcilerde NOP gibi davranır ve destekleyen işlemcilerde de yazmaçları ve bayrakları değiştirmez.:Cilt 1: 18-1, 18-7; Cilt 2A: 3-288 Power ISA'da da ORI Rx,Rx,0 biçimindeki bazı kodlamalar program önceliğini değiştirmek gibi yan etkiler taşır; bu nedenle el kitabı, başka bir biçimin yan etkisi istenmedikçe yeğlenen boş işlemin kullanılmasını önerir.:99
Bazı işlemciler tanımsız işlem kodlarını da boş işlem olarak yürütür. Western Design Center'ın W65C02S işlemcisinde kullanılmayan bütün işlem kodları, ileride kullanılmak üzere ayrılmış NOP'lardır ve bunların uzunluğu bir ile üç bayt, süresi bir ile sekiz çevrim arasında değişir. Özgün NMOS 6502'de ise bu kodların sonucu tanımsızdır ve bazıları işlemciyi ancak yeniden başlatmayla çıkılabilen bir duruma sokar.:30 Zilog Z80'de HALT buyruğu yürütüldükten sonra işlemci, bir kesme ya da yeniden başlatma gelene dek içeride NOP yürütür; bunun amacı dinamik belleğin yenileme sinyallerini etkin tutmaktır.:6, 7, 14, 181
C dilinde yalnızca noktalı virgülden oluşan boş deyim hiçbir işlem yapmaz.:147 Standart, boş deyimin bir yineleme deyimine boş döngü gövdesi sağlamak için kullanılmasını örnek verir: while (*s++ != '\0') ;:148 Python'daki pass deyimi de çalıştırıldığında hiçbir şey yapmaz. Sözdizimi bir deyim gerektirdiği hâlde çalıştırılacak kod olmadığında, örneğin henüz yazılmamış bir işlevin ya da yöntemsiz bir sınıfın gövdesinde yer tutucu olarak kullanılır.