導航:首頁 > 程序命令 > 匯編命令解讀

匯編命令解讀

發布時間:2022-10-03 09:03:47

Ⅰ 跪求匯編語語言命令詳解

哈哈,太多了
匯編命令詳解
名稱 解釋 格式
a (Assemble) 逐行匯編 a [address]
c (Compare) 比較兩內存塊 c range address
d (Dump) 內存16進制顯示 d [address]或 d [range]
e (Enter) 修改內存位元組 e address

f (fin) 預置一段內存 f range list
g (Go) 執行程序 g [=address][address...]
h (Hexavithmetic) 制算術運算 h value value
i (Input) 從指定埠地址輸入 i pataddress
l (Load) 讀盤 l [address [driver seetor>
m (Move) 內存塊傳送 m range address
n (Name) 置文件名 n filespec [filespec...]
o (Output) 從指定埠地址輸出 o portadress byte
q (Quit) 結束 q
r (Register) 顯示和修改寄存器 r [register name]
s (Search) 查找位元組串 s range list
t (Trace) 跟蹤執行 t [=address] [value]
u (Unassemble) 反匯編 u [address ]或range
w (Write) 存檔 w [address[driver sector secnum>
? 聯機幫助 ?

debug小匯編a命令

debug小匯編a命令是一個很有用的功能,許多的小程序都要他來做。

編一些小程序比匯編要來得方便,快潔。
在Debug中,中斷是非常有用的,首先,讓我們先了解一下中斷。
所謂中斷,其實,就是,當你做某事時,有人過來找你有其他事,你先放下手中的事(計算機中,稱為保護現場)
,再去與叫你的那個人辦事去,等完了,你又回,接著做剛才的事。這是個很通俗的講法。
計算機在運行時,也會出現這種情況,我們叫之中斷。
下面是他的一些常用中斷向量的入口值詳解:(記住哦,很用的...呵呵)

IBM PC 中斷 int10
ooH 屏幕方式設置

入口:AH=0,AL=顯示方式代碼(0--6)
0:40*25 黑白
1:40*25 彩色
2:80*25 黑白
3:80*25 彩色文本
4:320*200 彩色
5:320*200 黑白
6:640*200 黑白圖形模式
7:80*25 單色字元(單色顯示器)

0BH 色彩設置
入口:AH=0B,BL=0 設背景色,BH=0--15 BL=1 設調色碼,BH=0--1
0CH 寫圖形點
入口:AH=0C,CX:DX=列號:行號,AL=顏色
ODH 讀圖形點
入口:AH=0D,CX:DX=列號:行號
返回:AL=顏色
0EH 在當前頁、當前游標處寫字元
入口:AH=0E,AL=字元的ASCII碼,BL=前景色
OFH 顯示器狀態
入口:AH=0F
返回:AL=當前顯示器方式,AH=屏幕列數,BH=當前頁號

01H 游標設置
入口:AH=1,CH=游標起始行號(00--0C),CL=游標結束行號(00--0C)
註:CH > CL
02H 游標定位
入口:AH=2,BH=頁號,DH:DL=起始行:列
03H 讀游標位置
入口:AH=3,BH=頁號。
返回:DH:DL=起始行:列
06H 窗口上卷
入品:AH=6,AL=窗口上卷行數,CH:CL-DH:DL 窗口坐標
註:AL=0 卷動整個窗口
07H 窗口下卷
入口:AH=7,AL=窗口下卷行數,CH:CL-DH:DL 窗口坐標
08H 讀當前游標處字元和屬性
入口:AH=8,BH=頁號。
返回:AH:AL=字元的顏色:字元的ASCII碼
註:顏色代碼見下對照表
09H:在當前游標處寫字元和屬性
註:游標不下移
入口:AH=9,BH=頁號,BL:AL=字元的顏色:字元的ASCII碼,CX=重復次數
1 2 3 4 5 6 7 8
BL R G B I R G B
閃爍 字元底色 加亮 字元顏色

中斷向量號表

中斷號 解釋 中斷號 解釋
0 除數為0錯 19 引導裝入程序
1 音步中斷 1A 日時調用
2 不可屏蔽中斷NMI 1B 鍵盤阻斷時得到控制權
3 斷電中斷(CCH) 1C 時鍾中斷時得到控制權
4 溢出中斷 1D 指向CRT初始參數表
5 屏幕列印中斷 1E 指向盒帶參數表
6-7 保留 1F 1KB圖形模式
8 計時器中斷(18.2秒) 20 結束DOS程序
9 鍵盤中斷 21 DOS功能調用
A-D 保留 22 結束地址(建義用EXEC)
E 軟盤機中斷 23 DOS Crtl-Break退出地址
F 保留 24 DOS致命錯向量
10 屏幕I/O調用 25 DOS絕對磁碟讀
11 設備檢查調用 26 DOS絕對磁碟寫
12 存儲器檢查調用 27 結束程序並駐留(建義用31h)
13 軟盤機I/O調用 28-3F DOS保留
14 RS-233I/O調用 40-7F 未用
15 盒帶機I/O調用 80-85 BASIC保留
16 鍵盤I/O調用 86-F0 BASIC解釋程序用
17 列印機I/O調用 F1-FF 未用
18 ROM-BASIC入口

指令名詳解
call 指令(過程調用)(控制指令-長轉移)

詳解:

段內直接調用

段內間接調用(寄存器)

段內間接調用(存儲器)

段間直接調用

段間間接調用

指令名
jmp 指令(無條件轉移指令)(控制指令-長轉移)

詳解:
段內直接跳轉

短段內直接跳轉

段內間接跳轉(寄存器)

段內間接跳轉(存儲器)

段間直接跳轉

段間間接跳轉

指令名
ret 指令(過程返回)(控制指令-長轉移)

詳解:

段內返回

段內返回立即數加於sp

段間返回

段間返回立即數加於sp

na/jnbe 指令(控制指令-短轉移) 不小於或不等於時轉移

jae/jnb 指令 (控制指令-短轉移) 大於或等於時轉移

jb/jnae 指令 (控制指令-短轉移) 小於轉移

jbe/jna 指令 (控制指令-短轉移) 小於或等 於轉移

jg/jnle 指令(控制指令-短轉移) 大於轉移

jge/jnl 指令 (控制指令-短轉移) 大於或等於轉移

jl/jnge 指令 (控制指令-短轉移) 小於轉移

jle/jng 指令 (控制指令-短轉移) 小於或等 於轉移

je/jz 指令 (控制指令-短轉移) 等於轉移

jne/jnz 指令 (控制指令-短轉移) 不等於轉移

jc 指令 (控制指令-短轉移) 有進位時轉移

jnc 指令 (控制指令-短轉移) 列進位時轉移
jno 指令 (控制指令-短轉移) 不溢出時轉移
jnp/jpo 指令 (控制指令-短轉移) 奇偶性為奇數時轉移

jns 指令 (控制指令-短轉移) 符號位為"0"轉移

jo 指令 (控制指令-短轉移) 溢出轉移

jp/jpe 指令 (控制指令-短轉移) 奇偶性為偶數時轉移

js 指令 (控制指令-短轉移) 符號位為"1"時轉移

loop 指令 (循環控制指令-短轉移) cx 不為0時循環

loope/loopz 指令 (循環控制指令-短轉移) cx 不為0且標志 z=1 時循環

loopne/loopnz 指令 (循環控制指令-短轉移) cx 不為0且標志 z=0 時循環

jcxz 指令 (循環控制指令-短轉移) cx 為0時轉移

★int 指令 (中斷指令) 中斷指令(後詳解)

into 指令 (中斷指令) 溢出中斷

iret 指令 (中斷指令) 中斷返回

指令名
shl 指令(邏輯左移)
sal 指令(算術左移)
shr 指令(邏輯右移)
sar 指令(算術右移) 寄存器,1
rol 指令(循環左移) 寄存器,cl
ror 指令(循環右移) 存儲器,1
rcl 指令(通過進位的循環左移)存儲器,cl
rcr 指令(通過進位的循環右移)(邏輯運算)

not 指令(取反運算)寄存器求反

(邏輯運算)存儲器求反

and 指令(與運算) (邏輯運算)

寄存器 and 寄存器 寄存器
寄存器 and 存儲器 寄存器

存儲器 and 寄存器 存儲器

立即數 and 存儲器 存儲器

立即數 and 累加器 累加器

or 指令(或運算)(邏輯運算)

寄存器 or 寄存器 寄存器
寄存器 or 存儲器 寄存器

存儲器 or 寄存器 存儲器

立即數 or 存儲器 存儲器

立即數 or 累加器 累加器

test 指令(測試) (邏輯運算)

寄存器 test 寄存器
寄存器 test 存儲器
寄存器 test 立即數
存儲器 test 立即數
累加器 test 立即數

movs 指令(串傳送)(字元串操作指令)
單個傳送
重復傳送

cmps 指令(串比較) (字元串操作指令)
單個比較
重復比較

scas 指令(串掃描)(字元串操作指令)
單個搜索
重復搜索

lods 指令(裝入串)
(字元串操作指令)
單個裝載
重復裝載

stos 指令(保存串) (字元串操作指令)
單個存儲
重復存儲

mov 指令(傳送字或位元組)(數據傳送命令)
寄存器與寄存器間傳送
存儲器與寄存器間傳送
立即數傳送給存儲器
立即數傳送給寄存器
存儲器傳送給累加器
累加器傳送存儲器
寄存器傳送給段寄存器
存儲器傳送給段寄存器
段寄存器傳送給寄存器
段寄存器傳送給存儲存器

pop 指令(把字彈出堆棧) (數據傳送命令)

push 指令(把字壓入堆棧)
存儲器
寄存器
段寄器
xchg 指令(交換字或位元組) (數據傳送命令)
寄存器與寄存器交換
存儲器與寄存器交換
寄存器與累加器交換

in 指令(埠輸入) (數據傳送命令)
直接輸入
間接輸入

out 指令(埠輸出) (數據傳送指令)
直接輸出
間接輸出

add 指令(加法)(算術指令)
adc 指令(帶進位加法)
寄存器+寄存器 寄存器
寄存器+存儲器 寄存器
存儲器+寄存器 存儲器
立即數+存儲器 存儲器
立即數+累加器 累加器

inc 指令(加1)(算術指令)
存儲器增量
寄存器增量

sub 指令(減法) (算術指令)
sbb 指令(帶借位減法)
寄存器-寄存器 寄存器
寄存器-存儲器 寄存器
存儲器-寄存器 存儲器
立即數-存儲器 存儲器
立即數-累加器 累加器

dec 指令(減1)(算術指令)
存儲器減量
寄存器減量

nec 指令(求反,以0減之)
寄存器求補
存儲器求補

cmp 指令(比較)(算術指令)
寄存器與寄存器比較
寄存器與存儲器比較
寄存器與立即數比較
存儲器與立即數比較
累加器與立即數比較

mul 指令(無符號乘法) (算術指令)
imul 指令(整數乘法)
與8位寄存器相乘
與16位寄存器相乘
與8位存儲單元相乘
與16位存儲單元相乘

div 指令(無符號除法)(算術指令)
idiv 指令(整數除法)
被8位寄存器除
被16位寄存器除
被8位存儲單元除
被16位存儲單元除

Debug實戰
1.查看主板的生產日期,版本
D ffff:05
D fe00:0e

2.模擬Rest鍵功能
A
:100 jmp ffff:0000
:105
g

3.快速格式化軟盤
L 100 0 0 * '插入一張己格式化軟盤
W 100 0 0 * '放入一張欲格式化軟盤
註:* 分別為:720K e |1.2M id |1.44M 21

4.硬碟格式化兩種方法
(1)G=c800:05
(2) A 100
mov ax,0703
mov cx,0001
mov dx,0080
int 13
int 3
g 100
5.加速鍵盤
A
mov ax,0305
mov bx,0000
int 16
int 20
rcx
10
n fast.com
w
q

6.關閉顯示器(恢復時,按任意鍵)

A
mov ax,1201
mov bl,36
int 10
mov ah,0
int 16
mov ax,1200
int 10
rcx
10
n crt-of.com
w
q
7.硬碟DOS引導記錄的修復
在軟碟機中放入一張己格式化軟盤
debug
-l 100 2 0 1
-w 100 0 50 1
把軟盤放入故障機軟碟機中
debug
-l 100 0 50 1
-w 100 2 0 1
-q
8.清coms中setup口令
debug
-a
mov bx,0038
mov cx,0000
mov ax,bx
out 70,al
inc cx
cmp cx,0006
jnz 0106
int 20
-rcx
:20
-nclearpassword.com
-w
-q
註:以上適合super與dtk機,對於ast機,因為他的口令放在coms的4ch-51h地址處,只要將:mov bx,0038 改為: mov
bx,004c即可
9.取消coms的密碼(將coms數據清為初始化)
-o 70,10
-o 71,10
-g
-q
10.將硬碟主引導記錄保存到文件中

debug
-a
mov ax,0201
mov bx,0200
mov cx,0001
mov dx,0080
mov int 13
int 3
-rcx
:200
-nboot.dat
-w
-q
11.調用中斷實現重啟計算機(可以成文件)
debug
-a
int 19
int 20
-rcx
:2
-nreset.com
-w
-q

DEBUG主要命令

DEBUG是為匯編語言設計的一種高度工具,它通過單步、設置斷點等方式為匯編語言程序員提供了非常有效的調試手段。
一、DEBUG程序的調用
在DOS的提示符下,可鍵入命令:
C:\DEBUG [D:][PATH][FILENAME[.EXT>[PARM1][PARM2]
其中,文件名是被調試文件的名字。如用戶鍵入文件,則DEBUG將指定的文件裝入存儲器中,用戶可對其進行調試。如果未鍵入文件名,則用戶可以用當前存儲器的內容工作,或者用DEBUG命令N和L把需要的文件裝入存儲器後再進行調試。命令中的D指定驅動器PATH為路徑,PARM1和PARM2則為運行被調試文件時所需要的命令參數。
在DEBUG程序調入後,將出現提示符,此時就可用DEBUG命令來調試程序。
二、DEBUG的主要命令
1、顯示存儲單元的命令D(DUMP),格式為:
_D[address]或_D[range]
例如,按指定范圍顯示存儲單元內容的方法為:
-d100 120
18E4:0100 c7 06 04 02 38 01 c7 06-06 02 00 02 c7 06 08 02 G...8.G.....G...
18E$:0110 02 02 bb 04 02 e8 02 00-CD 20 50 51 56 57 8B 37 ..;..h..M PQVW.
7
18E4:0120 8B
其中0100至0120是DEBUG顯示的單元內容,左邊用十六進製表示每個位元組,右邊用ASCII字元表示每個位元組,·表示不可顯示的字元。這里沒有指定段地址,D命令自動顯示DS段的內容。如果只指定首地址,則顯示從首地址開始的80個位元組的內容。如果完全沒有指定地址,則顯示上一個D命令顯示的最後一個單元後的內容。
2、修改存儲單元內容的命令有兩種。
·輸入命令E(ENTER),有兩種格式如下:第一種格式可以用給定的內容表來替代指定范圍的存儲單元內容。命令格式為:
-E address

例如,-E DS:100 F3'XYZ'8D
其中F3,'X','Y','Z'和各佔一個位元組,該命令可以用這五個位元組來替代存儲單元DS:0100到0104的原先的內容
第二種格式則是採用逐個單元相繼修改的方法。命令格式為:
-E address
例如,-E DS:100
則可能顯示為:
18E4:0100 89.-
如果需要把該單元的內容修改為78,則用戶可以直接鍵入78,再按"空格"鍵可接著顯示下一個單元的內容,如下:
18E4:0100 89.78 1B.-
這樣,用戶可以不斷修改相繼單元的內容,直到用ENTER鍵結束該命令為止。
·填寫命令F(FILL),其格式為:
-F range list
例如:-F 4BA:0100 5 F3'XYZ'8D
使04BA:0100~0104單元包含指定的五個位元組的內容。如果list中的位元組數超過指定的范圍,則忽略超過的項;如果list的位元組數小於指定的范圍,則重復使用list填入,直到填滿指定的所有單元為止。
3)檢查和修改寄存器內容的命令R(register),它有三種格式如下:
·顯示CPU內所有寄存器內容和標志位狀態,其格式為:
-R
例如,-r
AX=0000 BX=0000 CX=010A DX=0000 SP=FFFE BP=0000 SI=0000 DI=0000
DS=18E4 ES=18E4 SS=18E4 CS=18E4 IP=0100 NV UP DI PL NZ NA PO NC
18E4:0100 C70604023801 MOV WORD PTR [0204],0138 DS:0204=0000
·顯示和修改某個寄存器內容,其格式為:
-R register name
例如,鍵入
-R AX
系統將響應如下:
AX F1F4

即AX寄存器的當前內容為F1F4,如不修改則按ENTER鍵,否則,可鍵入欲修改的內容,如:

-R bx
BX 0369
:059F
則把BX寄存器的內容修改為059F。
·顯示和修改標志位狀態,命令格式為:
-RF系統將響應,如:
OV DN EI NG ZR AC PE CY-
此時,如不修改其內容可按ENTER鍵,否則,可鍵入欲修改的內容,如:
OV DN EI NG ZR AC PE CY-PONZDINV
即可,可見鍵入的順序可以是任意的。
4)運行命令G,其格式為:
-G[=address1][address2[address3…>
其中,地址1指定了運行的起始地址,如不指定則從當前的CS:IP開始運行。後面的地址均為斷點地址,當指令執行到斷點時,就停止執行並顯示當前所有寄存器及標志位的內容,和下一條將要執行的指令。
5)跟蹤命令T(Trace),有兩種格式:
·逐條指令跟蹤
-T [=address]
從指定地址起執行一條指令後停下來,顯示所有寄存器內容及標志位的值。如未指定地址則從當前的CS:IP開始執行。
·多條指令跟蹤
-T [=address][value]
從指定地址起執行n條指令後停下來,n由value指定。
6)匯編命令A(Assemble),其格式為:
-A[address]
該命令允許鍵入匯編語言語句,並能把它們匯編成機器代碼,相繼地存放在從指定地址開始的存儲區中。必須注意:DEBUG把鍵入的數字均看成十六進制數,所以如要鍵入十進制數,則其後應加以說明,如100D。
7)反匯編命令U(Unassemble)有兩種格式。
·從指定地址開始,反匯編32個位元組,其格式為:
-U[address]
例如:
-u100
18E4:0100 C70604023801 MOV WORD PTR[0204],0138
18E4:0106 C70606020002 MOV WORD PTR[0206],0200
18E4:010C C70606020202 MOV WORD PTR[0208],0202
18E4:0112 BBO4O2 MOV BX,0204
18E4:0115 E80200 CALL 011A
18E4:0118 CD20 INT 20
18E4:011A 50 PUSH AX
18E4:011B 51 PUSH CX
18E4:011C 56 PUSH SI
18E4:011D 57 PUSH DI
18E4:011E 8B37 MOV SI,[BX]
如果地址被省略,則從上一個U命令的最後一條指令的下一個單元開始顯示32個位元組。
·對指定范圍內的存儲單元進行反匯編,格式為:
-U[range]
例如:
-u100 10c
18E4:0100 C70604023801 MOV WORD PTR[0204],0138
18E4:0106 C70606020002 MOV WORD PTR[0206],0200
18E4:010C C70606020202 MOV WORD PTR[0208],0202

-u100 112
18E4:0100 C70604023801 MOV WORD PTR[0204],0138
18E4:0106 C70606020002 MOV WORD PTR[0206],0200
18E4:010C C70606020202 MOV WORD PTR[0208],0202

可見這兩種格式是等效的。
8)命名命令N(Name),其格式為:
-N filespecs [filespecs]
命令把兩個文件標識符格式化在CS:5CH和CS:6CH的兩個文件控制塊中,以便在其後用L或W命令把文件裝入存檔。filespecs的格式可以是:
[d:][path] filename[.ext]
例如,
-N myprog
-L
-
可把文件myprog裝入存儲器。
9)裝入命令(Load),有兩種功能。
·把磁碟上指定扇區范圍的內容裝入到存儲器從指定地址開始的區域中。其格式為:
-L[address[drive sector sector]
·裝入指定文件,其格式為:
-L[address]
此命令裝入已在CS:5CH中格式化了文件控制塊所指定的文件。如未指定地址,則裝入CS:0100開始的存儲區中。
10)寫命令W(Write),有兩種功能。
·把數據寫入磁碟的指定扇區。其格式為:
-W address drive sector sector
·把數據寫入指定的文件中。其格式為:
-W[address]
此命令把指定的存儲區中的數據寫入由CS:5CH處的文件控制塊所指定的文件中。如未指定地址則數據從CS:0100開始。要寫入文件的位元組數應先放入BX和CX中。
11)退出DEBUG命令Q(Quit),其格式為:
-Q
它退出DEBUG,返回DOS。本命令並無存檔功能,如需存檔應先使用W命令。

