跳去內容

NOP

出自維基百科,自由嘅百科全書
  想搵體育組織嘅話,請睇國家奧林匹克委員會

NOPno operation)係組合語言當中嘅指令,叫部電腦乜嘢都唔好做,亦都指機械語言嘅對應機械碼。佢嘅主要用途有兩個​​一係用嚟楔位,二係用嚟食時間​​但係喺某啲處理器另外可能會有其他副作用(如果有副作用就唔係真係乜都唔做)。

楔位主要係針對直接用機械語言寫嘅程式:如果寫咗嘅邏輯有啲想改走,可以用 NOP 冚走佢;或者寫之前用 NOP 清空將會寫嘢嘅地方,等反組合嘅時候唔好出咁多亂碼。

佢可以用嚟食時間係因為 NOP 雖然唔做嘢,但係處理器仍然要用一定嘅時間嚟處理佢。如果個處理器唔將執行嘅機械碼做最佳化,一段機械碼行幾耐係會計得出,咁將 NOP 擺喺一個廻圈入面就可以將廻圈運行嘅時間拖長。呢種叫做 timing loop(計時廻圈),可以用 6502 處理器做實例:

6502 處理器嘅計時廻圈例子[註 1]
機械語言 組合語言 所用時間[註 2]
行動碼 運算值 意思 標籤 行動碼 運算值 注釋
A2 FF 將常數 $FF 載入暫存器 X LDX #$FF 2
EA 乜嘢都唔好做(齋食時間) LOOP: NOP 2
CA 暫存器 X 減一 DEX 2
D0 FC 唔係零就向後跳4個字節 BNE LOOP ; 唔係零就跳去 LOOP 3(X ≠ 0)或者
2(X = 0)

廻圈由 255 掉轉數數到 1,總共 255 次。6502 嘅速度係 1 MHz,所以行呢個廻圈用嘅時間係 微秒。如果用兩個 NOP 會用 2296 微秒,三個 NOP 用 2806 微秒,如此類推。

其他語言

[編輯]

喺其他語言或者其他語境,如果講某個命命等同 「乜嘢都冇做」,通常會寫 no-op,唔寫 NOP。

[編輯]
  1. 所有數字都係十六進制,喺 6502 嘅語法 $ 表示十六進制,# 表示立即定址(即係運算值係常數)
  2. 例子假設所有機械碼都喺同一頁,唔會牽涉到跨頁導致要用多啲時間。所用時間出自 Pickens, John; Clark, Bruce; Spittles, Ed. "NMOS 6502 Opcodes" (英文). 喺2022年10月13號搵到.