這裏編譯器在處理這條語句的時候,會把jmp short翻譯成機器碼EB,把後面的標簽S翻譯成數字。這個數字有多大?前面的短解釋為2字節,這裏的短限定了這個數的範圍,即在-128~+127之間。
這裏我們開始解釋這個數的值。壹般稍微有點匯編知識的人都會以為這個數就是目的地址,其實不是(隨便寫個例子自己調試壹下,機器碼EB後面沒有目的地址)。這裏的數字實際上是目的地址和當前jmp之間的距離:
例如:
jmp短s的當前偏移地址是0003。
s:標簽的地址是0008。
Jmp short翻譯成機器碼EB,占壹個字節。
符號S翻譯成數字,也占用壹個字節(這個指令* * *占用0003和0004兩個字節)。
因此,當前jmp指令和標簽S之間的距離由3個字節分隔(0005,0006,0007)。
所以編譯器會在EB後面加上目的地址和當前jmp之間的距離3H。
這條指令不會讓cpu修改cs段,所以這條指令是段內跳轉指令。實際上,CPU檢測到EB時,會在保持CS段不變的情況下,向前或向後跳轉n個字節。n取決於EB後面的數字。如果數字為正,它將向前跳,如果為負,它將向後跳。使用時註意不要跳到8位有符號數的範圍之外。