導航:首頁 > 比特幣區 > btc匯編

btc匯編

發布時間:2024-05-16 22:03:13

1. 匯編程序中BTRSC什麼意思

格式:BT DEST,SRC
BTC DEST,SRC
BTR DEST,SRC
BTS DEST,SRC
功能:按照源操作指定的位號,測試目的操作數,當指令執行時,被測試位的狀態被復制到進位標志CF。
BT將SRC指定的DEST中一位的數值復制到CF。BTC將SRC指定的DEST中一位的數值復制到CF,且將DEST中該位取反。BTR將SRC 指定的DEST中一位的數值復制到CF,且將DEST中該位復位。BTS將SRC指定的DEST中一位的數值復制到CF,且將DEST中該位置位。
目的操作數為16位或32位通用寄存器或存儲器,源操作數為16位或32位通用寄存器,以及8位立即數,當源操作數為通用寄存器時,必須同目的操作數類型一致。源操作數SRC以兩種方式給出目的操作數的位號,即
· SRC為8位立即數,以二進制形式直接給出要操作的位號;
· SRC為通用寄存器,如果DEST為通用寄存器,則SRC中二進制值直接給出要操作的位號。如果DEST為存儲器操作數,通用寄存器SRC為帶符號整數, SRC的值除以DEST的長度所得到的商作為DEST的相對偏移量,余數直接作為要操作的位號。DEST的有效地址為DEST給出的偏移地址和DEST相 對偏移量之和。
BT,BTC,BTR,BTS指令影響CF標志位,其它標志位無定義。

2. 匯編指令集…要具體詳細!

1. 通用數據傳送指令.
MOV 傳送字或位元組.
MOVSX 先符號擴展,再傳送.
MOVZX 先零擴展,再傳送.

MOVSX reg16,r/m8 ; o16 0F BE /r [386]
MOVSX reg32,r/m8 ; o32 0F BE /r [386]
MOVSX reg32,r/m16 ; o32 0F BF /r [386]

MOVZX reg16,r/m8 ; o16 0F B6 /r [386]
MOVZX reg32,r/m8 ; o32 0F B6 /r [386]
MOVZX reg32,r/m16 ; o32 0F B7 /r [386]

PUSH 把字壓入堆棧.
POP 把字彈出堆棧.
PUSHA 把AX,CX,DX,BX,SP,BP,SI,DI依次壓入堆棧.
POPA 把DI,SI,BP,SP,BX,DX,CX,AX依次彈出堆棧.
PUSHAD 把EAX,ECX,EDX,EBX,ESP,EBP,ESI,EDI依次壓入堆棧.
POPAD 把EDI,ESI,EBP,ESP,EBX,EDX,ECX,EAX依次彈出堆棧.
BSWAP 交換32位寄存器里位元組的順序
XCHG 交換字或位元組.( 至少有一個操作數為寄存器,段寄存器不可作為操作數)
CMPXCHG 比較並交換操作數.( 第二個操作數必須為累加器AL/AX/EAX )
XADD 先交換再累加.( 結果在第一個操作數里 )
XLAT 位元組查表轉換.
── BX 指向一張 256 位元組的表的起點, AL 為表的索引值 (0-255,即
0-FFH); 返回 AL 為查表結果. ( [BX+AL]->AL )
2. 輸入輸出埠傳送指令.
IN I/O埠輸入. ( 語法: IN 累加器, {埠號│DX} )
OUT I/O埠輸出. ( 語法: OUT {埠號│DX},累加器 )
輸入輸出埠由立即方式指定時, 其范圍是 0-255; 由寄存器 DX 指定時,
其范圍是 0-65535.
3. 目的地址傳送指令.
LEA 裝入有效地址.
例: LEA DX,string ;把偏移地址存到DX.
LDS 傳送目標指針,把指針內容裝入DS.
例: LDS SI,string ;把段地址:偏移地址存到DS:SI.
LES 傳送目標指針,把指針內容裝入ES.
例: LES DI,string ;把段地址:偏移地址存到ES:DI.
LFS 傳送目標指針,把指針內容裝入FS.
例: LFS DI,string ;把段地址:偏移地址存到FS:DI.
LGS 傳送目標指針,把指針內容裝入GS.
例: LGS DI,string ;把段地址:偏移地址存到GS:DI.
LSS 傳送目標指針,把指針內容裝入SS.
例: LSS DI,string ;把段地址:偏移地址存到SS:DI.
4. 標志傳送指令.
LAHF 標志寄存器傳送,把標志裝入AH.
SAHF 標志寄存器傳送,把AH內容裝入標志寄存器.
PUSHF 標志入棧.
POPF 標志出棧.
PUSHD 32位標志入棧.
POPD 32位標志出棧.

二、算術運算指令
ADD 加法.
ADC 帶進位加法.
INC 加 1.
AAA 加法的ASCII碼調整.
DAA 加法的十進制調整.
SUB 減法.
SBB 帶借位減法.
DEC 減 1.
NEC 求反(以 0 減之).
CMP 比較.(兩操作數作減法,僅修改標志位,不回送結果).
AAS 減法的ASCII碼調整.
DAS 減法的十進制調整.
MUL 無符號乘法.
IMUL 整數乘法.
以上兩條,結果回送AH和AL(位元組運算),或DX和AX(字運算),
AAM 乘法的ASCII碼調整.
DIV 無符號除法.
IDIV 整數除法.
以上兩條,結果回送:
商回送AL,余數回送AH, (位元組運算);
或 商回送AX,余數回送DX, (字運算).
AAD 除法的ASCII碼調整.
CBW 位元組轉換為字. (把AL中位元組的符號擴展到AH中去)
CWD 字轉換為雙字. (把AX中的字的符號擴展到DX中去)
CWDE 字轉換為雙字. (把AX中的字元號擴展到EAX中去)
CDQ 雙字擴展. (把EAX中的字的符號擴展到EDX中去)

