匯編語言有哪些
一、通用數據傳送指令1. MOV 傳送字或字節2. MOVSX 先符號擴展,再傳送3. MOVZX 先零擴展,再傳送4. PUSH 把字壓入堆棧5. POP 把字彈出堆棧6. PUSHA 把AX,CX,DX,BX,SP,BP,SI,DI依次壓入堆棧7. POPA 把DI,SI,BP,SP,BX,DX,CX,AX依次彈出堆棧8. PUSHAD 把EAX,ECX,EDX,EBX,ESP,EBP,ESI,EDI依次壓入堆棧9. POPAD 把EDI,ESI,EBP,ESP,EBX,EDX,ECX,EAX依次彈出堆棧10. BSWAP 交換32位寄存器里字節的順序11. XCHG 交換字或字節.( 至少有一個操作數為寄存器,段寄存器不可作為操作數)12. CMPXCHG 比較并交換操作數.( 第二個操作數必須為累加器AL/AX/EAX )13. XADD 先交換再累加.( 結果在第一個操作數里 )14. XLAT 字節查表轉換15. ── BX 指向一張 256 字節的表的起點, AL 為表的索引值 (0-255,即0-FFH); 返回 AL 為查表結果. ( [BX+AL]->AL ) 二、輸入輸出端口傳送指令1. IN I/O端口輸入. ( 語法: IN 累加器, {端口號│DX} )2. OUT I/O端口輸出. ( 語法: OUT {端口號│DX},累加器 )3. 輸入輸出端口由立即方式指定時, 其范圍是 0-255; 由寄存器 DX 指定時, 其范圍是 0-65535 三、目的地址傳送指令1. LEA 裝入有效地址. 例: LEA DX,string ;把偏移地址存到DX.2. LDS 傳送目標指針,把指針內容裝入DS. 例: LDS SI,string ;把段地址:偏移地址存到DS:SI3. LES 傳送目標指針,把指針內容裝入ES. 例: LES DI,string ;把段地址:偏移地址存到ES:DI4. LFS 傳送目標指針,把指針內容裝入FS. 例: LFS DI,string ;把段地址:偏移地址存到FS:DI5. LGS 傳送目標指針,把指針內容裝入GS. 例: LGS DI,string ;把段地址:偏移地址存到GS:DI6. LSS 傳送目標指針,把指針內容裝入SS. 例: LSS DI,string ;把段地址:偏移地址存到SS:DI 四、標志傳送指令1. LAHF 標志寄存器傳送,把標志裝入AH2. SAHF 標志寄存器傳送,把AH內容裝入標志寄存器3. PUSHF 標志入棧4. POPF 標志出棧5. PUSHD 32位標志入棧6. POPD 32位標志出棧 一、基本簡介1.匯編語言(AssemblyLanguage)是面向機器的程序設計語言。
在匯編語言中,用助記符(Memoni)代替操作碼,用地址符號(Symbol)或標號(Label)代替地址碼。這樣用符號代替機器語言的二進制碼,就把機器語言變成了匯編語言。
于是匯編語言亦稱為符號語言。2.使用匯編語言編寫的程序,機器不能直接識別,要由一種程序將匯編語言翻譯成機器語言,這種起翻譯作用的程序叫匯編程序,匯編程序是系統軟件中語言處理系統軟件。
匯編程序把匯編語言翻譯成機器語言的過程稱為匯編。二、主要特點1.面向機器的低級語言,通常是為特定的計算機或系列計算機專門設計的。
2.保持了機器語言的優點,具有直接和簡捷的特點。3.可有效地訪問、控制計算機的各種硬件設備,如磁盤、存儲器、CPU、I/O端口等。
4.目標代碼簡短,占用內存少,執行速度快,是高效的程序設計語言。5.經常與高級語言配合使用,應用十分廣泛。
(1)簡捷性 匯編語言由于采用了助記符號來編寫程序,比用機器語言的二進制代碼編程要方便些,在一定程度上簡化了編程過程。匯編語言的特點是用符號代替了機器指令代碼,而且助記符與指令代碼一一對應,基本保留了機器語言的靈活性。
使用匯編語言能面向機器并較好地發揮機器的特性,得到質量較高的程序。(2)執行過程 用匯編語言編制的程序輸入計算機,計算機不能象用機器語言編寫的程序一樣直接識別和執行,必須通過預先放入計算機的"匯編程序"中進行加工和翻譯,才能變成能夠被計算機直接識別和處理的二進制代碼程序。
用匯編語言等非機器語言書寫好的符號程序稱為源程序,運行時匯編程序要將源程序翻譯成目標程序。目標程序是機器語言程序,當它被安置在內存的預定位置上,就能被計算機的CPU處理和執行。
(3)獨特性 匯編語言是面向具體機型的,它離不開具體計算機的指令系統,因此,對于不同型號的計算機,有著不同的結構的匯編語言,而且,對于同一問題所編制的匯編語言程序在不同種類的計算機間是互不相通的。四、優點1.面向機器的低級語言,通常是為特定的計算機或系列計算機專門設計的。
2.保持了機器語言的優點,具有直接和簡捷的特點。3.可有效地訪問、控制計算機的各種硬件設備,如磁盤、存儲器、CPU、I/O端口等。
4.目標代碼簡短,占用內存少,執行速度快,是高效的程序設計語言。5.經常與高級語言配合使用,應用十分廣泛。
五、缺點 同時還應該認識到,匯編語言是一種層次非常低的語言,它僅僅高于直接手工編寫二進制的機器指令碼,因此不可避免地存在一些缺點:1.編寫的代碼非常難懂,不好維護;2.很容易產生bug,難于調試;3.只能針對特定的體系結構和處理器進行優化;4.開發效率很低,時間長且單調。
匯編簡單語句
我這里剛好有一份!可以拿去看看!我經常參考這個用OD修改東西!今天高手都放假了,我提的問題半天沒人回答!郁悶!!一.機械碼,又稱機器碼.ultraedit打開,編輯exe文件時你會看到許許多多的由0,1,2,3,4,5,6,7,8,9,A,B,C,D,E,F組成的數碼,這些數碼就是機器碼.修改程序時必須通過修改機器碼來修改exe文件. 二.需要熟練掌握的全部匯編知識(只有這么多)不大容易理解,可先強行背住,混個臉兒熟,以后慢慢的就理解了cmp a,b 比較a與bmov a,b 把b的值送給aret 返回主程序nop 無作用,英文“no operation”的簡寫,意思是“do nothing”(機器碼90)***機器碼的含義參看上面(解釋:ultraedit打開編輯exe文件時你看到90,等同于匯編語句nop)call 調用子程序je 或jz 若相等則跳(機器碼74 或0F84)jne或jnz 若不相等則跳(機器碼75或0F85)jmp 無條件跳(機器碼EB)jb 若小于則跳ja 若大于則跳jg 若大于則跳jge 若大于等于則跳jl 若小于則跳jle 若小于等于則跳pop 出棧push 壓棧三.常見修改(機器碼)74=>75 74=>90 74=>EB75=>74 75=>90 75=>EBjnz->nop75->90(相應的機器碼修改)jnz -> jmp75 -> EB(相應的機器碼修改)jnz -> jz75->74 (正常) 0F 85 -> 0F 84(特殊情況下,有時,相應的機器碼修改)四.兩種不同情況的不同修改方法1.修改為jmpje(jne,jz,jnz) =>jmp相應的機器碼EB (出錯信息向上找到的第一個跳轉)jmp的作用是絕對跳,無條件跳,從而跳過下面的出錯信息xxxxxxxxxxxx 出錯信息,例如:注冊碼不對,sorry,未注冊版不能…,”Function Not Avaible in Demo” 或 ”Command Not Avaible” 或 ”Can't save in Shareware/Demo”等 (我們希望把它跳過,不讓它出現)。
。xxxxxxxxxxxx 正確路線所在2.修改為nopje(jne,jz,jnz) =>nop相應的機器碼90 (正確信息向上找到的第一個跳轉) nop的作用是抹掉這個跳轉,使這個跳轉無效,失去作用,從而使程序順利來到緊跟其后的正確信息處xxxxxxxxxxxx 正確信息,例如:注冊成功,謝謝您的支持等(我們希望它不被跳過,讓它出現,程序一定要順利來到這里)。
。xxxxxxxxxxxx 出錯信息(我們希望不要跳到這里,不讓它出現)它們在存貯器和寄存器、寄存器和輸入輸出端口之間傳送數據. 1. 通用數據傳送指令. MOV 傳送字或字節. MOVSX 先符號擴展,再傳送. MOVZX 先零擴展,再傳送. 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 ;把段地址:偏移地址存到ESI. LFS 傳送目標指針,把指針內容裝入FS. 例: LFS DI,string ;把段地址:偏移地址存到FSI. LGS 傳送目標指針,把指針內容裝入GS. 例: LGS DI,string ;把段地址:偏移地址存到GSI. LSS 傳送目標指針,把指針內容裝入SS. 例: LSS DI,string ;把段地址:偏移地址存到SSI. 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中的字的。
匯編語言有哪兩類語句
我一直很糾結你會這么問。。后來我明白了。
匯編語言應該分:
1.偽指令——沒有對應的機器碼,只是編譯器負責編譯。
2.匯編指令——有對應的機器碼,編譯器只需要將其編譯成二進制的代碼就能順利的被計算機執行。
你像這類語句就屬于偽指令:
assume cs:code ds:data ss:stack
這類的就屬于匯編指令:
mov ax,0001
又或者 add ax,bx
匯編語言指令大全,要詳細的
最佳答案IBM-PC匯編語言指令集 數據傳送指令集 MOV 功能: 把源操作數送給目的操作數 語法: MOV 目的操作數,源操作數 格式: MOV r1,r2 MOV r,m MOV m,r MOV r,data XCHG 功能: 交換兩個操作數的數據 語法: XCHG 格式: XCHG r1,r2 XCHG m,r XCHG r,m PUSH,POP 功能: 把操作數壓入或取出堆棧 語法: PUSH 操作數 POP 操作數 格式: PUSH r PUSH M PUSH data POP r POP m PUSHF,POPF,PUSHA,POPA 功能: 堆棧指令群 格式: PUSHF POPF PUSHA POPA LEA,LDS,LES 功能: 取地址至寄存器 語法: LEA r,m LDS r,m LES r,m XLAT(XLATB) 功能: 查表指令 語法: XLAT XLAT m 算數運算指令 ADD,ADC 功能: 加法指令 語法: ADD OP1,OP2 ADC OP1,OP2 格式: ADD r1,r2 ADD r,m ADD m,r ADD r,data 影響標志: C,P,A,Z,S,O SUB,SBB 功能:減法指令 語法: SUB OP1,OP2 SBB OP1,OP2 格式: SUB r1,r2 SUB r,m SUB m,r SUB r,data SUB m,data 影響標志: C,P,A,Z,S,O INC,DEC 功能: 把OP的值加一或減一 語法: INC OP DEC OP 格式: INC r/m DEC r/m 影響標志: P,A,Z,S,O NEG 功能: 將OP的符號反相(取二進制補碼) 語法: NEG OP 格式: NEG r/m 影響標志: C,P,A,Z,S,O MUL,IMUL 功能: 乘法指令 語法: MUL OP IMUL OP 格式: MUL r/m IMUL r/m 影響標志: C,P,A,Z,S,O(僅IMUL會影響S標志) DIV,IDIV 功能:除法指令 語法: DIV OP IDIV OP 格式: DIV r/m IDIV r/m CBW,CWD 功能: 有符號數擴展指令 語法: CBW CWD AAA,AAS,AAM,AAD 功能: 非壓BCD碼運算調整指令 語法: AAA AAS AAM AAD 影響標志: A,C(AAA,AAS) S,Z,P(AAM,AAD) DAA,DAS 功能: 壓縮BCD碼調整指令 語法: DAA DAS 影響標志: C,P,A,Z,S 位運算指令集 AND,OR,XOR,NOT,TEST 功能: 執行BIT與BIT之間的邏輯運算 語法: AND r/m,r/m/data OR r/m,r/m/data XOR r/m,r/m/data TEST r/m,r/m/data NOT r/m 影響標志: C,O,P,Z,S(其中C與O兩個標志會被設為0) NOT指令不影響任何標志位 SHR,SHL,SAR,SAL 功能: 移位指令 語法: SHR r/m,data/CL SHL r/m,data/CL SAR r/m,data/CL SAL r/m,data/CL 影響標志: C,P,Z,S,O ROR,ROL,RCR,RCL 功能: 循環移位指令 語法: ROR r/m,data/CL ROL r/m,data/CL RCR r/m,data/CL RCL r/m,data/CL 影響標志: C,P,Z,S,O 程序流程控制指令集 CLC,STC,CMC 功能: 設定進位標志 語法: CLC STC CMC 標志位: C CLD,STD 功能: 設定方向標志 語法: CLD STD 標志位: D CLI,STI 功能: 設定中斷標志 語法: CLI STI 標志位: I CMP 功能: 比較OP1與OP2的值 語法: CMP r/m,r/m/data 標志位: C,P,A,Z,O JMP 功能: 跳往指定地址執行 語法: JMP 地址 JXX 功能: 當特定條件成立則跳往指定地址執行 語法: JXX 地址 注: A: ABOVE,當C=0,Z=0時成立 B: BELOW,當C=1時成立 C: CARRY,當弁時成立 CXZ: CX寄存器的值為0(ZERO)時成立 E: EQUAL,當Z=1時成立 G: GREATER(大于),當Z=0且S=0時成立 L: LESS(小于),當S不為零時成立 N: NOT(相反條件),需和其它符號配合使用 O: OVERFLOW,O=1時成立 P: PARITY,P=1時成立 PE: PARITY EVEN,P=1時成立 PO: PARITY ODD,P=0時成立 S: SIGN,S=1時成立 Z: ZERO,Z=1時成立 LOOP 功能: 循環指令集 語法: LOOP 地址 LOOPE(Z) 地址 LOOPNE(Z) 地址 標志位: 無 CALL,RET 功能: 子程序調用,返回指令 語法: CALL 地址 RET RET n 標志位: 無 INT,IRET 功能: 中斷調用及返回指令 語法: INT n IRET 標志位: 在執行INT時,CPU會自動將標志寄存器的值入棧,在執行IRET時則會將堆棧中的標志值彈回寄存器 字符串操作指令集 MOVSB,MOVSW,MOVSD 功能: 字符串傳送指令 語法: MOVSB MOVSW MOVSD 標志位: 無 CMPSB,CMPSW,CMPSD 功能: 字符串比較指令 語法: CMPSB CMPSW CMPSD 標志位: C,P,Z,S,O SCASB,SCASW 功能: 字符串搜索指令 語法: SCASB SCASW 標志位: C,P,Z,S,O LODSB,LODSW,STOSB,STOSW 功能: 字符串載入或存貯指令 語法: LODSB LODSW STOSB STOSW 標志位: 無 REP,REPE,REPNE 功能: 重復前綴指令集 語法: REP 指令S REPE 指令S REPNE 指令S 標志位: 依指令S而定 對于IBM PC機它有它的指令系統,其中包括:數據傳送指令、串處理指令、算術指令、控制移動指令、邏輯指令、處理機控制指令。
這里將簡單介紹其指令類型及指令說明,如有要求給具體的指令格式及應用,請與amay聯系,amay加以更新。 1)數據傳送指令:負責把數據、地址或立即數傳送到寄存器或存儲單元中。
數據傳送指令類型 指 令 說 明 通用數據傳送指令 MOV(傳送)、PUSH(進棧)、POP(出棧)、XCHG(交換) 累加器專用傳送指令 IN(輸入指令) 、OUT(輸入指令) 地址傳送指令 LEA(有效地址送寄存器)、LDS(指針送寄存器和DS)、LES(指針送寄存器和ES) 標志寄存器傳送指令 LAHF(標志送AH)、SAHF(AH送標志寄存器)、PUSHF(。
常用匯編語言有哪幾種
上邊的錯了 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指令集的支持,全美達的處理器也將支持這一指令集。
什么是匯編語言
■什么是匯編語言
匯編語言(Assembly Language)是面向機器的程序設計語言。
在匯編語合中,用助記符(Memoni)代替操作碼,用地址符號(Symbol)或標號(Label)代替地址媽。這樣用符號代替機器語盲的二進制碼,就把機器語音變成了匯編語言。于是匯編語言亦稱為符號語言。
使用匯編語言編寫的程序,機器個能直接識別,要由一種程序將匯編語言翻譯成機器語言,這種起翻譯作用的程序叫匯編程序,匯編程序是系統軟件中語言處理系統軟件。匯編語言把匯編程序翻譯成機器語言的過程稱為f匯編。
匯編語言比機器語言易于讀寫、易于調試和修改,同時也具有機器語言執行速度快,占內存空間少等優點,但在編寫復雜程序時具有明顯的局限性,匯編語言依賴于具體的機型,不能通用,也不能在不同機型之間移植。
■對于不同型號的計算機,有著不同的結構的匯編語言
匯編語言由于采用了助記符號來編寫程序,比用機器語言的二進制代碼編程要方便些,在一定程度上簡化了編程過程。匯編語言的特點是用符號代替了機器指令代碼,而且助記符與指令代碼一一對應,基本保留了機器語言的靈活性。使用匯編語言能面向機器并較好地發揮機器的特性,得到質量較高的程序。
匯編語言是面向具體機型的,它離不開具體計算機的指令系統,因此,對于不同型號的計算機,有著不同的結構的匯編語言,而且,對于同一問題所編制的匯編語言程序在不同種類的計算機間是互不相通的。
匯編語言中由于使用了助記符號,用匯編語言編制的程序輸入計算機,計算機不能象用機器語言編寫的程序一樣直接識別和執行,必須通過預先放入計算機的"匯編程序"的加工和翻譯,才能變成能夠被計算機識別和處理的二進制代碼程序。用匯編語言等非機器語言書寫好的符號程序稱為源程序,運行時匯編程序要將源程序翻譯成目標程序。目標程序是機器語言程序,它一經被安置在內存的預定位置上,就能被計算機的CPU處理和執行。
匯編語言像機器指令一樣,是硬件操作的控制信息,因而仍然是面向機器的語言,使用起來還是比較繁瑣費時,通用性也差。但是,匯編語言用來編制系統軟件和過程控制軟件,其目標程序占用內存空間少,運行速度快,有著高級語言不可替代的用途。
■html屬于匯編嗎?
不屬于匯編語言。它是Hypertext Markup Language的縮寫,用來編寫網頁的語言.通常一個網頁的網址最后面有.html或者.htm都是用這種語言編寫的.
另外,它一般用來編寫靜態網頁,現在最流行的動態語言有ASP,.NET和PHP等等.
匯編語言可以用來做什么
首先,匯編語言的大部分語句直接對應著機器指令,執行速度快,效率高,代碼體積小,在那些存儲器容量有限,但需要快速和實時響應的場合比較有用,比如儀器儀表和工業控制設備中。
其次,在系統程序的核心部分,以及與系統硬件頻繁打交道的部分,可以使用匯編語言。比如操作系統的核心程序段、I/O接口電路的初始化程序、外部設備的低層驅動程序,以及頻繁調用的子程序、動態連接庫、某些高級繪圖程序、視頻游戲程序等等。
再次,匯編語言可以用于軟件的加密和解密、計算機病毒的分析和防治,以及程序的調試和錯誤分析等各個方面。
最后,通過學習匯編語言,能夠加深對計算機原理和操作系統等課程的理解。通過學習和使用匯編語言,能夠感知、體會和理解機器的邏輯功能,向上為理解各種軟件系統的原理,打下技術理論基礎;向下為掌握硬件系統的原理,打下實踐應用基礎。