第九章 转移指令的原理
1、8086CPU轉移指令分類:1.無條件轉移指令(如jmp);2.條件轉移指令;3.循環指令(如:loop);4.過程;5.中斷。
2、offse,偽指令,功能是取得標號的偏移地址。
3、nop的機器碼占一個字節,不產生任何結構,僅消耗幾個時鐘周期,接著執行后續指令,常用于程序的延時等。
4、jmp指令要給出兩種信息:1.轉移的目的地址;2.轉移的距離(段間轉移、段內短轉移、段內近轉移)。
5、依據位移進行的jmp指令:①jmp short 標號(轉到標號處執行指令),這種格式的jmp指令實現的是段內短轉移,它對ip的修改范圍為-128~127;②jup near ptr 標號,near ptr指明此處的位移為16位位移,進行的是段內近轉移,范圍-32769~32769,功能(ip)=(ip)+16位位移。
6、匯編指令與機器指令:在一般的匯編指令中,匯編指令中的idata(立即數),不論它是表示一個數據還是一個內存單元的偏移地址,都會在對應的機器指令中出現,因為CPU執行的是機器指令,它必須要處理這些數據或地址。但是jmp對應的機器碼不包含轉移地址,使用的是相當偏移地址(從當前地址到目標地址)。實際上“jmp short 標號”的功能為(ip)=(ip)+8位位移。
7、F6就是-10,涉及補碼。
8、轉移的目的地址在指令中的jmp指令:“jmp far ptr 標號”,實現段間轉移,又稱遠轉移。轉移地址在寄存器中的jmp指令:jmp 16位寄存器,功能:(IP)=(16位寄存器)。
9、轉移地址在內存中的jmp指令:兩種:1.jmp word ptr 內存單元地址(段內轉移);2.jmp dword ptr 內存單元地址(段間轉移)功能:(cs)=(內存單元地址+2),(IP)=(內存單元地址)。
10、jcxz指令,有條件轉移指令,所有的有條件轉移指令都是短轉移,在對應的機器碼中包含轉移的位移,而不是目的地址。對ip的修改范圍都為-128~127。如果(cx)==0,則轉移到標號處執行,當(cx)!=0什么也不做。C語言描述:if((cx)==0)jmp short 標號。
11、loop指令為循環指令,所有的循環指令都是短轉移,在對應的機器碼中包含轉移的位移,對ip修改范圍-128~127。1.(cx)=(cx)-1;2.如果(cx)!=0 ,(ip)=(ip)+8位位移。
12、根據位移進行轉移的意義:這樣設計,方便了程序段在內存中的浮動裝配(程序段放不同的位置都可以正確執行),注意:根據位移進行的指令,它們的轉移范圍受到轉移位移長度的限制,如果在源程序中出現了轉移范圍的問題,編譯器會報錯。
注意:jmp 2000:0100的轉移指令,是在debug中使用的匯編指令,匯編編譯器不認識。
實驗九:測試一下你的dos有木有問題。。。
Dos清屏命令:cls
?
?
?
?
?
轉載于:https://www.cnblogs.com/quantumplan/archive/2012/03/15/2398250.html
與50位技術專家面對面20年技術見證,附贈技術全景圖總結
以上是生活随笔為你收集整理的第九章 转移指令的原理的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Eclipse 自动注释的设置
- 下一篇: 用R做heatmap示例:NBA联盟50