首先我們先要知道mov和jmp指令的格式:
(1)mov:是資料傳送指令,也是最基本的程式設計指令,
用於將乙個資料從源位址傳送到目標位址(暫存器間的資料傳送本質上也是一樣的)
傳遞資料到暫存器:mov ax,
0000
//把0000傳送到ax暫存器去
暫存器間傳遞資料:mov ax,bx //把bx中的值傳送到ax去
(注:mov在資料與暫存器間傳遞為3個位元組,暫存器間傳遞是兩個位元組)
(2)jmp:是組合語言中的無條件跳轉指令。無條件跳轉指令可轉到
記憶體中任何程式段
例:jmp 1000h,
0003h //此時cs=1000h,ip=0003h
只修改ip的值: jmp 某一暫存器
例:jmp ax //此時cs 不變 ,ip = ax中的值
注:cs為**段暫存器
ip為指令指標暫存器
執行的順序結果為:
(1)mov ax,6622h
(2)jmp 1000:3
(3)mov ax,0000
(4)mov bx,ax
(5)jmp bx
(6)mov ax,0123h
最後又跳回第三步迴圈下來
一開始我們知道此時cs=2000h,ip=0000hmov ax,6622h
執行後因為資料與暫存器間傳遞是三個位元組的,因此ip加3執行下一條指令
jmp 1000:3
此時cs = 1000h; ip = 0003h
mov ax,0000
這裡是把0000送到ax暫存器中,cs的值沒有變,ip值執行完指令後加3
此時cs=1000h,ip = 0006h
(4)此時cs=1000h,ip = 0006h通過位址加法器相加得到實體地址10006h,此時執行
mov bx,ax
把ax中的值送到bx中,cs值沒變,ip值執行完指令後加2(暫存器間傳遞加2)
此時cs=1000h,ip=0008h
(5)此時把cs=1000h,ip=0008h通過位址加法器相加得到實體地址10008h,此時執行
jmp bx
這裡只修改ip的值(不懂得看上面得jmp指令格式),因此cs值不變,ip值變為bx中的值
cs=1000,ip=0000h
(6)此時cs=1000,ip=0000h通過位址加法器相加得到實體地址10000h,此時執行
mov ax,0123h
把0123h的值送入ax暫存器中,執行完該指令後cs不變,ip加3
cs = 1000h,ip= 0003h
最後又從第三步開始執行,執行到最後第六步以後又會跳到10000h實體地址執行裡面的指令(即最後會一直迴圈在實體地址為10000h-10009h間) 彙編基礎 8086CPU的執行方式
cpu內 注 不同的cpu暫存器的個數 結構是不同的。a 暫存器 暫存器是程式設計師主要能進行讀寫操作的部件。通過暫存器來實現對cpu的控制。8086所有的暫存器都是16位 16個二進位制位 的,可以存放2個位元組。8086總計14個暫存器 ax bx cx dx si di sp bp ip cs...
CPU的製作流程
作為計算機的核心元件,cpu central processor unit,處理器 在使用者的心中一直是十分神秘的 在多數使用者的心目中,它都只是乙個名詞縮寫,他們甚至連它的全寫都拚不出來 在一些硬體高手的眼裡,cpu也至多是一塊十餘平方厘公尺,有很多腳的塊塊兒,而cpu的核心部分甚至只有不到一平方...
源程式到CPU執行要經歷的整個流程
以下內容是個人揣測,不正確的機率很高,這裡只是寫下來備忘。這裡以x86平台為例進行說明。編譯 編譯器在編譯 的時候,是以乙個 cpp和乙個 h為基本編譯單元的,每個編譯單元我們這裡稱為乙個編譯模組,每個編譯模組都可能定義全域性變數和靜態變數以及區域性變數,同時可能引用其他 編譯模組中的全域性變數。每...