8086指令系統採用變長指令,指令的長度可由1~6位元組組成。
短的指令如:INC AX,只有1個位元組。
長的指令如:JMP 1234:5678,有5個位元組。
變長的指令不是一次性從儲存器讀出的,CPU讀取到“第一批次”指令(前16位)後,透過對第1個位元組解碼,獲知這條指令的確切長度。再根據這個確切長度,確定再使用多少個匯流排週期來讀取這條指令。
如何理解匯流排週期呢?這就涉及8086 CPU的匯流排時序了,有幾個概念。
時鐘週期也就是主頻對應的週期。時序邏輯電路最基本的同步訊號。
匯流排週期訪問一次儲存器所需要的時間。分匯流排讀操作和匯流排寫操作。一次匯流排讀操作需要好幾個步驟。先要把地址訊號傳遞到總線上,然後鎖存地址(因為8086的地址線和資料線是複用的,不鎖存資料一來地址就沒了);再等著儲存器把資料送到總線上,然後通知CPU讀取。一次匯流排寫操作也需要好幾個步驟。先要把地址訊號傳遞到總線上,然後鎖存地址;再把資料訊號傳遞到總線上,等待資料穩定後寫進儲存器。
這幾個步驟,一個時鐘週期搞不定,需要若干個時鐘週期(>=4)才能完成。
《Intel 8086 Datasheet》
指令週期要執行一條指令,就更復雜了。指令本身好幾個位元組,取指令就可能耗費多個匯流排週期。除立即定址和暫存器定址外,指令還得從儲存器裡讀取資料,指令的執行本身也需要時間,指令的執行結果還得寫到儲存器裡。所有儲存器讀寫都涉及匯流排操作。所以一條指令的執行,一個匯流排週期通常搞不定,需要多個匯流排週期。事實上,一個指令週期由若干個匯流排週期組成,不同指令的匯流排週期不等長,簡單的指令只需要一個匯流排週期,複雜的指令需要多個匯流排週期。如乘法指令,需要124個匯流排週期。
8086指令系統採用變長指令,指令的長度可由1~6位元組組成。
短的指令如:INC AX,只有1個位元組。
長的指令如:JMP 1234:5678,有5個位元組。
變長的指令不是一次性從儲存器讀出的,CPU讀取到“第一批次”指令(前16位)後,透過對第1個位元組解碼,獲知這條指令的確切長度。再根據這個確切長度,確定再使用多少個匯流排週期來讀取這條指令。
如何理解匯流排週期呢?這就涉及8086 CPU的匯流排時序了,有幾個概念。
時鐘週期也就是主頻對應的週期。時序邏輯電路最基本的同步訊號。
匯流排週期訪問一次儲存器所需要的時間。分匯流排讀操作和匯流排寫操作。一次匯流排讀操作需要好幾個步驟。先要把地址訊號傳遞到總線上,然後鎖存地址(因為8086的地址線和資料線是複用的,不鎖存資料一來地址就沒了);再等著儲存器把資料送到總線上,然後通知CPU讀取。一次匯流排寫操作也需要好幾個步驟。先要把地址訊號傳遞到總線上,然後鎖存地址;再把資料訊號傳遞到總線上,等待資料穩定後寫進儲存器。
這幾個步驟,一個時鐘週期搞不定,需要若干個時鐘週期(>=4)才能完成。
《Intel 8086 Datasheet》
指令週期要執行一條指令,就更復雜了。指令本身好幾個位元組,取指令就可能耗費多個匯流排週期。除立即定址和暫存器定址外,指令還得從儲存器裡讀取資料,指令的執行本身也需要時間,指令的執行結果還得寫到儲存器裡。所有儲存器讀寫都涉及匯流排操作。所以一條指令的執行,一個匯流排週期通常搞不定,需要多個匯流排週期。事實上,一個指令週期由若干個匯流排週期組成,不同指令的匯流排週期不等長,簡單的指令只需要一個匯流排週期,複雜的指令需要多個匯流排週期。如乘法指令,需要124個匯流排週期。