一、一些基本概念比特(bit):二進制的一位字節(byte):8比特的數據字(word):2個字節長度二、8086的寄存器
寄存器是CPU內部高速存取數據的地方,比緩存更接近CPU的運算器。8086是16位cpu(字長16位):
其CPU一次最多可處理16位數據寄存器最大寬度位16位寄存器與PU之間的通路位16位。地址20位,最大可尋址220=1MB2^{20}=1MB220=1MB 內存空間。這些寄存器分三種:
通用寄存器:AX BX CX DX,每個寄存器又可以分為AH AL高8位和低8位分別使用。段寄存器:CS DS SS ES標志寄存器1. 通用寄存器8086有14個寄存器:AX BX CX DX SI DI SP BP IP CS SS DS ES PSW。
2. 段寄存器CS:代碼寄存器IP:指令指針寄存器CPU讀取指令的尋址=CS*16+IP,即從CS:IP處執行指令。讀取指令后,IP值會自動增加指向下一條指令。
DS:存放數據的段地址。注意8086不支持對段寄存器直接賦值,需要用另一個通用寄存器賦值給它。SS:存放棧頂的段地址SP:棧頂的偏移地址。SS:SP指向棧頂元素。 8086入棧時從高地址向低地址增長,出棧后,SS:SP指向新的棧頂。一段內存是放代碼、數據還是棧,取決非于這幾個段寄存器的設置。
3. 標志寄存器PSWOF:有符號數運算溢出標志DF:在串處理指令中,控制每次操作后si、di的增減。df=0每次操作后遞增,df=1每次操作后遞減。SF:相關指令執行后,其結果是否為負。為負則sf=1;否則sf=0。ZF:相關指令執行后,其結果是否為0。為0則zf=1;否則zf=0。PF:相關指令執行后,其結果的所有bit位中1的個數是否為偶數。為偶數則pf=1;否則pf=0。CF:在無符號數運算時,運算結果的最高有效位是否向更高位進位或從更高位借位。是則cf=1;否則cf=0。三、常用的匯編指令四、一些匯編偽指令匯編指令是CPU認識的對應2進制的指令,而偽指令是給編譯器看的。
1. 段定義 gment段名 gment...段名 ends1232. 匯編結束
end13. 假設 assume
assume cs:codesg ; 假設代碼寄存器和下面定義的codesg相關聯codesg gment...codesg endnd4. 尋址方式()表示一個寄存器或者一個內存單元中的內容。EA表示偏移地址。SA表示段地址。idata表示常量。五、使用DosBox和Debug工具
64位操作系統無法直接使用Debug.exe工具了,需要安裝一個DosBox,然后進行下面操作:
掛載本地磁盤,命令mount c: 本地文件夾把debug.exe masm.exe和要調試的程序放到本地文件夾然后就可以使用debug命令了。常用的debug命令:
R :查看更改cpu寄存器內容D:查看內存中內容E:改寫內存中內容U:將內存中機器指令翻譯成匯編指令T:執行一條機器指令A:以匯編格式在內存中寫入一條指令一段代碼示例(1) 新建一個1.asm文件:code gmentassume cs:codes:mov ax,0025h mov cl,2 shl ax,cl mov ax,4ch int 21hcode endnd s(2) 啟動DosBox掛載本地磁盤
mount c: d:/Documents/asm(3) 編譯
# 提示輸入內容可以一直回車c:masm 1.asm link 1.obj
這時生成1.exe
(4) debug加載c:debug 1.exe(5) 使用指令查看
u六、使用OllyDbg反匯編和跟蹤程序
OllyDbg通常稱作OD,是反匯編工作的常用工具。下載地址:www.ollydbg.de
啟動后,可以加載上篇編譯的Hello.exe程序:
可以看出編譯器編譯、鏈接后的代碼與手寫的匯編代碼還是存在很大的差異。
這里可以設置斷點、跟蹤程序,右側還有一些寄存器的值可以查看。
本文發布于:2023-02-28 20:00:00,感謝您對本站的認可!
本文鏈接:http://www.newhan.cn/zhishi/a/167764876573781.html
版權聲明:本站內容均來自互聯網,僅供演示用,請勿用于商業和其他非法用途。如果侵犯了您的權益請與我們聯系,我們將在24小時內刪除。
本文word下載地址:ollydbg(ollydbg下載).doc
本文 PDF 下載地址:ollydbg(ollydbg下載).pdf
| 留言與評論(共有 0 條評論) |