三、邏輯運算指令
AND 與運算.
OR 或運算.
XOR 異或運算.
NOT 取反.
TEST 測試.(兩操作數作與運算,僅修改標志位,不回送結果).
SHL 邏輯左移.
SAL 算術左移.(=SHL)
SHR 邏輯右移.
SAR 算術右移.(=SHR)
ROL 循環左移.
ROR 循環右移.
RCL 通過進位的循環左移.
RCR 通過進位的循環右移.
以上八種移位指令,其移位次數可達255次.
移位一次時, 可直接用操作碼. 如 SHL AX,1.
移位>1次時, 則由寄存器CL給出移位次數.
如 MOV CL,04
SHL AX,CL

四、串指令
DS:SI 源串段寄存器 :源串變址.
ES:DI 目標串段寄存器:目標串變址.
CX 重復次數計數器.
AL/AX 掃描值.
D標志 0表示重復操作中SI和DI應自動增量; 1表示應自動減量.
Z標志 用來控制掃描或比較操作的結束.
MOVS 串傳送.
( MOVSB 傳送字元. MOVSW 傳送字. MOVSD 傳送雙字. )
CMPS 串比較.
( CMPSB 比較字元. CMPSW 比較字. )
SCAS 串掃描.
把AL或AX的內容與目標串作比較,比較結果反映在標志位.
LODS 裝入串.
把源串中的元素(字或位元組)逐一裝入AL或AX中.
( LODSB 傳送字元. LODSW 傳送字. LODSD 傳送雙字. )
STOS 保存串.
是LODS的逆過程.
REP 當CX/ECX<>0時重復.
REPE/REPZ 當ZF=1或比較結果相等,且CX/ECX<>0時重復.
REPNE/REPNZ 當ZF=0或比較結果不相等,且CX/ECX<>0時重復.
REPC 當CF=1且CX/ECX<>0時重復.
REPNC 當CF=0且CX/ECX<>0時重復.

