生活随笔
收集整理的這篇文章主要介紹了
汇编 cmp_汇编复习
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
第一章
五部分:(運算器、控制器)、存儲器、輸入/輸出設(shè)備
↑↑ CPU ↑↑ ↑內(nèi)存↑
三條總線:控制總線、地址總線、數(shù)據(jù)總線
‘0’~‘9’—— 30H ~ 39H
‘A’~‘F’—— 41H ~ 46H
回車 —— 0DH
換行 —— 0AH
運算器對有符號數(shù)和無符號數(shù)同等對待進(jìn)位保存在CF9(進(jìn)位標(biāo)志位)中當(dāng)參與運算的兩數(shù)符號相同,結(jié)果符號卻他們相異時,判斷溢出第二章
AX、BX、CX、DX
SI、DI
BP、SP
其中AX、BX、CX、DX可分為高位,低位兩個八位寄存器使用
如:
a. 實模式
b. 保護(hù)模式
c. 虛擬86模式
a. 加電復(fù)位之后,486工作在實模式下,系統(tǒng)在Dos管理下
b. 只能訪問 1M 內(nèi)存
c. 存儲管理部件對存儲器只分段,不分頁,每段最大64KB
d. 段寄存器中存放段基址
邏輯段 段基址 偏移地址
代碼段 CS IP
堆棧段 SS SP
數(shù)據(jù)段 DS 根據(jù)不同的尋
附加段 ES 址方式,選擇BX/SI/DI
虛擬地址 ——> 分段部件 = 線性地址
線性地址 ——> 分頁部件 = 物理地址
在實模式下,沒有分頁部件,即 線性地址 = 物理地址
第三章
指令 = 操作碼 + 操作數(shù)
指令格式如下:
標(biāo)號:操作碼助記符 [TAB] 操作數(shù)(多個操作數(shù)用 , 隔開) ;注釋
其中,標(biāo)號表示該條指令的符號地址(邏輯地址),以下劃線或字母開始不超過31個字符
C、A、S、P、Z、O
C(進(jìn)位/借位標(biāo)志)加減法執(zhí)行后,最高位產(chǎn)生進(jìn)位或借位,則C置1,否則置0
2. A(輔助進(jìn)位/借位)
加法或減法執(zhí)行后,D3向D4有進(jìn)位或借位,則A置1,否則置0
3. S(符號寄存器)
S標(biāo)志記錄結(jié)果的最高位的值
4. P(奇偶標(biāo)志)
根據(jù)運算結(jié)果低8位中 1 的個數(shù)判定,個數(shù)為偶數(shù)則P置1,奇數(shù)則置0(P只關(guān)心低8位)
5. Z(全〇標(biāo)志)
isZero( ) 若全為零則置1
6. O(溢出標(biāo)志位)
若溢出則置1
立即尋址只能用于源操作數(shù),不能用于目標(biāo)操作數(shù)
常用于賦值
16進(jìn)制表示時,開頭為 A~F時,需要在開頭加0
2. 寄存器尋址
立即數(shù)在寄存器中
3. 直接尋址
形式:
a. 段寄存器:[偏移地址] 如:Mov AX, DS:[45H]
b. 段寄存器:變量名 如:Mov AX, DS:Buf
4. 間接尋址
BP SS
BX SI DI DS
5. 基址尋址
BP SS
BX DS
段寄存器:[基址寄存器 + 位移量]
6. 變址尋址
SI DI DS
段寄存器:[比例因子 * 變址寄存器 + 位移量]
7. 基+變
段寄存器:[基址寄存器 + 比例因子 * 變址寄存器 + 位移量]
;數(shù)據(jù)定義偽指令 用于定義變量
DB 定義字節(jié)變量
DW 定義字變量
DD 定義雙字變量;符號定義偽指令 用于定義常量和符號名
EQU 等值偽指令(定義出來視為常量)
= 等號偽指令(等號偽指令定義出來的常量值可變,EQU定義出來的不可變);數(shù)值回送運算符
SEG 回送邏輯段的段基址或標(biāo)號/變量所在邏輯段的段基址
OFFSET 回送標(biāo)號/變量的偏移地址
TYPR 回送標(biāo)號或變量的類型(字節(jié)返回1,字返回2,雙字返回3)
$ 使用 $ 統(tǒng)計之前的所有字符長度, 常數(shù)不算(緊跟在DBDWDD之后可以統(tǒng)計字符串長度);屬性操作符
PTR 格式
類型說明符 PTR 標(biāo)號或變量的地址表達(dá)形式
1. 寄存器前不能加 PTR, 內(nèi)存數(shù)前才可以
2. 長度不確定時使用,MOV WORD PTR [BX], 1234
3. 有變量且長度不一致,MOV AX, WORD PTR BUF
1. MOV
格式:MOV 目標(biāo)操作數(shù), 源操作數(shù)立即數(shù)不能做目標(biāo)操作數(shù)
不可同時操作內(nèi)存數(shù)
不可同時操作段寄存器
不允許將立即數(shù)傳入段寄存器2. LEA 偏移地址傳送指令
格式:LEA 目標(biāo)操作數(shù), 源操作數(shù)MOV BX, OFFSET BUF
LEA BX, BUF
上兩句等價目標(biāo)操作數(shù)要為16/32位寄存器,不影響6個標(biāo)志位3. XCHG
格式:XCHG 目標(biāo)操作數(shù), 源操作數(shù)
將目標(biāo)操作數(shù)和源操作數(shù)數(shù)據(jù)交換不能同時為內(nèi)存數(shù),段寄存器,立即數(shù)4. 堆棧操作
進(jìn)出堆棧 的數(shù)據(jù)長度必須為字或雙字
4.1 PUSH
格式:PUSH 操作數(shù)
將源操作數(shù)壓入棧中,16位時 (sp)-2 -> (sp)
4.2 POP
格式:POP 操作數(shù)
將棧頂元素彈出,(sp)+ 2 -> (sp)
4.3 PUSHA/POPA
全部壓入棧/彈出棧5.加減法
5.1 加法
5.1.1 ADD
格式:ADD 目標(biāo)操作數(shù), 源操作數(shù)
源操作數(shù) + 目標(biāo)操作數(shù) -> 目標(biāo)操作數(shù)
兩數(shù)等長,且不可同為內(nèi)存數(shù),段寄存器
5.1.2 ADC
格式:ADC 目標(biāo)操作數(shù), 源操作數(shù)
(CF)+ 目標(biāo)操作數(shù) + 源操作數(shù)
5.2 減法
5.2.1 SUB
格式:SUB 目標(biāo)操作數(shù), 源操作數(shù)
目標(biāo)操作數(shù) - 源操作數(shù) -> 目標(biāo)操作數(shù)
5.2.2 SBB
格式:SBB 目標(biāo)操作數(shù), 源操作數(shù)
目標(biāo)操作數(shù) - 源操作數(shù) - (CF) -> 目標(biāo)操作數(shù)
6 CMP
格式:CMP 目標(biāo)操作數(shù),源操作數(shù)
只改變6個標(biāo)志位,不保存運算結(jié)果
目標(biāo)操作數(shù)不可為立即數(shù)
7 自增自減
7.1 INC
格式:INC 目標(biāo)操作數(shù)
目標(biāo)操作數(shù)自增1
7.2 DEC
格式:DEC 目標(biāo)操作數(shù)
目標(biāo)操作數(shù)自減1
8 NEG
格式:NEG 目標(biāo)操作數(shù)
將目標(biāo)操作數(shù)求補后(即0-目標(biāo)操作數(shù))的結(jié)果(補碼的形式)送入目標(biāo)操作數(shù)
9 邏輯運算
9.1 AND(與)
格式:AND 目標(biāo)操作數(shù),源操作數(shù)
將目標(biāo)操作數(shù)與源操作數(shù)相與,送入目標(biāo)操作數(shù)
常常用于指定位清零(置0)
9.2 OR(或)
格式:OR 目標(biāo)操作數(shù),源操作數(shù)
將源操作數(shù)與目標(biāo)操作數(shù)相或,放入目標(biāo)操作數(shù)
常用于指定位置1
9.3 NOT(非)
格式:NOT 目標(biāo)操作數(shù)
將目標(biāo)操作數(shù)按位取反,送回目標(biāo)操作數(shù)中
9.4 XOR(異或)
格式:XOR 目標(biāo)操作數(shù),源操作數(shù)
將目標(biāo)操作數(shù)和源操作數(shù)異或,送入,目標(biāo)操作數(shù)中
常用于指定位取反
10 TEST(測試指令)
格式:TEST 目標(biāo)操作數(shù),源操作數(shù)
將兩數(shù)進(jìn)行與運算,結(jié)果不保存,C、O置0,對A未定義,S、P、Z按結(jié)果設(shè)置
11 移位指令
11.1 開環(huán)移位指令 算術(shù)左移: SAL 操作數(shù),移位次數(shù)算術(shù)右移: SAR 操作數(shù),移位次數(shù)邏輯左移: SHL 操作數(shù),移位次數(shù)邏輯右移: SHR 操作數(shù),移位次數(shù)
11.2 閉環(huán)移位指令含進(jìn)位的循環(huán)左移: RCL 操作數(shù),移位次數(shù)含進(jìn)位的循環(huán)右移: RCR 操作數(shù),移位次數(shù)不含進(jìn)位的循環(huán)左移:ROL 操作數(shù),移位次數(shù)不含進(jìn)位的循環(huán)右移:ROR 操作數(shù),移位次數(shù)
12 循環(huán)轉(zhuǎn)移指令
12.1 JMP(無條件轉(zhuǎn)移)
格式:JMP 標(biāo)號
12.2 LOOP
格式:LOOP 標(biāo)號
例:MOV CX, 7
A: ...LOOP A
即循環(huán)7次
12.3 條件轉(zhuǎn)移指令
JZ/JE Z為1
JNZ/JNE Z為0
JS S為1
JNS S為0
JO O為1
JNO O為0
JP P為1
JNP P為0
JC C為1
JNC C為0
12.4 無符號數(shù)大小比較(CMP X, Y)
JA X > Y
JNA X <= Y
JC X < Y
JNC X >= Y
12.5 有符號數(shù)大小比較(CMP X, Y)
JG X > Y
JGE X >= Y
JL X < Y
JLE X <= Y
13 子程序
子程序格式:
CALL [子程序名]
...
...
[子程序名] PROC
...
RET
ENDP
第四章
DATA SEGMENT USE16
......
(數(shù)據(jù)定義)
DATA ENDS
CODE SEGMENT USE16
BEG: ...
... ...
CODE ENDS
END BEG
a. 編輯程序,設(shè)該程序為 a.asm
b. 匯編該程序 masm a.asm(書上為:ml/c a.asm)產(chǎn)生 a.obj文件
c. 鏈接 link a.obj
d. 執(zhí)行 a.exe
01H例子: MOV AH, 1
INT 21H
等待從鍵盤輸入一個字符,同時將該字符顯示在顯示器上
入口參數(shù):無
出口參數(shù):AL = 按鍵 ASCLL值
2. 02H
例子:MOV DL, 'A'
MOV AH, 2
INT 21H
在屏幕上顯示一個字符,光標(biāo)右移一位
入口參數(shù):DL = 顯示字符的ASCLL
出口參數(shù):無
注:會破壞AL寄存器
3. 09H
顯示字符串
入口參數(shù):DS:DX = 字符串首地屏幕上 ,字符串必須'$'結(jié)尾
出口參數(shù):無
注:會破壞AL
4. 0AH
等待字符串輸入,保存入緩沖區(qū),同時在屏幕上顯示
入口參數(shù):DS: DX = 輸入數(shù)據(jù)緩沖區(qū)首地址
以回車為標(biāo)志,緩沖區(qū)首單元放置預(yù)計可接受字符個數(shù),buf+1格放置實際字符數(shù)(不包含回車),符串由buf+2 開始存儲。緩沖區(qū)不接受超長字符。
5. 0EH
bios:輸出字符。
MOV AH 0EH
MOV AL ‘A’
INT 10H
總結(jié)
以上是生活随笔為你收集整理的汇编 cmp_汇编复习的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。