没有合适的资源?快使用搜索试试~ 我知道了~
入栈时先入高位后入低位,出栈时相反) 1)进栈PUSH 2)出栈POP 3)标志寄存器出入栈PUSHF/POPF 4)通用寄存器保护现场PUSHA/POPA二.
资源详情
资源评论
资源推荐
1-4 章
1.没有-0 的补码,8 位二进制时-128 的补码就是 1000 0000
2.补码的补码等于原码
3.(x+y)补=x 补+y 补
4.溢出:运算结果超出了运算器所能表示的范围
5.CPU 判溢:如加数与被加数的最高位相同,却与结果的最高位相异,则将溢出标志置为 1
6.程序员判溢:
如果参与运算的数是无符号数,则判进位标志,进位标志=1,表示溢出错;
如果参与运算的数是有符号数,则判溢出标志,溢出标志=1,表示溢出错。
7.变质寻址中,比例因子只能是 1、2、4、8 中的一个数
8.对于 MOV 指令,立即数不能直接送段寄存器;
不允许在两个段寄存器之间传送数据
9.对各操作指令是否影响标志位的总结:
(1)传送指令(MOV、LEA 等):不影响
(2)堆栈指令(PUSH、POP):POPF 影响,其他不影响
(3)算数指令
1)加法指令:影响 6 个(INC 不影响 C 标志)
2)减法指令:影响 6 个(DEC 不影响 C 标志)
3)求补指令:影响 6 个
4)比较指令:影响 6 个
5)乘法指令:影响 O、C 标志
6)除法指令:不影响
7)BCD 码调整指令:影响(具体影响位见第 10 点内)
(4)逻辑运算指令:
1)逻辑运算(AND、OR、NOT、XOR、TEST)除 NOT 不影响标志位外,均影响 OSZPC
标志(即除 A 标志外,并且其中 O、C 置 0)
2)一般移位指令(SHL、SAL、SHR、SAR)均影响 OSZPC(即除 A 标志外)
3)循环移位指令(ROL、ROR、RCL、RCR)均只影响 O、C 标志
(5)转移和调用指令:不影响
10.需要掌握的指令集
一.传送类指令
(1)通用传送
1)数据传送 MOV
2)地址传送 LEA
3)交换指令 XCHG
4)查表指令 XLAT(查找的是数据段中的字节表,EBX/BX=表头有效地址,AL=元素对表
头偏移地址)
(2)堆栈指令(操作数必须是字或者双字。
SP 指向的是最后推入堆栈的信息的所在单元,注意进栈时 SP 向低位移动,即向低
地址方向延伸。
入栈时先入高位后入低位,出栈时相反)
1)进栈 PUSH
2)出栈 POP
3)标志寄存器出入栈 PUSHF/POPF
4)通用寄存器保护现场 PUSHA/POPA
二.算数运算指令
1)加法 ADD、ADC、INC(INC 将操作数视为无符号数,不影响 C 标志)
2)减法 SUB、SBB、DEC(同上)
3)求补指令 NEG(即求负数)
4)比较指令 CMP(同 SUB,但不保存结果)
5)乘法指令 MUL(无符号乘法,隐含目的操作数 DX、AX,源操作数不能是立即数)、IMUL
(带符号乘法,隐含目的操作数 DX、AX,源操作数不能是立即数)
6)除法指令 DIV(无符号除法,同上)、IDIV(有符号除法,同上)
7)BCD 码调整指令:
加法:DAA(组合 BCD,影响除 O 标志外的标志位)、AAA(未组合 BCD,只影响 A、
C 标志位)
减法:DAS(组合 BCD,影响除 O 标志外的标志位)、AAS(未组合 BCD,只影响 A、C
标志位)
乘法:AAM(未组合 BCD,只影响 P、S、Z 标志位)
除法:AAD(未组合 BCD,只影响 P、S、Z 标志位)
三.逻辑运算指令
(1)逻辑运算指令
逻辑与 AND、逻辑或 OR、逻辑非 NOT、逻辑异或 XOR、测试 TEST(进行 AND 运算,
但结果不送入目标操作数)
(2)移位指令:书 P101
四.转移和调用指令
(1)无条件转移 JMP
(2)条件转移(括号内为转移条件)
1)单个条件标志:JZ/JNZ、JS/JNS、JO/JNO、JP/JNP、JCXZ(CX=0 转移)
2)无符号数大小比较(前跟 CMP):JC(小于)/JNC(不小于)、JA(大于)/JNA(不大
于)
3)有符号数大小比较(前跟 CMP):JL(小于)/JLE(不小于)、JG(大于)/JGE(不大
于)
(3)循环控制转移
1)LOOP:CX 不等于 0 转移
2)LOOPZ/LOOPE:CX 不等于 0 且 Z=1 转移
3)LOOPNZ/LOOPNE:CX 不等于 0 且 Z=0 转移
(4)子程序调用 CALL/返回 RET(注意子程序定义格式 PROC/ENDP)
调用时可以间接转移,如 BX 存储转移地址
注意调用时将 IP 存于堆栈段
带返回参数的 RET EXP:即释放多余的参数占用的堆栈空间(见第三章 PPT 第 170 页)
五.串操作指令
(1)串传送:把 DS:[SI]的若干元素→ES:[DI]的若干单元 MOVSB/MOVSW/MOVSD(传送一
个元素后 CPU 自动修改 SI、DI,D 标志为 0 时 SI、DI 自增,D 标志为 1 自减)
有重复前缀的格式:如 REP MOVSB,以 CX 为计数器
(2)串装入:LODSB DS:[SI]→AL LODSW DS:[SI]→AX LODSD DS:[SI]→EAX(同样根据 D
标志决定方向)
( 3 ) 串 存 储 : STOSB AL→ES:[DI]1 个 单 元 STOSW AX→ES:[SI]2 个 单 元 STOSD
EAX→ES:[DI]4 个单元(D 标志决定方向)
同样有重复前缀格式 REP STOSB/STOSW/STOSD,CX 为计数器
(4)串比较:源串地址→DS:[SI],目串地址→ES:[DI],D 标志决定方向
CMPSB:字节串比较 CMPSW:字串比较 CMPSD:双字比较
结果是根据比较量元素是否相等,相等则 Z 标志置 1,不等置 0
同 样 有 重 复 前 缀 REPE ( 相 等 则 继 续 循 环 ) /REPNE ( 不 等 则 继 续 循 环 )
CMPSB/CMPSW/CMPSD(CX 为计数器)
(5)串搜索:在 ES:[DI]的目标区搜索是否有规定的关键字,目标地址→ES[DI],D 决定方向,
关键字→AL/AX/EAX
SCASB/SCASW/SCASD,如果找到关键字,则 Z 标志置 1,否则置 0
同样有重复前缀格式 REPE/REPNE SCASB/SCASW/SCASD,CX 为计数器
六.处理机控制指令
(1)标志处理指令
1)CLC/STC:C 标志置 0/1
2)CMC:C 标志取反
3)CLD/STD:D 标志置 0/1
4)CLI/STI:I 标志置 0/1
(2)其他处理指令
1)WAIT:处理器等待
2)ESC:处理器交权
3)LOCK:封锁总线
4)HLT:处理器暂停
5)NOP:空操作指令
11.完整的段定义格式
.586
DATA SEGMENT USE16
...
DATA ENDS
CODE SEGMENT USE16
ASSUME CS:CODE,DS:DATA
BEG:MOV AX,DATA
MOV DS,AX
...
MOV AH,4CH
INT 21H
CODE ENDS
END BEG;汇编结束语句,注意位置
(注意一下定位参数、链接参数、分类名、段长度【USE16 表示单元有效地址为 16 位】的
含义,尤其是 AT 表达式【表示段基址,常配合 ORG 使用】。
定位伪指令 ORG 用于通知汇编程序将下一条指令或数据存放在表达式给出的偏移地址。
如果有堆栈段的话,堆栈段的链接属性应为 STACK,分类名为'STACK'且不能省略。
EXE 文件汇编源程序必须有堆栈段,否则发出警告)
(注意:COM 文件编程格式要求使用定位 ORG 伪指令将程序的启动指令放在代码段偏移地
址为 100H 的单元)
12.DOS 调用
格式:
MOV AH,功能号
...;设置入口参数
INT 21H;执行 DOS 调用
...;分析利用出口参数
(1)01H:等待键入一个字符并回显,响应 Ctrl_C
入口参数:无 出口参数:AL=按键 ASCII 码
(2)02H:显示一个字符,响应 Ctrl_C(且该功能破坏 AL 寄存器内容)
入口参数:DL=待显字符 ASCII 码 出口参数:无
(3)07H:等待键入一个字符且无回显,不响应 Ctrl_C
入口参数:无 出口参数:AL=按键 ASCII 码
(4)08H:等待键入一个字符且无回显,响应 Ctrl_C
入口参数:无 出口参数:AL=按键 ASCII 码
(5)09H:显示字符串,响应 Ctrl_C(破坏 AL 寄存器内容)
入口参数:DS:DX=字符串首地址(必须以$结束) 出口参数:无
(6)0AH:等待键入一串字符串送入用户数据缓冲区
入口参数:DS:DX=缓冲区首地址 出口参数:存放于缓冲区的字符串
缓冲区定义格式:【缓冲区能容纳的字符个数】【实际接收的字符个数】【接收的内容...】
13.BIOS 调用
格式:
MOV AH,功能号
剩余18页未读,继续阅读
Xhinking
- 粉丝: 24
- 资源: 320
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功
评论0