問題:初學者問一個低級問題,執行debug-a後,如果有一行輸入錯誤,如何更改這一行?

回答:
加入進行如下輸入:
D:\PWIN95\Desktop>debug
-a
2129:0100movax,200
2129:0103movbx,200
2129:0106movcx,200
2129:0109
此時,發現movbx,200一句錯誤,應為movbx,20,可以敲回車返回"-"狀態,然後輸入:
-a103
2129:0103movbx,20
如果多或者少若干行,不必重新輸入,可以用M命令移動後面的程序來去掉或者增加程序空間.

A.程序調用命令

C>DEBUG [D:] [PATH] [FILENAME[.EXT]] [PARM1] [PARM2]

其中,文件名是被調試文件的名字。如未鍵入文件名。可用DEBUG命令N和L把需要文件裝入存儲器後再調試。D指定驅動器,PATH為路徑,FILENAME為文件名,PARM為命令參數

B.顯示存儲單元命令

-D [ADDRESS]或 ;ADDRESS 地址

-D [RANGE] ;RANGE 范圍

C.修改存儲單元內容命令

-E ADDRESS [LIST]

D.檢查和修改寄存器內容命令

-R [REGISTER NAME] ;Register name 寄存器名字

E.匯編命令

-A [ADDRESS]

F.跟蹤命令