五、程序轉移指令
1>無條件轉移指令 (長轉移)
JMP 無條件轉移指令
CALL 過程調用
RET/RETF過程返回.
2>條件轉移指令 (短轉移,-128到+127的距離內)
( 當且僅當(SF XOR OF)=1時,OP1 JA/JNBE 不小於或不等於時轉移.
JAE/JNB 大於或等於轉移.
JB/JNAE 小於轉移.
JBE/JNA 小於或等於轉移.
以上四條,測試無符號整數運算的結果(標志C和Z).
JG/JNLE 大於轉移.
JGE/JNL 大於或等於轉移.
JL/JNGE 小於轉移.
JLE/JNG 小於或等於轉移.
以上四條,測試帶符號整數運算的結果(標志S,O和Z).
JE/JZ 等於轉移.
JNE/JNZ 不等於時轉移.
JC 有進位時轉移.
JNC 無進位時轉移.
JNO 不溢出時轉移.
JNP/JPO 奇偶性為奇數時轉移.
JNS 符號位為 "0" 時轉移.
JO 溢出轉移.
JP/JPE 奇偶性為偶數時轉移.
JS 符號位為 "1" 時轉移.
3>循環控制指令(短轉移)
LOOP CX不為零時循環.
LOOPE/LOOPZ CX不為零且標志Z=1時循環.
LOOPNE/LOOPNZ CX不為零且標志Z=0時循環.
JCXZ CX為零時轉移.
JECXZ ECX為零時轉移.
4>中斷指令
INT 中斷指令
INTO 溢出中斷
IRET 中斷返回
5>處理器控制指令
HLT 處理器暫停, 直到出現中斷或復位信號才繼續.
WAIT 當晶元引線TEST為高電平時使CPU進入等待狀態.
ESC 轉換到外處理器.
LOCK 封鎖匯流排.
NOP 空操作.
STC 置進位標志位.
CLC 清進位標志位.
CMC 進位標志取反.
STD 置方向標志位.
CLD 清方向標志位.
STI 置中斷允許位.
CLI 清中斷允許位.

六、偽指令
DW 定義字(2位元組).
PROC 定義過程.
ENDP 過程結束.
SEGMENT 定義段.
ASSUME 建立段寄存器定址.
ENDS 段結束.
END 程序結束.

七、位操作指令,處理器控制指令
1.位操作指令,8086新增的一組指令,包括位測試,位掃描。BT,BTC,BTR,BTS,BSF,BSR
1.1 BT(Bit Test),位測試指令,指令格式:
BT OPRD1,OPRD2,規則:操作作OPRD1可以是16位或32位的通用寄存器或者存儲單元。操作數OPRD2必須是8位立即數或者是與OPRD1操作數長度相等的通用寄存器。如果用OPRD2除以OPRD1,假設商存放在Divd中,余數存放在Mod中,那麼對OPRD1操作數要進行測試的位號就是Mod,它的主要功能就是把要測試位的值送往CF,看幾個簡單的例子:
1.2 BTC(Bit Test And Complement),測試並取反用法和規則與BT是一樣,但在功能有些不同,它不但將要測試位的值送往CF,並且還將該位取反。
1.3 BTR(Bit Test And Reset),測試並復位,用法和規則與BT是一樣,但在功能有些不同,它不但將要測試位的值送往CF,並且還將該位復位(即清0)。
1.4 BTS(Bit Test And Set),測試並置位,用法和規則與BT是一樣,但在功能有些不同,它不但將要測試位的值送往CF,並且還將該位置位(即置1)。
1.5 BSF(Bit Scan Forward),順向位掃描,指令格式:BSF OPRD1,OPRD2,功能:將從右向左(從最低位到最高位)對OPRD2操作數進行掃描,並將第一個為1的位號送給操作數OPRD1。操作數OPRD1,OPRD2可以是16位或32位通用寄存器或者存儲單元,但OPRD1和OPRD2操作數的長度必須相等。
1.6 BSR(Bit Scan Reverse),逆向位掃描,指令格式:BSR OPRD1,OPRD2,功能:將從左向右(從最高位到最低位)對OPRD2操作數進行掃描,並將第一個為1的位號送給操作數OPRD1。操作數OPRD1,OPRD2可以是16位或32位通用寄存器或存儲單元,但OPRD1和OPRD2操作數的長度必須相等。
1.7 舉個簡單的例子來說明這6條指令:

AA DW 1234H,5678H
BB DW 9999H,7777H
MOV EAX,12345678H
MOV BX,9999H
BT EAX,8;CF=0,EAX保持不變
BTC EAX,8;CF=0,EAX=12345778H
BTR EAX,8;CF=0,EAX=12345678H
BTS EAX,8;CF=0,EAX=12345778H
BSF AX,BX;AX=0
BSR AX,BX;AX=15

BT WORD PTR [AA],4;CF=1,[AA]的內容不變
BTC WORD PTR [AA],4;CF=1,[AA]=1223H
BTR WORD PTR [AA],4;CF=1,[AA]=1223H
BTS WORD PTR [AA],4;CF=1,[AA]=1234H
BSF WORD PTR [AA],BX;[AA]=0;
BSR WORD PTR [AA],BX;[AA]=15(十進制)

BT DWORD PTR [BB],12;CF=1,[BB]的內容保持不變
BTC DWORD PTR [BB],12;CF=1,[BB]=76779999H
BTR DWORD PTR [BB],12;CF=1,[BB]=76779999H
BTS DWORD PTR [BB],12;CF=1,[BB]=77779999H
BSF DWORD PTR [BB],12;[BB]=0
BSR DWORD PTR [BB],12;[BB]=31(十進制)

2.處理器控制指令
處理器控制指令主要是用來設置/清除標志,空操作以及與外部事件同步等。
2.1 CLC,將CF標志位清0。
2.2 STC,將CF標志位置1。
2.3 CLI,關中斷。
2.4 STI,開中斷。
2.5 CLD,清DF=0。
2.6 STD,置DF=1。
2.7 NOP,空操作,填補程序中的空白區,空操作本身不執行任何操作,主要是為了保持程序的連續性。
2.8 WAIT,等待BUSY引腳為高。
2.9 LOCK,封鎖前綴可以鎖定其後指令的操作數的存儲單元,該指令在指令執行期間一直有效。在多任務環境中,可以用它來保證獨占其享內存,只有以下指令才可以用LOCK前綴:

3. 匯編語言(面向機器的程式設計語言)詳細資料大全

匯編語言(assembly language)是一種用於電子計算機、微處理器、微控制器或其他可程式器件的低級語言,亦稱為符號語言。在匯編語言中,用助記符(Mnemonics)代替機器指令的操作碼,用地址符號(Symbol)或標號(Label)代替指令或運算元的地址。在不同的設備中,匯編語言對應著不同首缺如的機器語言指令集,通過匯編過程轉換成機器指令。普遍地說,特定的匯編語言和特定的機器語言指令集是一一對應的,不同平台之間不可直接移植。

許多匯編程式為程式開發、匯編控制、輔助調試提供了額外的支持機制。有的匯編語言編程工具經常會提供宏,它們也被稱為宏匯編器。

匯編語言不像其他大多數的程式設計語言一樣被廣泛用於程式設計。在今天的實際套用中,它通常被套用在底層,硬體操作和高要求的程式最佳化的場合。驅動程式、嵌入式作業系統和實時運行程式都需要匯編語言。

基本介紹 中文名 :匯編語言 外文名 :Assembly Language 學科 :軟體工扮螞程 產生年代 :20世紀50年代 編譯方式 :匯編 發展歷程,語言特點,總體特點,優點,缺點,語言組成,數據傳送指令,整數和邏輯運算指令,移位指令,位操作指令,條件設定指令,控制轉移指令,串操作指令,輸入輸出指令,相關技術,匯編器,編譯環境,發展前景,實際套用,經典教材,x86處理器,ARM及單片機, 發展歷程 說到匯編語言的產生,首先要講一下機器語言。機器語言是機器指令的集合。機器指令展開來講就是一台機器可以正確執行的命令。電子計算機的機器指令是一列二進制數字。計算機將之轉變為一列高低電平,以使計算機的電子器件受到驅動,進行運算。 上面所說的計算機指的是可以執行機器指令,進行運算的機器。這是早期計算機的概念。在我們常用的PC機中,有一個晶片來完成上面所說的計算機的功能。這個晶片就是我們常說的CPU(Central Processing Unit,中央處理單元)。每一種微處理器,由於硬體設計和內部結構的不同,就需要用不同的電平脈沖來控制,使它工作。所以每一種微處理器都有自己的機器指令集,也就是機器語言。 早期的程式設計均使用機器語言。程式設計師們將用0, 1數字編成的程式代碼打在紙帶或卡片上,1打孔,0不打孔,再將程式通過紙帶機或卡片機輸入計算機,進行運算。這樣的機器語言由純粹的0和1構成,十分復雜,不方便閱讀和修改,也容易產生錯誤。程式設計師們很快就發現了使用機器語言帶來的麻煩,它們難於辨別和記憶,給整個產業的發展帶來了障礙,於是匯編語言產生了。 匯編語言的主體是匯編指令。匯編指令和機器指令的差別在於指令的表示方法上。匯編指令是機器指令便於記憶的書寫格式。 操作:暫存器BX的內容送到AX中1000100111011000機器指令movax,bx匯編指令 此後,程式設計師們就用匯編指令編寫源程式。可是,計算機能讀懂的只有機器指令,那麼如何讓計算機執行程式設計師用匯編指令編寫的程式呢?這時,就需要有一個能夠將匯編指令轉換成機器指令的翻譯程式,這樣的程式我們稱其為編譯器。程式設計師用匯編語言寫出源程式,再用匯編編譯器將其編譯為機器碼,由計算機最終執行。 工作過程 語言特點 匯編語言是直接面向處理器(Processor)的程式設計語言。處理器是在指令的控制下工作的,處理器可以識別的每一條指令稱為機器指令。每一種處理器都有自己可以識別的一整套指令,稱為指令集。處理器執行指令時,根據不同的指令採取不同的動作,完成不同的者啟功能,既可以改變自己內部的工作狀態,也能控制其它外圍電路的工作狀態。 匯編語言的另一個特點就是它所操作的對象不是具體的數據,而是暫存器或者存儲器,也就是說它是直接和暫存器和存儲器打交道,這也是為什麼匯編語言的執行速度要比其它語言快,但同時這也使編程更加復雜,因為既然數據是存放在暫存器或存儲器中,那麼必然就存在著定址方式,也就是用什麼方法找到所需要的數據。例如上面的例子,我們就不能像高級語言一樣直接使用數據,而是先要從相應的暫存器AX、BX 中把數據取出。這也就增加了編程的復雜性,因為在高級語言中定址這部分工作是由編譯系統來完成的,而在匯編語言中是由程式設計師自己來完成的,這無異增加了編程的復雜程度,降低了程式的可讀性。 再者,匯編語言指令是機器指令的一種符號表示,而不同類型的CPU 有不同的機器指令系統,也就有不同的匯編語言,所以,匯編語言程式與機器有著密切的關系。所以,除了同系列、不同型號CPU 之間的匯編語言程式有一定程度的可移植性之外,其它不同類型(如:小型機和微機等)CPU 之間的匯編語言程式是無法移植的,也就是說,匯編語言程式的通用性和可移植性要比高級語言程式低。 正因為匯編語言有「與機器相關性」的特性,程式設計師用匯編語言編寫程式時,可充分對機器內部的各種資源進行合理的安排,讓它們始終處於最佳的使用狀態。這樣編寫出來的程式執行代碼短、執行速度快。匯編語言是各種程式語言中與硬體關系最密切、最直接的一種,在時間和空間的效率上也最高的一種,它是高等院校計算機套用技術必修的專業課程之一,對於訓練學生掌握程式設計技術,熟悉上機操作和程式調試技術有重要作用 總體特點 1.機器相關性 這是一種面向機器的低級語言,通常是為特定的計算機或系列計算機專門設計的。因為是機器指令的符號化表示,故不同的機器就有不同的匯編語言。使用匯編語言能面向機器並較好地發揮機器的特性,得到質量較高的程式。 2.高速度和高效率 匯編語言保持了機器語言的優點,具有直接和簡捷的特點,可有效地訪問、控制計算機的各種硬體設備,如磁碟、存儲器、CPU、I/O連線埠等,且佔用記憶體少,執行速度快,是高效的程式設計語言。 3.編寫和調試的復雜性 由於是直接控制硬體,且簡單的任務也需要很多匯編語言語句,因此在進行程式設計時必須面面俱到,需要考慮到一切可能的問題,合理調配和使用各種軟、硬體資源。這樣,就不可避免地加重了程式設計師的負擔。與此相同,在程式調試時,一旦程式的運行出了問題,就很難發現。 優點 1、因為用匯編語言設計的程式最終被轉換成機器指令,故能夠保持機器語言的一致性,直接、簡捷,並能像機器指令一樣訪問、控制計算機的各種硬體設備,如磁碟、存儲器、CPU、I/O連線埠等。使用匯編語言,可以訪問所有能夠被訪問的軟、硬體資源。 2、目標代碼簡短,佔用記憶體少,執行速度快,是高效的程式設計語言,經常與高級語言配合使用,以改善程式的執行速度和效率,彌補高級語言在硬體控制方面的不足,套用十分廣泛。 缺點 1、匯編語言是面向機器的,處於整個計算機語言層次結構的底層,故被視為一種低級語言,通常是為特定的計算機或系列計算機專門設計的。不同的處理器有不同的匯編語言語法和編譯器,編譯的程式無法在不同的處理器上執行,缺乏可移植性; 2、難於從匯編語言代碼上理解程式設計意圖,可維護性差,即使是完成簡單的工作也需要大量的匯編語言代碼,很容易產生bug,難於調試; 3、使用匯編語言必須對某種處理器非常了解,而且只能針對特定的體系結構和處理器進行最佳化,開發效率很低,周期長且單調。 語言組成 數據傳送指令 這部分指令包括通用數據傳送指令MOV、條件傳送指令CMOV 、堆疊操作指令PUSH/PUSHA/PUSHAD/POP/POPA/POPAD、交換指令XCHG/XLAT/BSWAP、地址或段描述符選擇子傳送指令LEA/LDS/LES/LFS/LGS/LSS等。注意,CMOV不是一條具體的指令,而是一個指令簇,包括大量的指令,用於根據EFLAGS暫存器的某些位狀態來決定是否執行指定的傳送操作。 整數和邏輯運算指令 這部分指令用於執行算術和邏輯運算,包括加法指令ADD/ADC、減法指令SUB/SBB、加一指令INC、減一指令DEC、比較操作指令CMP、乘法指令MUL/IMUL、除法指令DIV/IDIV、符號擴展指令CBW/CWDE/CDQE、十進制調整指令DAA/DAS/AAA/AAS、邏輯運算指令NOT/AND/OR/XOR/TEST等。 移位指令 這部分指令用於將暫存器或記憶體運算元移動指定的次數。包括邏輯左移指令SHL、邏輯右移指令SHR、算術左移指令SAL、算術右移指令SAR、循環左移指令ROL、循環右移指令ROR等。 位操作指令 這部分指令包括位測試指令BT、位測試並置位指令BTS、位測試並復位指令BTR、位測試並取反指令BTC、位向前掃描指令BSF、位向後掃描指令BSR等。 條件設定指令 這不是一條具體的指令,而是一個指令簇,包括大約30條指令,用於根據EFLAGS暫存器的某些位狀態來設定一個8位的暫存器或者記憶體運算元。比如SETE/SETNE/SETGE等等。 控制轉移指令 這部分包括無條件轉移指令JMP、條件轉移指令J /JCXZ、循環指令LOOP/LOOPE/LOOPNE、過程調用指令CALL、子過程返回指令RET、中斷指令INTn、INT3、INTO、IRET等。注意,J 是一個指令簇,包含了很多指令,用於根據EFLAGS暫存器的某些位狀態來決定是否轉移;INT n是軟中斷指令,n可以是0到255之間的數,用於指示中斷向量號。 串操作指令 這部分指令用於對數據串進行操作,包括串傳送指令MOVS、串比較指令CMPS、串掃描指令SCANS、串載入指令LODS、串保存指令STOS,這些指令可以有選擇地使用REP/REPE/REPZ/REPNE和REPNZ的前綴以連續操作。 輸入輸出指令 這部分指令用於同外圍設備交換數據,包括連線埠輸入指令IN/INS、連線埠輸出指令OUT/OUTS。 高級語言輔助指令 這部分指令為高級語言的編譯器提供方便,包括創建棧幀的指令ENTER和釋放棧幀的指令LEAVE。 控制和特權指令 這部分包括無操作指令NOP、停機指令HLT、等待指令WAIT/MWAIT、換碼指令ESC、匯流排封鎖指令LOCK、記憶體范圍檢查指令BOUND、全局描述符表操作指令LGDT/SGDT、中斷描述符表操作指令LIDT/SIDT、局部描述符表操作指令LLDT/SLDT、描述符段界限值載入指令LSR、描述符訪問權讀取指令LAR、任務暫存器操作指令LTR/STR、請求特權級調整指令ARPL、任務切換標志清零指令CLTS、控制暫存器和調試暫存器數據傳送指令MOV、高速快取控制指令INVD/WBINVD/INVLPG、型號相關暫存器讀取和寫入指令RDMSR/WRMSR、處理器信息獲取指令CPUID、時間戳讀取指令RDTSC等。 浮點和多媒體指令 這部分指令用於加速浮點數據的運算,以及用於加速多媒體數據處理的單指令多數據(SIMD及其擴展SSEx)指令。這部分指令數據非常龐大,無法一一列舉,請自行參考INTEL手冊。 虛擬機擴展指令 這部分指令包括INVEPT/INVVPID/VMCALL/VMCLEAR/VMLAUNCH/VMRESUME/VMPTRLD/VMPTRST/VMREAD/VMWRITE/VMXOFF/VMON等。 相關技術 匯編器 典型的現代 匯編器 (assembler)建造目標代碼,由解譯組語指令集的易記碼(mnemonics)到操作碼(OpCode),並解析符號名稱(symbolic names)成為存儲器地址以及其它的實體。使用符號參考是匯編器的一個重要特徵,它可以節省修改程式後人工轉址的乏味耗時計算。基本就是把機器碼變成一些字母而已,編譯的時候再把輸入的指令字母替換成為晦澀難懂機器碼。 編譯環境 用匯編語言等非機器語言書寫好的符號程式稱為源程式,匯編語言編譯器的作用是將源程式翻譯成目標程式。目標程式是機器語言程式,當它被安置在記憶體的預定位置上後,就能被計算機的CPU處理和執行。 匯編的調試環境總的來說比較少,也很少有非常好的編譯器。編譯器的選擇依賴於目標處理器的類型和具體的系統平台。一般來說,功能良好的編譯器用起來應當非常方便,比如,應當可以自動整理格式、語法高亮顯示,集編譯、連結和調試為一體,方便實用。 對於廣泛使用的個人計算機來說,可以自由選擇的匯編語言編譯器有MASM、NASM、TASM、GAS、FASM、RADASM等,但大都不具備調試功能。如果是為了學習匯編語言,輕松匯編因為擁有一個完善的集成環境,是一款非常適合初學者的匯編編譯器。 發展前景 匯編語言是機器語言的助記符,相對於比枯燥的機器代碼易於讀寫、易於調試和修改,同時優秀的匯編語言設計者經過巧妙的設計,使得匯編語言匯編後的代碼比高級語言執行速度更快,占記憶體空間少等優點,但匯編語言的運行速度和空間佔用是針對高級語言並且需要巧妙設計,而且部分高級語言在編譯後代碼執行效率同樣很高,所以此優點慢慢弱化。而且在編寫復雜程式時具有明顯的局限性,匯編語言依賴於具體的機型,不能通用,也不能在不同機型之間移植。常說匯編語言是低級語言,並不是說匯編語言要被棄之,相反,匯編語言仍然是計算機(或微機)底層設計程式設計師必須了解的語言,在某些行業與領域,匯編是必不可少的,非它不可適用。只是,現在計算機最大的領域為IT軟體,也是我們常說的計算機套用軟體編程,在熟練的程式設計師手裡,使用匯編語言編寫的程式,運行效率與性能比其它語言寫的程式相對提高,但是代價是需要更長的時間來最佳化,如果對計算機原理及編程基礎不扎實,反而增加其開發難度,實在是得不償失,對比2010年前後的軟體開發,已經是市場化的軟體行業,加上高級語言的優秀與跨平台,一個公司不可以讓一個團隊使用匯編語言來編寫所有的東西,花上幾倍甚至幾十倍的時間,不如使用其它語言來完成,只要最終結果不比匯編語言編寫的差太多,就能搶先一步完成,這是市場經濟下的必然結果。 但是,迄今為止,還沒有程式設計師敢斷定匯編語言是不需要學的,同時,匯編語言(Assembly Language)是面向機器的程式設計語言,設計精湛的匯編程式設計師,部分已經脫離軟體開發,擠身於工業電子編程中。對於功能相對小巧但硬體對語言設計要求苛刻的行業,如4位單片機,由於其容量及運算,此行業的電子工程師一般負責從開發設計電路及軟體控制,主要開發語言就是匯編,c語言使用只佔極少部分,而電子開發工程師是千金難求,在一些工業公司,一個核心的電子工程師比其它任何職員待遇都高,對比起來,一般電子工程師待遇是程式設計師的十倍以上。這種情況是因為21世紀以來,學習匯編的人雖然也不少,但是真正能學到精通的卻不多,它相對於高級語言難學,難用,適用范圍小,雖然簡單,但是過於靈活,學習過高級語言的人去學習匯編比一開始學匯編的人難得多,但是學過匯編的人學習高級語言卻很容易,簡從繁易,繁從簡難。對於一個全面了解微機原理的程式設計師,匯編語言是必修語言。 實際套用 隨著現代軟體系統越來越龐大復雜,大量經過了封裝的高級語言如C/C++,Pascal/Object Pascal也應運而生。這些新的語言使得程式設計師在開發過程中能夠更簡單,更有效率,使軟體開發人員得以應付快速的軟體開發的要求。而匯編語言由於其復雜性使得其適用領域逐步減小。但這並不意味著匯編已無用武之地。由於匯編更接近機器語言,能夠直接對硬體進行操作,生成的程式與其他的語言相比具有更高的運行速度,佔用更小的記憶體,因此在一些對於時效性要求很高的程式、許多大型程式的核心模組以及工業控制方面大量套用。 此外,雖然有眾多程式語言可供選擇,但匯編依然是各大學計算機科學類專業學生的必修課,以讓學生深入了解計算機的運行原理。 歷史上,匯編語言曾經是非常流行的程式設計語言之一。隨著軟體規模的增長,以及隨之而來的對軟體開發進度和效率的要求,高級語言逐漸取代了匯編語言。但即便如此,高級語言也不可能完全替代匯編語言的作用。就拿Linux核心來講,雖然絕大部分代碼是用C語言編寫的,但仍然不可避免地在某些關鍵地方使用了匯編代碼。由於這部分代碼與硬體的關系非常密切,即使是C語言也會顯得力不從心,而匯編語言則能夠很好揚長避短,最大限度地發揮硬體的性能。 首先,匯編語言的大部分語句直接對應著機器指令,執行速度快,效率高,代碼體積小,在那些存儲器容量有限,但需要快速和實時回響的場合比較有用,比如儀器儀表和工業控制設備中。 其次,在系統程式的核心部分,以及與系統硬體頻繁打交道的部分,可以使用匯編語言。比如作業系統的核心程式段、I/O介面電路的初始化程式、外部設備的低層驅動程式,以及頻繁調用的子程式、動態連線庫、某些高級繪圖程式、視頻游戲程式等等。 再次,匯編語言可以用於軟體的加密和解密、計算機病毒的分析和防治,以及程式的調試和錯誤分析等各個方面。 最後,通過學習匯編語言,能夠加深對計算機原理和作業系統等課程的理解。通過學習和使用匯編語言,能夠感知、體會和理解機器的邏輯功能,向上為理解各種軟體系統的原理,打下技術理論基礎;向下為掌握硬體系統的原理,打下實踐套用基礎。 經典教材 匯編語言教材很多,各種處理器都有涉及,粗略統計不下百種。在這么多的教材里,用得較多的可以分類列舉如下: x86處理器 1.《x86匯編語言:從實模式到保護模式》,李忠著,電子工業出版社,2013-1 。 基於INTEL x86處理器、NASM編譯器和BOCHS虛擬機。匯編語言就是處理器的語言,從這個意義上來說,既然學習匯編語言,就必須直接面向硬體編程,而不是使用莫名其妙的DOS中斷和API調用。這是一本有趣的書,它沒有把篇幅花在計算一些枯燥的數學題上。相反,它教你如何直接控制硬體,在不藉助於BIOS、DOS、Windows、Linux或者任何其他軟體支持的情況下來顯示字元、讀取硬碟數據、控制其他硬體等。 我們知道,32位和64位是主流,實模式和DOS作業系統已經成為歷史,Linux和Windows都工作在保護模式下。這本書從實模式講到32位保護模式,尤其以32位保護模式為重點,閱讀本書,對理解現代計算機和現代作業系統的工作原理有非常大的幫助作用。 2.《匯編語言》(第2版),王爽著,清華大學出版社,2013-4-1 基於INTEL 8086處理器、MASM編譯器,以及DOS平台的匯編教材,完全以8086處理器的實模式為主,不涉及常用的32位和64位模式,但因為通俗易懂,讀者反映很好。 3.《80X86匯編語言程式設計教程》,楊季文等 編著,清華大學出版社,1999-3-1 基於INTEL x86處理器、MASM和TASM編譯器,包含16位實模式和32位保護模式的內容,而且對後者講述較為詳細。 4.《32位匯編語言程式設計》,錢曉捷編著,機械工業出版社,2011-8-1 基於INTEL x86處理器、MASM編譯器,以及WINDOWS平台的匯編教材。 5.《16/32位微機原理匯編語言及介面技術》,錢曉捷,陳濤編著,機械工業出版社,2005-2-1 基於INTEL x86處理器,論述16位微型計算機的基本原理、匯編語言和介面技術,並引出32位微機系統相關技術。 6.《Intel匯編語言程式設計》(第五版),(美)歐文著,電子工業出版社,2012-7-1 基於INTEL x86處理器、MASM編譯器,以及DOS/WINDOWS平台的匯編教材,既有16位實模式的內容,也有32位保護模式的內容。 7.《匯編語言的編程藝術》(第2版),(美)海德著,清華大學出版社,2011-12-1 基於INTEL x86處理器,使用了作者自製的高級語言匯編器(High Level Assembler,HLA)作為教學工具,以部分地獲得高級語言的優勢和功能。 8.《x86 PC匯編語言、設計與介面》(第五版),(美)馬茲迪,考西著,電子工業出版社,2011-1-1 基於INTEL x86處理器,既講了16位實模式的內容,也講了32位保護模式的內容,對64位也有所介紹。 ARM及單片機 1.《匯編語言程式設計--基於ARM體系結構》(第2版),文全剛等主編,北京航空航天大學出版社,2010-8-1 基於ARM體系結構的處理器,是學習嵌入式技術的入門教材。 2.《零基礎學AVR單片機》,徐益民等編著,機械工業出版社,2011-1-1 單片機概述、avr單片機的開發工具、avr單片機c語言、atmega16單片機基本結構、avr的指令系統與匯編系統等。 3.《基於Multisim10的51單片機模擬實戰教程》,聶典,丁偉主編,電子工業出版社,2010-2-1 闡述了NI Multisim 10在單片機模擬中的各項主要功能。 4.《PIC18微控制器:體系結構、編程與介面設計》,(美)貝里著,清華大學出版社,2009-4-1 微控制器廣泛套用於汽車、家電、工業控制、醫療設備等眾多領域。本書以Microchip公司的PIC18系列微控制器為例,全面講解如何使用C語言和匯編語言對微控制器進行編程。 5.《CASL匯編語言程式設計》,趙立輝編著,中國電力出版社,2002-10-1 CASL匯編語言是中國計算機軟體專業技術資格和水平考試高級程式設計師級的必考內容。本書是講述CASL匯編語言程式設計的專著。

4. X86指令集的內容有哪些

CPU擴展指令集CPU依靠指令來計算和控制系統,每款CPU在設計時就規定了一系列與其硬體電路相配合的指令系統。指令的強弱也是CPU的重要指標,指令集是提高微處理器效率的最有效工具之一。從現階段的主流體系結構講,指令集可分為復雜指令集和精簡指令集兩部分,而從具體運用看,如Intel的MMX(Multi Media Extended)、SSE、 SSE2(Streaming-Single instruction multiple data-Extensions 2)、SEE3和AMD的3DNow!等都是CPU的擴展指令集,分別增強了CPU的多媒體、圖形圖象和Internet等的處理能力。我們通常會把CPU的擴展指令集稱為CPU的指令集。SSE3指令集也是目前規模最小的指令集,此前MMX包含有57條命令,SSE包含有50條命令,SSE2包含有144條命令,SSE3包含有13條命令。目前SSE3也是最先進的指令集,英特爾Prescott處理器已經支持SSE3指令集,AMD會在未來雙核心處理器當中加入對SSE3指令集的支持,全美達的處理器也將支持這一指令集。

指令集:
(1) X86指令集要知道什麼是指令集還要從當今的X86架構的CPU說起。X86指令集是Intel為其第一塊16位CPU(i8086)專門開發的,IBM1981年推出的世界第一台PC機中的CPU—i8088(i8086簡化版)使用的也是X86指令,同時電腦中為提高浮點數據處理能力而增加的X87晶元系列數學協處理器則另外使用X87指令,以後就將X86指令集和X87指令集統稱為X86指令集。雖然隨著CPU技術的不斷發展,Intel陸續研製出更新型的i80386、i80486直到今天,但為了保證電腦能繼續運行以往開發的各類應用程序以保護和繼承豐富的軟體資源,所以Intel公司所生產的所有CPU仍然繼續使用X86指令集,所以它的CPU仍屬於X86系列。由於Intel X86系列及其兼容CPU都使用X86指令集,所以就形成了今天龐大的X86系列及兼容CPU陣容。
(2) RISC指令集RISC指令集是以後高性能CPU的發展方向。它與傳統的CISC(復雜指令集)相對。相比而言,RISC的指令格式統一,種類比較少,定址方式也比復雜指令集少。當然處理速度就提高很多了。而且RISC指令集還兼容原來的X86指令集。

5. 匯編語言中哪些指令影響標志位cf

AAA,ADC,ADD,BT,BTC,BTR,BTS,CMC,CMP,CMPS,DAA,DAS,IMUL,
MUL,NEG,REPE/REPEZ,ROL,ROR,RSM,SAL,SAR,SBB,SCAS,SHL,SHR,
SUB,XADD.
上邊說得是80x86的,有386,486,586的指令。

6. 求匯編裡面幾個命令的英文全稱

掃描指令
1.
順向掃描指令
BSF(Bit
Scan
Forward)

格式:BSF
DST,RSC

功能:從右向左掃描RSC操作數中第一個含1的位,並把掃描到的第一個含1的位號送DST操作數。若RSC=0,則DST值不確定。

說明:DST和RSC可以是16位或32位的,但長度要相同。DST只能是通用寄存器,RSC不能是立即數。

標志:若RSC為0,則置ZF=1;否則清0
ZF,其它標志位不確定。
2.
逆向掃描指令
BSR(Bit
Scan
Reverse)

格式:BSR
DST,RSC

功能:從左向右掃描RSC操作數中第一個含1的位,並把掃描到的第一個含1的位號送DST操作數。

說明:同BSF。

標志:對標志影響同BSF。
位測試指令
位測試(Bit
Test)
BT
DST,SRC
->cf
位測試並置位(Bit
Test
and
Set)
BTS
DST,SRC
->cf
位測試並復位(Bit
Test
and
Rest)BTR
DST,SRC
->cf
為測試並取反(Bit
Test
and
Complement)BTC
DST,SRC
->cf
說明:目標可以是16或32位的寄存器或存儲器操作數,源可以是8位的立即數、寄存器或存儲器操作數,若源操作數是立即數,則其值不應超過目標操作數的長度。若不是立即數,其長度一定要和目標的長度相同。目標操作數的位偏移從最右邊位開始、從0開始計數。

7. 匯編語言中,LOCK指令是否可放在任何指令前面

不可以,LOCK指令前綴只能用於以下這些指令:
ADD, ADC, AND, BTC, BTR, BTS, CMPXCHG, CMPXCH8B, DEC, INC, NEG, NOT, OR, SBB, SUB, XOR, XADD, XCHG

LOCK指令只有在目標操作數為內存地址時LOCK指令才會將該指令變為原子指令;如果目標操作數不為內存則會產生UD(Undefined Opcode,未定義的指令)錯誤。

另外值得注意的是,部分編譯器會將LOCK指令合法的編譯在非前面提到的指令前(例如:LOCK MOV [DATA],EAX),但是在運行程序時會同樣產生UD錯誤。

題外話:XCHG的其中一個操作數為內存時會自動插入LOCK指令,使其所需要的周期變得很長。

8. 匯編語言中,LOCK指令是否可放在任何指令前面

不可以,LOCK指令前綴只能用於以下這些指令:
ADD,
ADC,
AND,
BTC,
BTR,
BTS,
CMPXCHG,
CMPXCH8B,
DEC,
INC,
NEG,
NOT,
OR,
SBB,
SUB,
XOR,
XADD,
XCHG
LOCK指令只有在目標操作數為內存地址時LOCK指令才會將該指令變為原子指令;如果目標操作數不為內存則會產生UD(Undefined
Opcode,未定義的指令)錯誤。
另外值得注意的是,部分編譯器會將LOCK指令合法的編譯在非前面提到的指令前(例如:LOCK
MOV
[DATA],EAX),但是在運行程序時會同樣產生UD錯誤。
題外話:XCHG的其中一個操作數為內存時會自動插入LOCK指令,使其所需要的周期變得很長。

9. 匯編語言 bt語句

BT 指令

格式: BT OPD,OPS
----

功能: 目的操作數OPD中由源操作數OPS指定的位送CF標志
說明: 1. 在指令中,目的操作數OPD只能是16/32位通用寄存器或存儲單元,用於指定要測試的數據;源操作數OPS必須是8位立即數或者是與目的操作數等長的16/32位通用寄存器,用於指定要測試的位. 如果目的操作數是寄存器,則源操作數 除以 16/32的余數就是要測試的位,它在0-15/31之間.

2. 舉例: MOV EAX 12345678H ;EAX=12345678H

BT EAX,5 ;EAX的D5位=1-->CF,EAX=12345678H

注意: 如果目的操作數是存儲單元, 則該單元的最低位為0.從這個最低位向地 址高端每位依次增量,向地址代低端每位依次減量,這部分存儲器數據作 為一個2G-1~-2G長的位串.此時,有符號源操作數就指示要測試的位.

閱讀全文

與btc匯編相關的資料

熱點內容
炒比特幣短線經驗 瀏覽:701
btc進入中國價格 瀏覽:514
數字貨幣被騙的錢能追回來么 瀏覽:415
德國為什麼要支持比特幣 瀏覽:314
調侃數字貨幣 瀏覽:403
熊貓礦機算力高 瀏覽:80
什麼叫通過虛擬貨幣的打賞 瀏覽:310
以太坊能否被復制 瀏覽:894
心理區塊鏈 瀏覽:958
哪裡免費送btc 瀏覽:425
btccash算力 瀏覽:148
你認為虛擬貨幣算不算貨幣 瀏覽:557
數字貨幣菲亞特 瀏覽:495
暴風宣布進軍區塊鏈 瀏覽:620
區塊鏈技術定義研究生 瀏覽:752
顯卡功耗高算力低 瀏覽:168
虛擬貨幣都是龐氏騙局 瀏覽:778
比特幣中文客戶端下載 瀏覽:619
有中文以太坊錢包嗎 瀏覽:995
發行虛擬貨幣非法融資算犯法嗎 瀏覽:234