汇编指令长度的判断
其中IP=IP+所讀指令的字節(jié)數(shù)。
那么,所讀指令的字節(jié)數(shù)應(yīng)該怎么判斷呢?
匯編指令長度與尋址方式有關(guān),規(guī)律或原則如下:
一、沒有操作數(shù)的指令,指令長度為1個(gè)字節(jié)
二、操作數(shù)只涉及寄存器的的指令,指令長度為2個(gè)字節(jié)
????如:mov bx,ax
三、操作數(shù)涉及內(nèi)存地址的指令,指令長度為3個(gè)字節(jié)
????如:mov ax,ds:[bx+si+idata]
四、操作數(shù)涉及立即數(shù)的指令,指令長度為:寄存器類型+1
????8位寄存器,寄存器類型=1,如:mov al,8;指令長度為2個(gè)字節(jié)
????16位寄存器,寄存器類型=2,如:mov ax,8;指令長度為3個(gè)字節(jié)
五、跳轉(zhuǎn)指令,分為2種情況:
1、段內(nèi)跳轉(zhuǎn)(指令長度為2個(gè)字節(jié)或3個(gè)字節(jié))
jmp指令本身占1個(gè)字節(jié)
段內(nèi)短轉(zhuǎn)移,8位位移量占一個(gè)字節(jié),加上jmp指令一個(gè)字節(jié),整條指令占2個(gè)字節(jié)
如:jmp short opr
段內(nèi)近轉(zhuǎn)移,16位位移量占兩個(gè)字節(jié),加上jmp指令一個(gè)字節(jié),整條指令占3個(gè)字節(jié)
如:jmp near ptr opr
2、段間跳轉(zhuǎn),指令長度為5個(gè)字節(jié)
如:jmp dword ptr table[bx][di]
或??jmp far ptr opr
或??jmp dword ptr opr?
注意:形如“jmp 1234:5678”的匯編指令,是在Debug中使用的匯編指令,匯編編譯器并不認(rèn)識,如果在源程序中使用,那么在編譯時(shí)便會(huì)報(bào)錯(cuò)。
轉(zhuǎn)自:https://blog.csdn.net/qq_36499686/article/details/78302165?locationNum=2&fps=1
轉(zhuǎn)載于:https://www.cnblogs.com/2f28/p/9903445.html
總結(jié)
- 上一篇: 猴子吃桃问题 python
- 下一篇: CSAPP:第三章程序的机器级表示1