-T [=ADDRESS] [VALUE] ;Value 變數值

G.運行命令

-G [=ADDRESS ] [ADDRESS2 [ADDRESS3]

H.反匯編命令

-U [ADDRESS]

-U [RANGE]

I.命名命令

-N FILESPECS [FILESPECS]

FILESPECS的格式可為[D:][PATH]FILENAME [.EXT]

J.裝入命令

-L [ADDRESS[DRIVE SECTOR SECTOR]] ;DRIVE SECTOR 磁碟 扇區

K.寫命令

W ADDRESS DRIVE SECTOR

L.退出命令

-Q

Ⅱ 匯編call 命令 解析

貌似call只有原地址入棧,就是call指令占的地址,因為如果這個地址不入棧的話call調用的子程序返回時會找不到返回的地址,
你隨便反匯編一個程序,單步步入CALL,會發現堆棧寄存器只減了4,就是一個DWORD類型的32位的地址啦~~~
我跟過很多次了=
=

Ⅲ 匯編call 命令 解析

不同的CPU可能有不同的規定。下面只說常見的簡單CPU的指令。

常見的CPU的CALL指令(「調用」指令)的功能,就是以下兩點:

(1)將下一條指令的所在地址(即當時程序計數器PC的內容)入棧,

(2)並將子程序的起始地址送入PC(於是CPU的下一條指令就會轉去執行子程序)。

而子程序結尾處通常都要編寫一條RET指令(「返回」指令),RET指令的功能就是一條:

從棧中取出一條數據送入PC。

從上面敘述可以看出,正常情況下,RET指令從棧中取出的一條數據,也就是當初被CALL指令所入棧的下一條指令的所在地址。

因此,RET指令後,CPU的下一條指令就回去執行當初的CALL指令的下一條了。

至於其他操作,如sweetsugar123兄所說的「保護寄存器現場」等等,一般並非CALL指令的功能,而是需要程序員自行在子程序內編寫程序實現的。這些操作通常也需要用到堆棧。基於堆棧的「後進先出」性質,這些操作可以不幹擾CALL和RET指令的「保存返回地址」的功能。

Ⅳ 匯編call 命令 解析

不同的CPU可能有不同的規定。下面只說常見的簡單CPU的指令。
常見的CPU的CALL指令(「調用」指令)的功能,就是以下兩點:
(1)將下一條指令的所在地址(即當時程序計數器PC的內容)入棧,
(2)並將子程序的起始地址送入PC(於是CPU的下一條指令就會轉去執行子程序)。
而子程序結尾處通常都要編寫一條RET指令(「返回」指令),RET指令的功能就是一條:
從棧中取出一條數據送入PC。
從上面敘述可以看出,正常情況下,RET指令從棧中取出的一條數據,也就是當初被CALL指令所入棧的下一條指令的所在地址。
因此,RET指令後,CPU的下一條指令就回去執行當初的CALL指令的下一條了。
至於其他操作,如sweetsugar123兄所說的「保護寄存器現場」等等,一般並非CALL指令的功能,而是需要程序員自行在子程序內編寫程序實現的。這些操作通常也需要用到堆棧。基於堆棧的「後進先出」性質,這些操作可以不幹擾CALL和RET指令的「保存返回地址」的功能。

Ⅳ 匯編指令含義 xor shr rep lea cmp jl test 哪位能逐一詳解下!!!!

xor 異或 對於二進制0和1而言,相異為一,相同為0。如 1 xor 0= 1,1 xor 1 =0
shr,shift logical right(邏輯右移),用於匯編語言中,屬於邏輯運算中的移位指令。
rep ,只有ret,rep我沒見過,RET是子程序的返回指令,用於子程序的最後。
lea,lea AX,XXX 取標號XXX的偏移地址給AX
cmp A,B 比較A,B大小,操作是A-B,在這一局後面接jl等條件跳轉指令
jl 見cmp,如果相等則跳轉
test A,B 作A與B的操作

如果這些看不懂,建議你找一本匯編書好好看看,重點看寄存器,指令,定址方式等,看了還要記住。適當做點練習,匯編很痛苦,但是當你把寄存器和指令還有定址方式記熟了,相信匯編對你就是快樂的。

Ⅵ 匯編指令詳解

MOV(MOVe) 傳送指令
PUSH 入棧指令
POP 出棧指令
XCHG(eXCHanG) 交換指令
XLAT(TRANSLATE) 換碼指令
LEA (Load Effective Address) 有效地址送寄存器指令
LDS(Load DS with pointer) 指針送寄存器和DS指令
LES(Load ES with pointer) 指針送寄存器和ES指令
LAHF(Load AH with Flags) 標志位送AH指令
SAHF(Store AH into Flgs) AH送標志寄存器指令
ADD 加法指令
ADC 帶進位加法指令
INC 加1指令
SUB(SUBtract) 不帶借位的減法指令
SBB(SuVtrach with borrow) 帶借位的減法指令
DEC(DECrement) 減1指領
NEG(NEGate) 求補指令
CMP(CoMPare) 比較指令
MUL(unsinged MULtiple) 無符號數乘法指令
IMUL(sIgned MUL tiple) 有符號數乘法指令
DIV(unsigned DIVide) 無符號數除法指令
IDIV(sIgned DIVide) 有符號數除法指令
DAA 壓縮的BCD碼加法十進制調整指令
DAS 壓縮的BCD碼減法十進制調整指令
AAA 非壓縮的BCD碼加法十進制調整指令
AAS 非壓縮的BCD碼加法十進制調整指令
AND 邏輯與指令
OR 邏輯或指令
XOR 邏輯異或指令
NOT 邏輯非指令
TEST 測試指令
SHL(SHift logical Letf) 邏輯左移指令
SHR(SHift logical Right) 邏輯右移指令
ROL(Rotate Left ) 循環左移指令
ROR(Rotate Right) 循環右移指令
RCL(Rotate Left through Carry) 帶進位循環左移
RCR(Rotate Right through Carry) 帶進位循環左移
MOVS(MOVe String) 串傳送指令
REP(REPeat) 重復操作前綴
CLD(CLear Direction flag) 清除方向標志指令
STD(SeT Direction flag) 設置方向標志指令
CMPS(CoMPare String) 串比較指令
SCAS(SCAn String) 串掃描指令
REPE/REPZ(REPeat while Equal/Zero)相等/為零時重復操作前綴
REPNE/REPNZ(REPeat while Not Equal/Zero)不相等/不為零進重復前綴
JMP(JuMP) 無條件轉移指令
JZ,JNZ,JS,JNS,JO,JNO,JP,JNP,JB,JNB,JBE,JNBE,JL,JNL,JLE,JNLE,JCXZ 條件轉移指令
LOOP 循環指令P70
LOOPZ/LOOPE 為零/相等時循環指令
LOOPNZ/LOOPNE 不為零/不相等時循環指令
CALL 子程序調用指令
RET(RETun) 子程序返回指令
NOP(No OPeretion) 無操作指令
HLT(HaLT) 停機指令
OFFSET 返回偏移地址
SEG 返回段地址
EQU(=) 等值語句
DUP 操作數欄位用復制操作符
SEGMENT,ENDS 段定義指令
ASSUME 段地址分配指令
ORG 起始偏移地址設置指令
$ 地址計數器的當前值
PROC,ENDP 過程定義語句
NAME,TITLE,END 程序開始結束語句
MACRO,ENDM 宏定義指令

Ⅶ 匯編語言 jnz沒懂、、請詳細解釋下~

DEC CX

JNZ LOOP

前面一條指令-1後判斷符號位,不等於0跳到loop

等於0向下執行

或:

轉成C語言

for (cx= 0x0a; cx>0; cx--)

{

[di...] = [si..];

di --;

si --;

}

(7)匯編命令解讀擴展閱讀:

由於匯編指令系統龐大,因而需構建指令系統體系,其指令數量龐大,格式復雜,可記憶性差等。指令中最難的是指令所支持的定址方式,其實質就是指令中操作數如何獲取。對於處理器而言,就是如何找到他所需的數據。

但對於計算機底層的匯編語言而言,這種定址方式將涉及大量的計算存儲格式,與 復雜的存儲管理方式緊密相關,因而難以理解。最後,匯編指令還關繫到如何影響標志位,但處理器標志位非常復雜,因而對其機制掌握就比較困難。

Ⅷ 匯編語言指令大全,要詳細的 !!!!

一、數據位傳送指令:

1、MOV C, bit ;bit 可直接定址位 C←(bit)

2、MOV bit,C ;C 進位位 (bit) ← C

二、位變數修改指令:

1、CLR C ; 將C=0

2、CLR bit

3、CPL C ; 將C求反再存入C

4、CPL bit ; 將bit求反再存入bit

5、SETB C ; 將C=1

6、SETB bit ; (bit) ← 1

三、位變數邏輯指令:


ANL C, bit ANL C, bit ORL C, bit ORL C, bit

Ⅸ 匯編指令解釋

1.Rn 表示R0~R7中的一個
2.#data 表示8位的數值 00H~FFH
3.direct 表示8位的地址 00H~FFH
4.@Ri 表示寄存器間接定址 只能是R0或者R1
5.@DPTR 表示數據指針間接定址
6.bit 表示位地址
7.$ 表示當前地址

寄存器定址 MOV A,R1 將R1中的數值賦予A
直接定址 MOV A,3AH 將地址3AH中的數值賦予A
立即定址 MOV A,#3AH 將3AH數值賦予A
寄存器間址 MOV A,@R0 將 R0中地址的數值賦予A
變址定址 MOVC A,@A+DPTR 以A中的數值為地址偏移量進行查表
相對定址 AJMP MATN 跳轉到行號為MATNC處
位定址 MOV C,7FH 將位地址7FH的數值賦予C

MOV A,#3AH 數據傳輸、賦值命令
PUSH direct 將direct為地址的數值壓入堆棧中
POP direct 將direct為地址的數值彈出堆棧
XCH A,direct 將direct中的數值與A進行交換
ADD A,direct 將direct中的數值與
INC direct 將direct中的數值加1
SUBB A,direct 將A中的數值減去direct中的數值和Cy值,並保存在A中,如果想使用不帶Cy減法,可以在運算前對Cy清零 CLR C
DEC direct 將direct中的數值減1
DA A 用於對BCD碼加減法後進行10進制調整
MUL AB 將A和B相乘,並把高八位放在B中,低八位放在A中
DIV AB 將A和B相除,並把商放在A中,余數放在B中
ANL A,direct 將A與direct中的數值進行與運算,結果保留在A中(與運算規律:有0出0,全1出1)
ORL A,direct 將A與direct中的數值進行或運算,結果保留在A中(或運算規律:有1出1,全0出0)
XRL A,direct 將A與direct中的數值進行異或運算,結果保留在A中(異或運算規律:全0出0,全1出0,01、10出1)
CRL A 對A清零
CPL A 對A取反
RL A 對A中數右移
RR A 對A中數左移
RLC A 對A中數帶Cy右移
RRC A 對A中數帶Cy左移
SWAP A 對A中的數高4位低4位互相交換
LJMP 長跳轉指令,64K地址范圍
AJMP 短跳轉指令,2K地址范圍
JZ rel 如果A為0就跳轉到rel行號處
JNZ rel 如果A不為0就跳轉到rel行號處
CJNE A,#data,rel 如果A不等於data就跳轉到rel行號處
DJNZ R1,rel 如果R1減1後不為0就跳轉到rel行號處
ACALL rel 調用rel子程序,2K地址以內
LCALL rel 調用rel子程序,64K地址以內
RET 子程序返回指令
RETI 中斷程序返回指令
NOP 空操作指令
MOV C,bit 將位地址bit中的值賦予C
CRL bit 將bit位地址清0
SETB bit 將bit位地址置1
CPL bit 將bit位地址取反
ANL C,bit 將地址bit中的值和C做與運算,結果存放在C中
ORL C,bit 將地址bit中的值和C做或運算,結果存放在C中
JC rel 如果Cy為1,就跳轉到rel行號處
JNC rel 如果Cy為0,就跳轉到rel行號處

Ⅹ 請問:請簡要解釋一下匯編指令DAA

MOVAL,37H

MOVBL,35H

ADDAL,BL;

執行以上3步後,AL=6CH

首先AL=6CH=01101100B因為AL的低四位1100B大於9,所以AL=AL+06H=72H,且AF=1;

這里不明白樓主想表達什麼?不好意思了
是的,但是如果程序編譯運行後,你編寫的十進制在內存中將會被自動轉換成十六進制哦

首先,樓主的觀察力很強,贊一個.

因為DEBUGXXX.EXE後,程序就載入了內存中,而數據在內存中都是以十六進制數表示的哦; 所以,如果你編寫的程序有十進制數的話,程序載入內存後,會自動轉換成十六進制數哦

PS:若有不明白的地方,可以追問

閱讀全文

與匯編命令解讀相關的資料

熱點內容
如何查看伺服器系統版本信息 瀏覽:512
成都市土地出讓金演算法 瀏覽:702
鋼筋加密標記 瀏覽:575
ps中擴展功能在文件夾的什麼位置 瀏覽:903
雙極壓縮機為什麼要先高壓 瀏覽:527
蘋果手機伺服器填什麼 瀏覽:832
android移動動畫效果 瀏覽:691
電子和伺服器是什麼意思 瀏覽:691
phpurl中文亂碼問題 瀏覽:893
程序員那麼可愛大結局陸漓產子 瀏覽:538
java如何從雲伺服器讀取本地文件 瀏覽:923
壓縮空氣軟管製作方法 瀏覽:911
天河三號演算法 瀏覽:924
php隊列教程 瀏覽:632
洪水命令 瀏覽:529
安卓怎麼弄成蘋果在線 瀏覽:435
谷歌web伺服器地址 瀏覽:900
安卓鎖屏圖片如何刪除 瀏覽:720
python3多進程編程 瀏覽:715
證明代碼是程序員寫的 瀏覽:397