汇编
C1
CPU只能执行机器指令
利用寄存器存放运算数据和运算结果,效率最高
汇编语言
- 与机器关系密切
- 效率高
- 原程序繁琐
- 调试困难
CPU基本功能:
- 执行机器指令
- 暂存少量数据
- 访问存储器
机器指令一般由操作码和操作数构成
C2
实方式是最初的工作方式,保护方式能发挥出最大的性能
EAX、EBX、ECX、EDX、ESI、EDI、EBP、ESP
NEG:取补
CF ZF SF:与运算结果的最高位相同 OF:正数加正数等于负数,负数加负数变成正数
CLC:清CF STC:置CF CMC:CF取反
ADC:带进位,即+CF
SBB:即继续减去CF
n根地址线,可形成的最大物理地址是2n-1
代码段、数据段和堆栈段
寻址方式:除ESP寄存器外,其他7个通用寄存器都可以作为变址寄存器
- 立即寻址:用立即数,只有源操作数才可以用立即数
- 寄存器寻址方式
- 存储器寻址方式:
- 直接寻址:[98765H]
- 寄存器间接寻址:[ESI]
- 寄存器相对寻址
- 基址加变址
显式地标明存储器操作数的尺寸:MOV WORD PTR var2, 9
条件转移指令:记
CMP:目的操作数-源操作数 (影响各标志)
- 根据零标志ZF是否置位,判断两者是否相等,JNZ(不等于0转移)
- 如果两者是无符号数,可根据进位标志CF判断大小,JAE(高于等于转移)
- 如果两者是有符号数,要同时根据符号标志SF和溢出标志OF判断大小,JGE(大于等于转移)
- SF=0,OF=0,表示a-b>0且没有溢出,则a>b
- SF=1,OF=1,a必为正数,b必为负数,a>b
- SF!=OF表示a<b
无条件转移指令:JMP
C3
传递入口参数的方法:
- 寄存器传递参数
- 堆栈传递法
MUL(无符号数乘法指令,被乘数位于EAX,操作数不能是立即数)
-
IMUL OPRD
-
IMUL DEST,SRC
-
IMUL DEST,SRC1,SRC2(SRC2只能是一个立即数)
DIV OPRD
IDIV OPRD
CBW
CWD
CDQ
CWDE
知道这四个怎么用
符号扩展:MOVSX:最高位是1就扩展成F,否则是0
零扩展:MOVZX
NOT
AND
OR
XOR
TEST:将两个操作数按位与,然后仅影响状态标志
移位的位数只能由CL或立即数决定!
SAL(Arithmetic)
SHL
这两个左移相同,最高位进CF,最低位补0
SAR
算术右移最低位进CF,最高位补之前的最高位
SHR
逻辑右移最低位进CF,最高位补0
算术(逻辑)左移1位,相当于乘以2
算术右移1位,相当于有符号数除以2
逻辑右移1位,相当于无符号数除以2
ROL
ROR
丢掉的位进CF和需要补位的地方
RCL
RCR
带进位
段内转移和段间转移
条件转移指令和循环指令,只能实现段内转移
LOOP:
- DEC ECX
- JNZ LABEL
LOOPE
LOOPNE
寄存器作为局部变量可以提高效率,但寄存器数量有限
一般利用堆栈来安排局部变量
RET count:额外调整ESP。把count加到ESP,常用于平衡在调用子程序时压入堆栈的参数
C4
操作方向由DF决定,CLD:清DF,STD:置DF
LODSB:
- MOV AL,[ESI]
- INC ESI
LODSW
LODSD
STOSB:把累加器EAX的内容送到寄存器EDI所指向的存储单元中,然后根据方向标志DF使EDI之值增1或减1
MOVSB:
- LODSB
- STOSB
SCASB
CMPSB
REP:重复前缀,REP MOVSB
C5
C6
实方式下指令指针寄存器EIP中的高16位必须是0,相当于只有低16位的IP起作用
实方式下堆栈指针寄存器ESP中的高16位必须是0,相当于只有低16位的SP起作用
实地址可访问物理地址空间:00000H – FFFFFH
段起始地址 = 段值×16
物理地址 = 段值×16 + 偏移
RETF 段间返回指令
IA-32系列处理器支持两种段模式,也即32位段模式和16位段模式
在保护方式下,一般采用32位段;在实方式下,只能使用16位段
C7
BIOS包含了主要I/O设备的处理程序和许多常用例行程序,它们一般以中断处理程序的形式存在
C8
中断允许标志IF
为1时,允许可屏蔽中断
为0时,禁止可屏蔽中断
单步标志TF
为1时,进入单步
为0时,正常
必考题汇总
- 汇编语言特点:汇编繁琐,编写效率低,但程序效率高,能掌控一切!
- 寄存器EAX能通过……指令,变成另一个值
- 堆栈的作用:
- 保存函数的返回地址
- 用于向函数传递参数
- 安排函数的局部变量
- 堆栈相关知识
- p105/把32位二进制数转换为10进制数的ASCll码串
- 第五章作业必考问答题
- p159堆栈
- p68、69
- p223逻辑地址计算物理地址
- p241/6-37
- p310/数据传送方式
- p314/一般查询方式流程图
- 子程序与中断处理程序的区别:主动与被动
- pptRCH82 INT中断程序
- jump call INT n之间的差异
ZSBD
将小写字母的ASCLL码转换为大写字母: AND AL,11011111B