汇编工具
【常見的基本匯編書籍】
《Windows.環境下32位匯編語言程序設計(第2版)》
《匯編語言編程藝術》
《Intel匯編語言程序設計(第四版)》
《Intel匯編語言程序設計(第五版)范例》
《80×86匯編語言程序設計教程》
《IBM.PC.匯編語言程序設計(第五版)》
《Microsoft MASM手冊》
《Intel? 64 and IA-32 Architectures Software Developer’s Manuals》
回頁首
【匯編編譯器】
MASM32
MASM6.0
NASM-Win32
NASM-DOS
NASM-Linux
TASM5.0
簡易MASM附帶Turbo Debugger
Windows環境下編寫匯編程序的工具
回頁首
匯編語言網站
編程中國>>技術教程>>開發語言>>匯編 http://www.bccn.net/Article/kfyy/hb/
匯編網 http://www.asmedu.net/
80×86匯編小站 www.x86asm.com/
AoGo匯編小站 http://www.aogosoft.com/
Assembly Language for Intel-BasedComputers http://kipirvine.com/asm/
NASM http://www.nasm.us/
Assembly Language Programming – MASM& Intel Docs http://web.sau.edu/LillisKevinM/csci240/masmdocs/
回頁首
一些博客帖子
自己寫的一個匯編計算器 http://blog.csdn.net/KingWolfOfSky/archive/2009/11/11/4800028.aspx
Linux匯編語言開發指南 http://blog.csdn.net/KingWolfOfSky/archive/2009/08/09/4427623.aspx
創建Win32圖形界面應用程序 http://blog.csdn.net/KingWolfOfSky/archive/2009/08/07/4423958.aspx
架設WIN32匯編程序的開發環境 http://blog.csdn.net/KingWolfOfSky/archive/2009/07/23/4375411.aspx
匯編初學者問題合集 http://blog.csdn.net/mydo/archive/2007/09/07/1776304.aspx
[幽默機智問答]匯編系列,給初學者 http://topic.csdn.net/u/20080423/21/e1fa715d-9613-4b8d-aa69-58b6f95be894.html
從匯編分析Win32消息原理 http://coderarea.net/html/bianchengyuyan/huibianyuyan/huibianyingyong/2009/0316/74531.html
用匯編寫特殊要求的strlen http://coderarea.net/html/bianchengyuyan/huibianyuyan/huibianyingyong/2009/0316/74530.html
8051存儲器 http://coderarea.net/html/bianchengyuyan/huibianyuyan/huibianshili/2009/0316/74495.html
8051尋址方式 http://coderarea.net/html/bianchengyuyan/huibianyuyan/huibianshili/2009/0316/74494.html
GCC內聯匯編基礎http://coderarea.net/html/bianchengyuyan/huibianyuyan/huibianshili/2009/0316/74493.html
匯編的角度來理解數組與指針http://coderarea.net/html/bianchengyuyan/huibianyuyan/huibianrumen/2009/0316/74390.html
從匯編語言翻譯到c語言代碼http://coderarea.net/html/bianchengyuyan/huibianyuyan/huibianshili/2009/0316/74492.html
函數調用得到傳遞參數的想法 http://coderarea.net/html/bianchengyuyan/huibianyuyan/huibianshili/2009/0316/74491.html
匯編語言寫ESMTP電子郵件發送程序http://coderarea.net/html/bianchengyuyan/huibianyuyan/huibianyingyong/2009/0316/74529.html
使用Mutex防止程序運行兩次http://coderarea.net/html/bianchengyuyan/huibianyuyan/huibianshili/2009/0316/74489.html
匯編開發的進制輸出的程序http://coderarea.net/html/bianchengyuyan/huibianyuyan/huibianyingyong/2009/0316/74528.html
匯編實現:接受一個小寫字母輸出對應大寫字母http://coderarea.net/html/bianchengyuyan/huibianyuyan/huibianshili/2009/0316/74488.html
接受一個小寫字母,找出前個字符和后續字符http://coderarea.net/html/bianchengyuyan/huibianyuyan/huibianshili/2009/0316/74487.html
匯編排序&查找實例http://coderarea.net/html/bianchengyuyan/huibianyuyan/huibianshili/2009/0316/74486.html
16位數拆分為4組實例代碼http://coderarea.net/html/bianchengyuyan/huibianyuyan/huibianshili/2009/0316/74485.html
不定參函數實現方法http://coderarea.net/html/bianchengyuyan/huibianyuyan/huibianrumen/2009/0316/74389.html
反匯編激活成功教程Radmin密碼實例http://coderarea.net/html/bianchengyuyan/huibianyuyan/huibianshili/2009/0316/74484.html
對話框代碼模塊源碼(匯編) http://coderarea.net/html/bianchengyuyan/huibianyuyan/huibianyuanma/2009/0316/74555.html
MASM32編程讀取網站首頁代碼http://coderarea.net/html/bianchengyuyan/huibianyuyan/huibianyuanma/2009/0316/74554.html
Win32匯編讀者/寫者,寫者具有優先權的問題http://coderarea.net/html/bianchengyuyan/huibianyuyan/huibianrumen/2009/0316/74387.html
匯編程序在屏幕顯示字符的源代碼http://coderarea.net/html/bianchengyuyan/huibianyuyan/huibianyuanma/2009/0316/74553.html
echo命令基礎http://coderarea.net/html/bianchengyuyan/huibianyuyan/huibianrumen/2009/0316/74377.html
”VB“版的匯編環境的配置方法http://coderarea.net/html/bianchengyuyan/huibianyuyan/huibianyingyong/2009/0316/74527.html
程序轉移指令http://coderarea.net/html/bianchengyuyan/huibianyuyan/huibianrumen/2009/0316/74376.html
匯編語言串指令http://coderarea.net/html/bianchengyuyan/huibianyuyan/huibianrumen/2009/0316/74375.html
匯編語言邏輯運算指令http://coderarea.net/html/bianchengyuyan/huibianyuyan/huibianrumen/2009/0316/74374.html
匯編語言算術運算指令http://coderarea.net/html/bianchengyuyan/huibianyuyan/huibianrumen/2009/0316/74373.html
常見修改(機器碼)http://coderarea.net/html/bianchengyuyan/huibianyuyan/huibianrumen/2009/0316/74372.html
需要熟練掌握的全部匯編知識http://coderarea.net/html/bianchengyuyan/huibianyuyan/huibianrumen/2009/0316/74371.html
匯編語言經典句式http://coderarea.net/html/bianchengyuyan/huibianyuyan/huibianrumen/2009/0316/74370.html
斷點設置表http://coderarea.net/html/bianchengyuyan/huibianyuyan/huibianrumen/2009/0316/74369.html
匯編基礎資料速查http://coderarea.net/html/bianchengyuyan/huibianyuyan/huibianshili/2009/0316/74478.html
用內聯匯編判斷整數計算是否產生進位借位或溢出http://coderarea.net/html/bianchengyuyan/huibianyuyan/huibianshili/2009/0316/74477.html
泛型類型的子類及通配符的使用http://coderarea.net/html/bianchengyuyan/huibianyuyan/huibianrumen/2009/0316/74368.html
win32下使用內存映射文件http://coderarea.net/html/bianchengyuyan/huibianyuyan/huibianrumen/2009/0316/74367.html
直接系統服務(Direct System Service)http://coderarea.net/html/bianchengyuyan/huibianyuyan/huibianrumen/2009/0316/74366.html
時鐘服務(Clock Service——INT 1AH)http://coderarea.net/html/bianchengyuyan/huibianyuyan/huibianrumen/2009/0316/74365.html
并行口服務(Parallel Port Service——INT 17H)http://coderarea.net/html/bianchengyuyan/huibianyuyan/huibianrumen/2009/0316/74364.html
鍵盤服務(Keyboard Service——INT 16H)http://coderarea.net/html/bianchengyuyan/huibianyuyan/huibianrumen/2009/0316/74363.html
雜項系統服務(Miscellaneous System Service——INThttp://coderarea.net/html/bianchengyuyan/huibianyuyan/huibianrumen/2009/0316/74362.html
串行口服務(Serial Port Service——INT 14H)http://coderarea.net/html/bianchengyuyan/huibianyuyan/huibianrumen/2009/0316/74361.html
直接磁盤服務(Direct Disk Service——INT 13H)http://coderarea.net/html/bianchengyuyan/huibianyuyan/huibianrumen/2009/0316/74360.html
顯示服務(Video Service——INT 10H)http://coderarea.net/html/bianchengyuyan/huibianyuyan/huibianrumen/2009/0316/74359.html
其它DOS中斷http://coderarea.net/html/bianchengyuyan/huibianyuyan/huibianrumen/2009/0316/74358.html
鼠標功能中斷INT 33Hhttp://coderarea.net/html/bianchengyuyan/huibianyuyan/huibianrumen/2009/0316/74357.html
時間和日期功能(Time and Date Function)http://coderarea.net/html/bianchengyuyan/huibianyuyan/huibianrumen/2009/0316/74356.html
進程控制功能(Process-Control Function)http://coderarea.net/html/bianchengyuyan/huibianyuyan/huibianrumen/2009/0316/74355.html
系統功能(System Function)http://coderarea.net/html/bianchengyuyan/huibianyuyan/huibianrumen/2009/0316/74354.html
內存分配功能(Memory-Allocation Function)http://coderarea.net/html/bianchengyuyan/huibianyuyan/huibianrumen/2009/0316/74353.html
記錄操作功能(FCB)(Record Function)http://coderarea.net/html/bianchengyuyan/huibianyuyan/huibianrumen/2009/0316/74352.html
文件操作功能(FCB)(File Operation Function)http://coderarea.net/html/bianchengyuyan/huibianyuyan/huibianrumen/2009/0316/74350.html
磁盤管理功能(Disk-Management Function)http://coderarea.net/html/bianchengyuyan/huibianyuyan/huibianrumen/2009/0316/74348.html
目錄控制功能(Directory-Control Function)http://coderarea.net/html/bianchengyuyan/huibianyuyan/huibianrumen/2009/0316/74347.html
字符功能調用類(Character-OrientedFunction)http://coderarea.net/html/bianchengyuyan/huibianyuyan/huibianrumen/2009/0316/74346.html
鼠標中斷實例學習http://coderarea.net/html/bianchengyuyan/huibianyuyan/huibianshili/2009/0316/74475.html
斷點設置原理http://coderarea.net/html/bianchengyuyan/huibianyuyan/huibianrumen/2009/0316/74345.html
ESP定律手工脫殼方法步驟http://coderarea.net/html/bianchengyuyan/huibianyuyan/huibianshili/2009/0316/74474.html
匯編中的管道操作方法http://coderarea.net/html/bianchengyuyan/huibianyuyan/huibianrumen/2009/0316/74343.html
匯編進程控制的實現方法http://coderarea.net/html/bianchengyuyan/huibianyuyan/huibianrumen/2009/0316/74342.html
匯編中使用定時器的方法http://coderarea.net/html/bianchengyuyan/huibianyuyan/huibianrumen/2009/0316/74341.html
匯編復雜形狀的窗口實例學習http://coderarea.net/html/bianchengyuyan/huibianyuyan/huibianrumen/2009/0316/74340.html
匯編圖形界面的操作http://coderarea.net/html/bianchengyuyan/huibianyuyan/huibianrumen/2009/0316/74339.html
控件的子類化http://coderarea.net/html/bianchengyuyan/huibianyuyan/huibianrumen/2009/0316/74338.html
工具欄和狀態欄的使用http://coderarea.net/html/bianchengyuyan/huibianyuyan/huibianrumen/2009/0316/74337.html
匯編菜單和加速鍵http://coderarea.net/html/bianchengyuyan/huibianyuyan/huibianrumen/2009/0316/74336.html
匯編語言中窗口的基本知識http://coderarea.net/html/bianchengyuyan/huibianyuyan/huibianrumen/2009/0316/74335.html
檢測不了的錯誤現象及解決方法http://coderarea.net/html/bianchengyuyan/huibianyuyan/huibianshili/2009/0316/74473.html
匯編基礎-對話框和資源文件的使用http://coderarea.net/html/bianchengyuyan/huibianyuyan/huibianrumen/2009/0316/74334.html
Win32匯編程序的結構和語法http://coderarea.net/html/bianchengyuyan/huibianyuyan/huibianrumen/2009/0316/74333.html
Win32匯編的環境和基礎http://coderarea.net/html/bianchengyuyan/huibianyuyan/huibianrumen/2009/0316/74332.html
常量符號定義方法http://coderarea.net/html/bianchengyuyan/huibianyuyan/huibianrumen/2009/0316/74331.html
回頁首
常見的匯編指令
一、通用數據傳送指令
1、傳送指令MOV (move)
指令的匯編格式:MOV DST,SRC
指令的基本 功能:(DST)<-(SRC)將原操作數(字節或字)傳送到目的地址。
指令支持的尋址方式:目的操作數和源操作數不能同時用存儲器尋址 方式,這個限制適用于所有指令。
指令的執行對標志位的影響:不影響標志位。
指令的特殊要求:目的操作數DST和源操作數SRC不允許同時為段寄存器;
目的操作數DST不能是CS,也不能用立即數方式。
2、進棧指令PUSH (push onto the stack)
出棧指令POP (pop from the stack)
指令的匯編格式:PUSH SRC;POP DST
指令的基本功能:PUSH指令在程序中常用來暫存某些數據,而POP指令又可將這些數據恢復。
PUSH SRC (SP)<-(SP)-2;(SP)<-(SRC)
POP DST (DST)<-((SP));(SP)<-(SP)
指令支持的尋址方式:push和pop指令不能不能使用立即數尋址方式。
指 令對標志位的影響:PUSH和POP指令都不影響標志位。
指令的特殊要求:PUSH和POP指令只能是字操作,因此,存取字數據后,SP的修改必須是+2或者-2;
POP指令的DST不允許是CS寄存器;
3、 交換指令XCHG (exchange)
指令的匯編格式:XCHG OPR1,OPR2
指令的基本功能:(OPR1)<->(OPR2)
指令支持的尋址方式:一個操作數必須在寄存器中,另一個操作數可以在寄存器或存儲器中。
指令 對標志位的影戲:不影響標志位。
指令的特殊要求:不允許使用段寄存器。
二、累加器專用傳送指令
4、輸入指令IN (input)
輸出指令OUT (output)
指令的匯編格式:IN ac,port port<=0FFH
IN ac,DX port>0FFH
OUT port,ac port<=0FFH
OUT DX,ac port>0FFH
指令的基本功能:對8086及其后繼機型的微處理機,所有I/O端口與CPU之間的通信都由輸入輸出指令IN和OUT來完成。IN指令將信息從I/O輸入到CPU,OUT指令將信息從CPU輸出到I/O端口,因此,IN和OUT指令都要指出I/O端口地址。
IN ac,port port<=0FFH (AL)<-(port)傳送字節 或(AX)<-(port+1,port)傳送字
IN ac,DX port>0FFH (AL)<-((DX))傳送字節 或(AX)<-((DX)+1,(DX))傳送字
OUT port,ac port<=0FFH (port)<-(AL)傳送字節 或(port+1,port)<-(AX)傳送字
OUT DX,ac port>0FFH (DX)<-(AL)傳送字節 或((DX)+1,(DX))<-(AX)傳送字
指令對 標志位的影響:不影響標志位。
指令的特殊要求:只限于在AL或AX與I/O端口之間傳送信息。
傳送16位信息用AX,傳送8位信息用AL,這取決于外設端口的寬度。
5、換碼指令XLAT (translate)
指令的匯編格式:XLAT opr或XLAT
指令的基本功能:這條指令根據AL寄存器提供的位移量,將BX指使的字節表格中的代碼換存在AL中。
(AL)<-((DS)*16+(BX)+(AL))
指 令對標志位的影響:不影響標志位。
指令的特殊要求:所建字節表格的長度不能超過256字節,因為存放位移量的是8位寄存器AL。
opr為 表格的首地址,因為opr所表示的偏移地址已存入BX寄存器,所以opr在換碼指令中可有可無,有則提高程序的可讀性。
三、地址傳送指令
6、 有效地址傳送器LEA (load effective address)
指令的匯編格式:LEA reg,src
指令的基本 功能:LEA指令把源操作數的有效地址送到指定的寄存器,這個有效地址是由src選定的一種存儲器尋址方式確定的。
指令支持的尋址方式:各種存儲 器尋址方式。
指令對標志位的影響:不影響標志位。
指令的特出要求:指令中reg不能是段寄存器;
7、指針送寄存器和DS LDS (load DS with point)
指針送寄存器和ES LES (load ES with point)
指令的匯編 格式:LDS reg,src
LES reg,src
指令的基本功能:LDS和LES指令把確定內存單元位置的偏移地址送寄存器,段地址DS或ES。這個偏移地址和段地址(也稱地址指針)是由src指定的兩個相繼字單元提供的。
LDS reg,src (reg)<-(src) (DS)<-(src+2)
LES reg,src (reg)<-(src) (ES)<-(src+2)
指令支持的尋址方式:src必須為存儲器尋址方式
指令對標志位的影響:不影響標志位。
指令的特 殊要求:指令中REG不能是段寄存器;
四、標志寄存器傳送指令
8、標志寄存器的低字節送AH LAHF (load AH with FLAGS)
指令的匯編格式:LAHF
指令的基本功能:(AH)<-(FLAGS)0-7
指令對 標志位的影響:不影響標志位
9、AH送標志寄存器低字節SAHF(store AHinto FLAGS)
指令的匯 編格式:SAHF
指令的基本功能:(FLAGS)0-7<-(AH)
指令對標志位的影響:由裝入值來確定標志位的值。
10、 標志進棧PUSHF (push the flags)
指令的匯編格式:PUSHF
指令的基本功能:(SP)<-(SP)-2 ((SP)+1,(SP))<-(FLAGS)0-15
指令對標志位的影響:不影響標志位。
11、 標志出棧POPF (pop the FLAGES)
指令的匯編格式:POPF
指令的基本功能:(FLAGS)0-15<-((SP)+1,(SP)) (SP)<-(SP)+2
指令對標志位的影響:由裝入值來確定標志位的值。
[算 術指令]
一、加法指令
12、加法指令ADD (addition)
指令的匯編格式:add dst,src
指令的基本功能:(dst)<-(src)+(dst)
指令支持的尋址方式:他們兩個操作數不能同時為存儲器尋址。 即為除源操作數為立即數的情況外,源操作數和目地操作數必須有一個寄存器尋址方式。
指令對標志位的影響:
SF=1加法結果為負數(符號位為1)
SF=0加法結果為正數(符號位為0)
ZF=1加法結果為零
ZF=0加法結果不為零
CF=1最高有效位向高位有進位
CF=0最高有效位向高位無進位
OF=1兩個同符號數相加(正數+正數 或 負數+負數),結果符號與其相反。
OF=0兩個不同符號數相加,或同符號數相加,結果符號與其相同。
13、帶進為加法指令ADC (add with carry)
指令的匯編格式:ADD dst,src
指令的基本功能:(dst)<-(src)+(dst)+CF
指令支持的尋址方式:他們兩個操作數不能同時為存儲器尋址。即為除源操作數為立即數的情況外, 源操作數和目地操作數必須有一個寄存器尋址方式。
指令對標志位的影響:SF=1加法結果為負數
SF=0加法結果為正數
ZF=1加法結果為零
ZF=0加法結果不為零
CF=1最高有效位向高位有進位
CF=0最低有效位相高位無進位
OF=1兩個同符號數相加,結果符號與其相反,
OF=0兩個同符號數相加,或同符號相加,結果符號與其相同
14、加1指令INC (increament)
指令的匯編格式:INC opr
指令的基本功能:(opr)<-(opr)
指令支持的尋址方式 可以使用除立即數方式外的任何尋址方式
指令對標志位的影響:SF=1加法結果為負數
SF=0加法結果為正數
ZF=1加法結果為零
ZF=0加法結果不為零
OF=1兩個同符號數相加,結果符號與其相反,
OF=0兩個同符號數相加,或同符號相加,結果符號與其相同。
二、減法指令
15、減法指令SUB (subtract)
指 令的匯編格式:SUB dst,src
指令的基本功能:(dst)<-(dst)-(src)
指令支持的尋址方式:他們兩個操作數 不能同時為存儲器尋址。即為除源操作數為立即數的情況外,源操作數和目地操作數必須有一個寄存器尋址方式。
指令對標志位的影響:SF=1減法結果為負數(符號位為1)
SF=0減法結果為正數(符號位為0)
ZF=1減法結果為零
ZF=0減法結果不為零
CF=1二進制減法運算中最高有效位向高位有借位(被減數小于減數,不夠減的情況)
CF=0二進制減法運算中最高有效為向高位無借位(被減數〉=減數,夠減的情況)
OF=1兩數符號相反(正數-負數,或負數-正數),而結果符號與減數相同。
OF=0同符號數相減時,或不同符號數相減,其結果符號與減數不同。
16、 帶借位減法指令SBB (subtract with borrow)
指令的匯編格式:SBB dst,src
指令的基本功 能:(dst)<-(dst)-(src)-CF
指令支持的尋址方式:他們兩個操作數不能同時為存儲器尋址。即為除源操作數為立即數的情況 外,源操作數和目地操作數必須有一個寄存器尋址方式。
指令對標志位的影響:SF=1減法結果為負數(符號位為1)
SF=0減法結果為正數(符號位為0)
ZF=1減法結果為零
ZF=0減法結果不為零
CF=1二進制減法運算中最高有效位向高位有借位(被減數小于減數,不夠減的情況)
CF=0二進制減法運算中最高有效為向高位無借位(被減數〉=減數,夠減的情況)
OF=1兩數符號相反(正數-負數,或負數-正數),而結果符號與減數相同。
OF=0同符號數相減時,或不同符號數相減,其結果符號與減數不同。
17、 減1指令DEC (decrement)
指令的匯編格式:DEC opr
指令的基本功能:(opr)<-(opr)-1
指 令支持的尋址方式:可以使用除立即數方式外的任何尋址方式。
指令對標志位的影響:SF=1減法結果為負數(符號位為1)
SF=0減法結果為正數(符號位為0)
ZF=1減法結果為零
ZF=0減法結果不為零
OF=1兩數符號相反(正數-負數,或負數-正數),而結果符號與減數相同。
OF=0同符號數相減時,或不同符號數相減,其結果符號與減數不同。
18、 比較指令CMP (compare)
指令的匯編格式:CMP opr1,opr2
指令的基本功能:(opr1)-(opr2),根據相減結果設置條件碼,但不回送結果。
指令支持的尋址方式:他們兩個操作數不能同時為存儲器尋址。即為除源操作數 為立即數的情況外,源操作數和目地操作數必須有一個寄存器尋址方式。
指令對標志位的影響:SF=1減法結果為負數(符號位為1)
SF=0減法結果為正數(符號位為0)
ZF=1減法結果為零
ZF=0減法結果不為零
CF=1二進制減法運算中最高有效位向高位有借位(被減數小于減數,不夠減的情況)
CF=0二進制減法運算中最高有效為向高位無借位(被減數〉=減數,夠減的情況)
OF=1兩數符號相反(正數-負數,或負數-正數),而結果符號與減數相同。
OF=0同符號數相減時,或不同符號數相減,其結果符號與減數不同。
19、 求補指令NEG (negate)
指令的匯編格式:NEG opr
指令的基本功能:(opr)<- -(opr)
指 令支持的尋址方式:可以使用除立即數方式外的任何尋址方式。
指令對標志位的影響:CF=1不為0的操作數求補時
CF=0為0的操作數求補時
OF=1操作數為-128(字節運算)或操作數為-32768(字運算)
OF=0當求補運算的操作數不為-128(字節)或-32768(字)時
三、乘法指令
20、無符號乘法指令NUL (unsigned multiple)
有符號乘法指令IMUL(signed muliple)
指令的匯編格式:NUL src
IMUL src
指令的基本功能:(AX)<-(AL)*(src)
(DX,AX)<-(AX)*(src)
指 令支持的尋址方式:src可以使用除立即數方式以外的任一種尋址方式。
指令對標志位的影響:乘法指令只影響標志位CF和OF,其他條件碼位無定義。
MUL指令的條件碼設置為:
CF OF=0 0乘積的高一半為0(字節操作的(AH)或字操作的(DX))
CF OF=1 1乘積的高一半不為0
IMUL指令的條件碼設置為:
CF OF=0 0乘積的高一半為低一半的符號擴展.
CF OF=1 1其他情況
指令的特殊要求:MUL和IMUL指令的區別僅在于操作數是無符號還是帶符號數,它們的共同點是,指令中只給出源操作數src,目的操 作數是隱含的,它只能是累加器(字運算為AX,字節運算為AL)。隱含的乘積寄存器是AX或DX(高位)和AX(低位)。
四、符 號擴展指令
21、節擴展為字CBW (convert byte to word)
指令的匯編格式:CBW
指 令的基本功能:(AH)=00H當(AL)的最高有效位為0時
(AH)=FFH當(AL)的最高有效位為1時
指令對標志位的影響:不 影響標志位
指令的特殊要求:這是條無操作數的指令,進行符號擴展的操作數必須存放在AL寄存器或AX寄存器中。
22、字擴展為雙 字CWD (convert word to double word)
指令的匯編格式:CWD
指令的基本功能:(DX)=0000H當(AX)的最高有效位為0時
(DX)=FFFFH當(AX)的最高有效位為1時
指令對標志位的影響:不影響標 志位
指令的特殊要求:這是條無操作數的指令,進行符號擴展的操作數必須存放在AL寄存器或AX寄存器中。
五、除法指令
23、 無符號數除法DIV (unsigned divide)
帶符號數除法IDIV (singed divide)
指令的匯編 格式:DIV src
IDIV src
指令的基本功能:字操作
(AL)<-(AX)/src的商
(AH)<-(AX)/src的余數
字節操作
(AX)<-(DX,AX)/src的商
(DX)<-(DX,AX)/src的余數
指令支持 的尋址方式:src作為除數,可用除立即數以外的任一種尋址方式來取得。
指令對標志位的影響:不影響條件碼。
指令的特殊要求:除法指令要 求字操作時,被除數必須為32位,除數是16位,商和余數是16位的;
字節操作時,被除數必須為16位,除數是8位,得到的商和余數是8位的。
六、 十進制調整指令
[邏輯指令]
一、邏輯運算
24、邏輯與AND (logic and)
指 令的匯編格式:AND dst,src
指令的基本功能:(dst)<-(dst)與(src)
指令支持的尋址方式:兩個操作數不能 同時為存儲器尋址。即為除源操作數為立即數的情況外,源操作數和目地操作數必須有一個寄存器尋址方式。
指令對標志位的影響:指令執行后CF和OF置零,AF無定義。
SF=1指令執行后的結果為負數(符號位為1)
SF=0指令執行后的結果為正數(符號位為0)
ZF=1指令執行后的結果為零
ZF=0指令執行后的結果不為零
PF=1結果操作數中1的個數為偶數時置1
PF=0結果操作數中1的個數為奇數時置0
25、邏輯或OR (logic or)
指令的匯編格式:OR dst,src
指 令的基本功能:(dst)<-(dst)或(src)
指令支持的尋址方式:兩個操作數不能同時為存儲器尋址。即為除源操作數為立即數的情況 外,原操作數和目的操作數必須有一個寄存器尋址方式。
指令對標志位的影響:令執行后CF和OF置零,AF無定義。
SF=1指令執行后的結果為負數(符號位為1)
SF=0指令執行后的結果為正數(符號位為0)
ZF=1指令執行后的結果為零
ZF=0指令執行后的結果不為零
PF=1結果操作數中1的個數為偶數時置1
PF=0結果操作數中1的個數為奇數時置0
26、 邏輯非NOT (logic not)
指令的匯編格式:NOT orc
指令的基本功能:(dst)<-(opr)
指 令支持的尋址方式:除立即數尋址方式以外的其余尋址方式
指令對標志位的影響:對標志位無影響
27、異或XOR (exclusice or)
指令的匯編格式:XOR dst,src
指令的基本功能:(dst)<-(dst)異或(src)
指令支持的尋址方式:兩個操作數不能同時為存儲器尋址。即為除源操作數為立即數的情況外,原操作數和目的操作數必須有一個寄存器尋址方 式。
指令對標志位的影響:令執行后CF和OF置零,AF無定義。
SF=1指令執行后的結果為負數(符號位為1)
SF=0指令執行后的結果為正數(符號位為0)
ZF=1指令執行后的結果為零
ZF=0指令執行后的結果不為零
PF=1結果操作數中1的個數為偶數時置1
PF=0結果操作數中1的個數為奇數時置0
28、測試指令TEST
指令的 匯編格式:TEST opr1,opr2
指令的基本功能:(opr1)與(opr2)
指令支持的尋址方式:兩個操作數不能同時為存儲器尋 址,即為除源操作數為立即數的情況外,源操作數和目的操作數必須有一個寄存器尋址方式。
指令對標志位的影響:令執行后CF和OF置零,AF無定義。
SF=1指令執行后的結果為負數(符號位為1)
SF=0指令執行后的結果為正數(符號位為0)
ZF=1指令執行后的結果為零
ZF=0指令執行后的結果不為零
PF=1結果操作數中1的個數為偶數時置1
PF=0結果操作數中1的個數為奇數時置0
二、移位指令
29、邏輯左移SHL (shift logical left)
指 令的匯編格式:SHL dst,cnt
指令的基本功能:SHL指令向左逐位移動cnt次,每次逐位移動后,最低位用0來補充,最高位移入CF。
指 令支持的尋址方式:目的操作數dst可以是除立即數外的任何尋址方式。移位次數(或位數)cnt=1時,1可以直接寫在指令中,cnt〉1時,cnt必須 放入CL寄存器中。
指令對標志位的影響:CF=移入的數值
OF=1當cnt=1時,移動后最高位的值發生變化。
OF=0當cnt=1時,移動時最高位的值未發生變化。
SF、ZF、PF根據移動后的結果設置。
30、邏輯右移SHR (shift logical right)
指令的匯編格式:SHR dst,cnt
指令的基本功能:SHR指令向右逐位移動cnt次,每次逐位移動后,最高位用0來補充,最低位移入CF。
指令支持的尋址方式:目的操作數dst可以是除立即數外的任何尋址方式。移位次數(或位 數)cnt=1時,1可以直接寫在指令中,cnt〉1時,cnt必須放入CL寄存器中。
指令對標志位的影響:CF=移入的數值
OF=1當cnt=1時,移動后最高位的值發生變化。
OF=0當cnt=1時,移動時最高位的值未發生變化。
SF、ZF、PF根據移動后的結果 設置。
31、算術左移SAL (shift arithmetic left)
指令的匯編格式:SAL dst cnt
指令的基本功能:SAL指令向左逐位移動cnt次,每次逐位移動后,最低位用0來補充,最高位移入CF。
指令支持的尋址方式:目的 操作數dst可以是除立即數外的任何尋址方式。移位次數(或位數)cnt=1時,1可以直接寫在指令中,cnt〉1時,cnt必須放入CL寄存器中。
指 令對標志位的影響:CF=移入的數值
OF=1當cnt=1時,移動后最高位的值發生變化。
OF=0當cnt=1時,移動時最高位的值未發生變化。
SF、ZF、PF根據移動后的結果設置。
32、算術右移SAR (shift arithmetic right)
指令的匯編格式:SAR dst,cnt
指令的基本功能:SAR指令向右逐位移動cnt次,每次逐位移動后,最高位用符號位來補充,最低位移入CF。
指令支持的尋址方式:目的操作數dst可以是除立即數外的任何尋址方式。移位次數(或位 數)cnt=1時,1可以直接寫在指令中,cnt〉1時,cnt必須放入CL寄存器中。
指令對標志位的影響:CF=移入的數值
OF=1當cnt=1時,移動后最高位的值發生變化。
OF=0當cnt=1時,移動時最高位的值未發生變化。
SF、ZF、PF根據移動后的結果 設置。
33、循環左移ROL (rotate left)
指令的匯編格式:ROL dst,cnt
指令的基本 功能:ROL對由dst指定的寄存器或存儲器操作數左移循環移動cnt所指定的次數,每左移一次,把最高位同時移入CF和操作數最低位。
指令支 持的尋址方式:目的操作數dst可以是除立即數外的任何尋址方式。移動次數(或位數)cnt=1時,1可以直接寫在指令中,cnt〉1時,cnt必須放入CL寄存器中。
指令對標志位的影響:CF=移入的數值
OF=1當cnt=1時,移動后最高位的值發生變化。
OF=0當cnt=1時,移動時最高位的值未發生變化。
SF、ZF、PF根據移動后的結果設置。
34、循環右移ROR (rotate right)
指令的匯編格式:ROR dst,cnt
指令的基本功能:ROR對由dst指定的寄存器或存儲器操作數右移循環移動cnt所指定的次數,每右移一次,把最低位同時移入CF和操作數最高位。
指令支持的尋址方式: 目的操作數dst可以是除立即數外的任何尋址方式。移動次數(或位數)cnt=1時,1可以直接寫在指令中,cnt>1時,cnt必須放入CL寄存 器中。
指令對標志位的影響:CF=移入的數值
OF=1當cnt=1時,移動后最高位的值發生變化。
OF=0當cnt=1時,移動時最高位的值未發生變化。
SF、ZF、PF根據移動后的結果設置。
35、帶進位的循環左移RCL (rotate left through carry)
指令的匯編格式:RCL dst,cnt
指令的基本功能:RCL對由dst指定的寄存器或存儲器操作數,連同進位標志CF左循環移動,m所指定的次數,每左移一次,把操作數的最高位移入CF,而CF中原有內容移入操作 數的最低位。
指定支持的尋址方式:目的操作數dst可以是除立即數外的任何尋址方式。移動次數(或位數)cnt=1時,1可以直接寫在指令 中,cnt〉1時,cnt必須放入CL寄存器中。
指令對標志位的影響:CF=移入的數值。
OF=1當cnt=1時,移動后最高位的值未發生變化。
OF=0當cnt=1時,移動后最高位的值發生變化。
SF、ZF、PF標志位不受影響。
36、 帶進位的循環右移RCR (rotate right through carry)
指令的匯編格式:RCR dst,cnt
指 令的基本功能:RCR對由dst指定的寄存器或存儲器操作數,連同進位標志CF右循環移動,m所指定的次數,每右移一次,把操作數的最高低位移入CF,而CF中原有內容移入操 作數的最高位。
指令支持的尋址方式:目的操作數dst可以是除立即數外的任何尋址方式。移動次數(或位數)cnt=1時,1可以直接寫入指令 中,cnt〉1時,cnt必須放入CL寄存器中。
指令對標志位的影響:CF=移入的數值。
OF=1當cnt=1時,操作數最高位的值未發生變化。
OF=0當cnt=1時,操作數最高位的值發生變化。
SF、ZF、PF標志位不受影響。
[串 處理指令]
一、設置方向標志指令
37、DF置零CLD (clear directionflag)
DF置 一STD (set direction flag)
指令的匯編格式:CLD
STD
指令的基本功能:CLD DF=0
STD DF=1
二、串處理指令
38、串傳送MOVSB / MOVSW (move string byte/word)
指 令的匯編格式:MOVSB
MOVSW
指令的基本功能:(ES:DI)<-(DS:SI)
(SI)<-(SI)+/-1(字 節)或+/-2(字)
(DI)<-(DI)+/-1(字節)或+/-2(字)
指令對條件碼的影響:不影響條件碼。
指令的特 殊要求:源串必須在數據段中,目的串必須在附加段中,串處理指令隱含的尋址方式是SI和DI寄存器的間接尋址方式。源串允許使用段跨越前綴來指定段。
39、 存串STOSB / STOSW (stroe from string byte/word)
指令的匯編格式:STOSB
STOSW
指 令的基本功能:(ES:DI)<-(AL)或(AX)
(DI)<-(DI)+/-1(字節)或+/-2(字)
指令對條件碼的 影響:不影響條件碼。
指令的特殊要求:源串必須在數據段中,目的串必須在附加段中,串處理指令隱含的尋址方式是SI和DI寄存器的間接尋址方式。 源串允許使用段跨越前綴來指定段。
40、取串LODSB / LODSW (load from string byte/word)
指 令的匯編格式:LODSB
LODSW
指令的基本功能:(AL)或(AX)<-(DS:SI)
(SI)<-(SI)+/-1(字 節)或+/-2(字)
指令對條件碼的影響:不影響條件碼。
指令的特殊要求:源串必須在數據段中,目的串必須在附加段中,串處理指令隱含的 尋址方式是SI和DI寄存器的間接尋址方式。源串允許使用段跨越前綴來指定段。
41、串比較CMPSB / CMPSW (compare string byte/word)
指令的匯編格式:CMPSB
CMPSW
指令的基本功能:(DS:SI)-(ES:DI)根據比較結果設置條件碼
(SI)<-(SI)+/-1(字節)或+/-2(字)
(DI)<-(DI)+/-1(字 節)或+/-2(字)
指令對條件碼的影響:SF=1減法結果為負數(符號位為1)
SF=0減法結果為正數(符號位為0)
ZF=1減法結果為零
ZF=0減法結果不為零
CF=1二進制減法運算中最高有效位向高位有借位(被減數小于減數,不夠減的情況)
CF=0二進制減法運算中最高有效為向高位無借位(被減數〉=減數,夠減的情況)
OF=1兩數符號相反(正數-負數,或負數-正數),而結果符號與減數相同。
OF=0同符號數相減時,或不同符號數相減,其結果符號與減數不同。
三、 循環指令
68、循環LOOP (loop)
指令的匯編格式:LOOP label
指令的基本功能:① (CX)←(CX)-1
②若(CX)≠0,則(IP)←(IP)當前+位移量,否則循環結束。
指令的特殊要求:循環指 令都是短轉移格式的指令,也就是說,位移量是用8位帶符號數來表示的,轉向地址在相對于當前IP值的-128 ~+127字節范圍之內。
69、 為零/相等時循環LOOPZ/LOOPE (loopwhile nonzero or equal)
指令的匯編格 式:LOOPNZ/LOOPNE label
指令的基本功能:① (CX)←(CX)-1
②若ZF=1且(CX)≠0,則(IP)←(IP)當前+位移量,否則循環結束。
指令的特殊要求:循環指令都是短轉移格式的指令,也就是說,位移量 是用8位帶符號數來表示的,轉向地址在相對于當前IP值的-128 ~+127字節范圍之內。
70、不為零/不相等時循環LOOPNZ/LOOPNE(loop while nonzero or not equal)
指令的匯編格式:LOOPNZ/LOOPNE label
指令的基本功能:① (CX)←(CX)-1
②若ZF=0且(CX)≠0,則(IP)←(IP)當前+位移量,否則循環結束。
指令的特殊要求:循環指令都是短轉移格式的指令,也就是說,位移量 是用8位帶符號數來表示的,轉向地址在相對于當前IP值的-128 ~+127字節范圍之內。
回頁首
CPU常見寄存器介紹
32位CPU所含有的寄存器有:
4個數據寄存器(EAX、EBX、ECX和EDX)
2個變址和指針寄存器(ESI和EDI) 2個指針寄存器(ESP和EBP)
6個段寄存器(ES、CS、SS、DS、FS和GS)
1個指令指針寄存器(EIP) 1個標志寄存器(EFlags)
1、數據寄存器
數據寄存器主要用來保存操作數和運算結果等信息,從而節省讀取操作數所需占用總線和訪問存儲器的時間。
32位CPU有4個32位的通用寄存器EAX、EBX、ECX和EDX。對低16位數據的存取,不會影響高16位的數據。這些
低16位寄存 器分別命名為:AX、BX、CX和DX,它和先前的CPU中的寄存器相一致。
4個16位寄存器又可分割成8個獨立的8位寄存器(AX:AH-AL、BX:BH-BL、CX:CH-CL、DX:DH-DL),每個寄
存 器都有自己的名稱,可獨立存取。程序員可利用數據寄存器的這種“可分可合”的特性,靈活地處理字/字
節的信息。
寄存器AX和AL通常稱為累加器(Accumulator),用累加器進行的操作可能需要更少時間。累加器可用于乘、
除、輸入/輸出等 操作,它們的使用頻率很高;
寄存器BX稱為基地址寄存器(BaseRegister)。它可作為存儲器指針來使用;
寄存器CX稱為計數寄存器(CountRegister)。在循環和字符串操作時,要用它來控制循環次數;在位操作
中,當移多位時,要用CL來指明 移位的位數;
寄存器DX稱為數據寄存器(DataRegister)。在進行乘、除運算時,它可作為默認的操作數參與運算,也
可 用于存放I/O的端口地址。
在16位CPU中,AX、BX、CX和DX不能作為基址和變址寄存器來存放存儲單元的地址,但在32位CPU中,其32位
寄存器EAX、EBX、ECX和EDX不僅可傳送數據、暫存數據保存算術邏輯運算結果,而且也可作為指針寄存器,
所以,這些32位寄存器更具有通用性。
2、變址寄存器
32位CPU有2個32位通用寄存器ESI和EDI。其低16位對應先前CPU中的SI和DI,對低16位數據的存取,不影響
高16位的數 據。
寄存器ESI、EDI、SI和DI稱為變址寄存器(Index Register),它們主要用于存放存儲單元在段內的偏移量,
用它們可實 現多種存儲器操作數的尋址方式,為以不同的地址形式訪問存儲單元提供方便。
變址寄存器不可分割成8位寄存器。作為通用寄存器,也可存儲算術邏輯運算的操作數和運算結果。
它們可作一般的存儲器指針使用。在字符串操作指令的執行過程中,對它們有特定的要求,而且還具有特
殊的功能。
3、指針寄存器
32位CPU有2個32位通用寄存器EBP和ESP。其低16位對應先前CPU中的SBP和SP,對低16位數據的存取,不影
響高16位的 數據。
寄存器EBP、ESP、BP和SP稱為指針寄存器(Pointer Register),主要用于存放堆棧內存儲單元的偏移量,
用它們可實 現多種存儲器操作數的尋址方式,為以不同的地址形式訪問存儲單元提供方便。
指針寄存器不可分割成8位寄存器。作為通用寄存器,也可存儲算術邏輯運算的操作數和運算結果。
它們主要用于訪問堆棧內的存儲單元,并且規定:
BP為基指針(Base Pointer)寄存器,用它可直接存取堆棧中的數據;
SP為堆棧指針(Stack Pointer)寄存器,用它只可訪問棧頂。
4、段寄存器
段寄存器是根據內存分段的管理模式而設置的。內存單元的物理地址由段寄存器的值和一個偏移量組合而成
的,這樣可用兩個較少位數的值組合成一 個可訪問較大物理空間的內存地址。
CPU內部的段寄存器:
CS——代碼段寄存器(Code Segment Register),其值為代碼段的段值;
DS ——數據段寄存器(Data Segment Register),其值為數據段的段值;
ES——附加段寄存器(Extra Segment Register),其值為附加數據段的段值;
SS——堆棧段寄存器(Stack Segment Register),其值為堆棧段的段值;
FS——附加段寄存器(Extra Segment Register),其值為附加數據段的段值;
GS——附加段寄存器(Extra Segment Register),其值為附加數據段的段值。
在16位CPU系統中,它只有4個段寄存器,所以,程序在任何時刻至多有4個正在使用的段可直接訪問;在32位
微機系統中,它有6個段寄存 器,所以,在此環境下開發的程序最多可同時訪問6個段。
32位CPU有兩個不同的工作方式:實方式和保護方式。在每種方式下,段寄存器的作用是不同的。有關規定簡
單描述如下:
實方式: 前4個段寄存器CS、DS、ES和SS與先前CPU中的所對應的段寄存器的含義完全一致,內存單元的邏輯
地址仍為“段值:偏移 量”的形式。為訪問某內存段內的數據,必須使用該段寄存器和存儲單元的偏移量。
保護方式: 在此方式下,情況要復雜得多,裝入段寄存器的不再是段值,而是稱為“選擇子”(Selector)的某個值。。
5、指令指針寄存器
32位CPU把指令指針擴展到32位,并記作EIP,EIP的低16位與先前CPU中的IP作用相同。
指令指針EIP、IP(Instruction Pointer)是存放下次將要執行的指令在代碼段的偏移量。在具有預取指令功
能的系統 中,下次要執行的指令通常已被預取到指令隊列中,除非發生轉移情況。所以,在理解它們的功能
時,不考慮存在指令隊列的情況。
在實方式下,由于每個段的最大范圍為64K,所以,EIP中的高16位肯定都為0,此時,相當于只用其低16位
的IP來反映程序中指令的執 行次序。
6、標志寄存器
一、運算結果標志位
1、進位標志CF(Carry Flag)
進位標志CF主要用來反映運算是否產生進位或借位。如果運算結果的最 高位產生了一個進位或借位,那么,其值為1,否則其值為0。
使用該標志位的情況有:多字(字節)數的加減運算,無符號數的大小比較運算,移位操作,字(字節)之間移位,專門改變CF值的指令等。
2、奇偶標志PF(Parity Flag)
奇偶標志PF用于反映運算結果中“1”的個數的奇偶性。如果“1”的個數為偶數,則PF的值為1,否則其值為0。
利用PF可進行奇偶校驗檢查,或產生奇偶校驗位。在數據傳送過程中,為了提供傳送的可靠性,如果采用奇偶校驗的方法,就可使用該標志位。
3、輔助進位標志AF(Auxiliary Carry Flag)
在發生下列情況時,輔助進位標志AF的值被置為1,否則其值為0:
(1)、在字操作時,發生低字節向高字節進位或借位時;
(2)、在字節操作時,發生低4位向高4位進位或借位時。
對以上6個運算結果標志位,在一般編程情況下,標志位CF、ZF、SF和OF的使用頻率較高,而標志位PF和AF的使用頻率較低。
4、零標志ZF(Zero Flag)
零標志ZF用來反映運算結果是否為0。如果運算結果為0,則其值為1,否則其值為0。在判斷運算結果是否為0時,可使用此標志位。
5、符號標志SF(Sign Flag)
符號標志SF用來反映運算結果的符號位,它與運算結果的最高位相同。在微機系統中,有符號數采用補 碼表示法,所以,SF也就反映運算結果的正負號。運算結果為正數時,SF的值為0,否則其值為1。
6、溢出標志OF(Overflow Flag)
溢出標志OF用于反映有符號數加減運算所得結果是否溢出。如果運算結果超過當前運算位數所 能表示的范圍,則稱為溢出,OF的值被置為1,否則,OF的值被清為0。
“溢出”和“進位”是兩個不同含義的概念,不要混淆。如果不太清楚的話,請查閱《計算機組成原理》課程中的有關章節。
二、狀態控制標志位
狀態控制標志位是用來控制CPU操作的,它們要通過專門的指令才能使之發生改變。
1、追蹤標志TF(Trap Flag)
當追蹤標志TF被置為1時,CPU進入單步執行方式,即每執行一條指令,產生一個單步中斷請求。這 種方式主要用于程序的調試。
指令系統中沒有專門的指令來改變標志位TF的值,但程序員可用其它辦法來改變其值。
2、中斷允許標志IF(Interrupt-enable Flag)
中斷允許標志IF是用來決定CPU是否響應CPU外部的可屏蔽中斷發 出的中斷請求。但不管該標志為何值,CPU都必須響應CPU外部的不可屏蔽中斷所發出的中斷請求,以及CPU內部產生的中斷請求。具體規定如下:
(1)、當IF=1時,CPU可以響應CPU外部的可屏蔽中斷發出的中斷請求;
(2)、當IF=0時,CPU不響應CPU外部的可屏蔽中斷發出的中斷請求。
CPU的指令系統中也有專門的指令來改變標志位IF的值。
3、方向標志DF(Direction Flag)
方向標志DF用來決定在串操作指令執行時有關指針寄存器發生調整的方向。具體規定在第5.2.11節——字符串操作指令——中給出。在微機的指令系統中,還提供了專門的指令來改變標志位DF的值。
三、32位標志寄存器增加的標志位
1、I/O特權標志IOPL(I/O PrivilegeLevel)
I/O特權標志用兩位二 進制位來表示,也稱為I/O特權級字段。該字段指定了要求執行I/O指令的特權級。如果當前的特權級別在數值上小于等于IOPL的值,那么,該I/O指令 可執行,否則將發生一個保護異常。
2、嵌套任務標志NT(Nested Task)
嵌套任務標志NT用來控制中斷返回指令IRET的執行。具體規定如下:
(1)、當NT=0,用堆棧中保存的值恢復EFLAGS、CS和EIP,執行常規的中斷返回操作;
(2)、當NT=1,通過任務轉換實現中斷返回。
3、重啟動標志RF(Restart Flag)
重啟動標志RF用來控制是否接受調試故障。規定:RF=0時,表示“接受”調試故障,否則 拒絕之。在成功執行完一條指令后,處理機把RF置為0,當接受到一個非調試故障時,處理機就把它置為1。
4、虛擬8086方式標志VM(Virtual 8086 Mode)
如果該標志的值為1,則表示處理機處于虛擬的8086方式下的工作狀態,否則,處理機處于一般保護方式下的工作狀態。
轉載于:https://www.cnblogs.com/Zblogs/p/3261213.html
總結
                            
                        - 上一篇: bogon是什么意思_跟踪IP出现bog
 - 下一篇: 打印cad文件图纸如何进行页面设置