3.CISC/RISC
1.C(complex复杂):
①一条指令完成一个复杂的基本功能
②除了极复杂的某些指令不设计单独电路外,每条的指令都可以由一个单独的电路完成(电路设计复杂)
③复杂的指令通过多个电路配合存储部件实现——微程序
④指令长度不固定
2.R(Reduced精简)
①一条指令完成一个基本动作;多个指令组合成一个复杂的功能
②一条指令一个电路,但由于只提供基本操作,因此电路设计简单
③每条指令的执行时间都差不多——方便实现并行、流水线
④指令长度定长
4.程序的机器级代码表示
4.1.常用汇编指令介绍
1.中括号内指明的是内存地址,常与读写长度结合使用,表示以该地址为首地址的多少空间内(dword ptr双字32bit,word ptr单字15bit,byte ptr字节8bit)
2.h代表的是十六进制
3.操作数若是二进制/十六进制数,则采用的是立即寻址
4.目的操作数d——destination,源操作数s——sourse
5.寄存器的种类:
①每个寄存器都为32bit
②EAX、EBX、ECX、EDX为通用寄存器:可以存放任何数据
可以只使用低16bit(AX、BX、CX、DX);也可以指定使用低16bit的高8bit和低8bit(AH、AL;BH、BL;CH、CL;DH、DL)
③EBP指向栈底,ESP指向栈顶
6.更多汇编指令示例:
①寄存器间接寻址:ebx存放的是源操作数的主存地址
②寄存器间接寻址:ebx存放的是目的操作数的主存地址
③寄存器间接寻址:ebx存放的是源操作数的主存地址,取8bit
④未指明操作数大小的情况下,默认是32bit
⑤间接寻址:主存地址af996中存放的是目的操作数的主存地址,h表示af996是十六进制
⑥寄存器间接寻址:+8为偏移量,源操作数的主存地址为ebx寄存器中存放的地址 + 8
⑦间接寻址:-12位偏移量,h表示af996为十六进制,源操作数的主存地址为主存地址af996 - 12
4.2.常用的x86汇编指令
执行操作后,需要将结果放回目的操作数的地址中,因此,目的操作数不可以为常量
①算术运算指令
1.i表示有符号数的操作
2.除法指令中s为除数,被除数默认已经被放入edx和eax中(除法开始之前需要对被除数进行位扩展)
②逻辑运算指令
4.3.AT&T格式和INTER格式
①AT&T格式左边为源操作数,右边为目的操作数(与INTER格式相反)
②AT&T格式寄存器前需要加%(INTER格式不需要)
③AT&T格式立即数前加$(INTER格式直接给出立即数)
④AT&T格式主存地址为小括号(INTER格式主存地址为中括号)
⑤AT&T格式指令后增加b、w、l表示读/写的长度(分别对应INTER格式的dworld、word、btye)
⑥AT&T格式偏移量写在括号外(INTER格式偏移量写在括号内)
4.4.选择语句的机器级表示
1.无条件转移指令jmp:
①通过修改PC的内容改变下一条执行的指令
②通过标号跳转(jump NEXT)
2.条件转移指令:满足条件时才进行跳转
cmp实际上是做a - b(减法运算),通过标志位CF、ZF、OF、SF等标志位判断
4.5. 循环语句的机器级表示
1.通过条件转移指令(标号)实现循环
②循环开始前判断是否能跳过循环
③每轮循环结束判断是否需要继续循环
2.通过loop指令实现循环
①选定一个寄存器为循环计数器
②每轮循环自动进行自减操作