20192424王昭云
汇编语言学习知识点总结
1.2学习和使用汇编语言的目的
汇编语言有着运行高效的优点,除此,部分网络攻击是基于汇编语言的,比如:缓冲区溢出攻击。学习好汇编语言,我们可以使程序运行更加高效,对硬件地使用更合理。
1.3进位计数制及其转换
汇编是二进制机器语言的另一种表现形式,如果只看01会很麻烦,为了方便程序员,于是有了助记码,有了汇编语言。这时,二进制与十六进制之间的转换成为了人类与机器之间沟通的桥梁。除此,进制转换和计算在硬件与数字电路方面紧密相关。
1.4带符号数的表示
用“+”或“-”表示正负的数叫真值
用“0”或“1”表示正负的数叫机器数
原码表示
二进制数的最高位表示符号,0表示正,1表示负,数值部分用二进制数绝对值表示
注:8位二进制数原码的最大数为01111111(+127),最小数为11111111(-127)0的原码有两种表示形式:00000000和10000000(+0和-0)
1.5字符的表示
8位为一字节,在ASCII编码中最高位为校验位,7位表示一个字符。
中文常用的是GBK,UTF-8编码
1.6基本逻辑运算
一般常见这几种运算:
与:即加法
或:即二进制乘法
非:取反
异或:相同则为0,不同为1
2.1微机基本结构
一般计算机应包括五大部件:运算器、控制器、存储器、输入设备、输出设备。
中央处理器CPU:微型计算机中的中央处理器也叫微处理器,它包括运算器和控制器。
功能:分析从主存储器取来的各条指令的功能,控制计算机各部件完成指定功能的各项操作。
主存储器:主存储器是用来存放程序和数据的部件,它由若干个存储单元构成,存储单元的多少表示存储器的容量,每个存储单元用一个唯一的编号来标识,称为存储单元的地址,对每个存储单元内容的存和取是按照地址进行访问的。
大多数计算机中,存储器的组织都是以字节为基本单位,每一个基本单位称为一个存储单元。
系统总线:系统总线包括地址总线,数据总线和控制总线,将CPU,存储器和I/O设备连接起来,实现各大部件之间的各种信息传送。
2.2CPU寄存器结构及其用途
数据寄存器:数据寄存器主要用来保存操作数和运算结果等信息,从而节省读取操作数所需占用总线和访问存储器的时间。
变址寄存器:32位CPU有2个32位通用寄存器ESI和EDI。其低16位对应先前CPU中的SI和DI,对低16位数据的存取,不影响高16位的数据。
指针寄存器:32位CPU有2个32位通用寄存器EBP和ESP。其低16位对应先前CPU中的SBP和SP,对低16位数据的存取,不影响高16位的数据。寄存器EBP、ESP、BP和SP称为指针寄存器(Pointer Register),主要用于存放堆栈内存储单元的偏移量,用它们可实现多种存储器操作数的寻址方式,为以不同的地址形式访问存储单元提供方便。指针寄存器不可分割成8位寄存器。作为通用寄存器,也可存储算术逻辑运算的操作数和运算结果。
段寄存器:段寄存器是根据内存分段的管理模式而设置的。内存单元的物理地址由段寄存器的值和一个偏移量组合而成
的,这样可用两个较少位数的值组合成一个可访问较大物理空间的内存地址。
指令指针寄存器:32位CPU把指令指针扩展到32位,并记作EIP,EIP的低16位与先前CPU中的IP作用相同。指令指针EIP、IP(Instruction Pointer)是存放下次将要执行的指令在代码段的偏移量。在具有预取指令功能的系统中,下次要执行的指令通常已被预取到指令队列中,除非发生转移情况。所以,在理解它们的功能时,不考虑存在指令队列的情况。
2.3存储器组织结构
寄存器、Cache、主储存器以及辅助储存器。他们读取速度由高到低一次排列。
2.4堆栈及其操作方法
Init 创建一个空堆栈
Push 把数据压入堆栈顶端
Pop 从堆栈顶弹出数据
Top 从栈顶取数据
Empty 判断堆栈是否为空堆栈,是则返回true,否则返回false
Full 判断栈是否为满,是则返回true,否则返回false
3寻址方式与指令系统
寻址方式
由于需要考虑系统的向下兼容,所以现在的计算机一般采用段地址*16加上段内偏移地址计算出20位的物理地址,由于偏移地址长度最大为16位,所以段也有大小,一般为64kb。
寻址方法一般有:立即寻址、寄存器寻址、直接寻址、寄存器间接寻址、寄存器相对寻址、基址变址寻址等等。
指令系统
指令系统是计算机硬件的语言系统,也叫机器语言,指机器所具有的全部指令的集合,它是软件和硬件的主要界面,反映了计算机所拥有的基本功能。从系统结构的角度看,它是系统程序员看到的计算机的主要属性。因此指令系统表征了计算机的基本功能决定了机器所要求的能力,也决定了指令的格式和机器的结构。设计指令系统就是要选择计算机系统中的一些基本操作( 包括操作系统和高级语言中的) 应由硬件实现还是由软件实现,选择某些复杂操作是由一条专用的指令实现, 还是由一串基本指令实现, 然后具体确定指令系统的指令格式、类型、操作以及对操作数的访问方式。
汇编语言种类及其格式
指令语言的一般格式为:
标号:指令助记符 操作数; 注释
标号字段是可选字段,它后面必须有“:”。他是一条指令的符号地址,代表了该指令的第一个字节存放的地址。
标号一般放在程序或者子程序的入口。
指令助记符字段是一条指令的必选项,它表示这条语句要完成什么具体操作。
一条语句可以有一个、两个、无数个操作数。
以下为DOSbox中运行程序调试需要用到的指令:
R:查看CPU寄存器,改变数据寄存器的值
T:调试时单步运行
U:将机器语言翻译成汇编语言
学习心得
段地址乘以16后加上偏移地址便是物理地址。时候这种方法的原因是方便向下兼容以前的操作系统,这样可以用两个16位的寻址20位的存储空间。
CPU按照顺序运行程序,如果写病毒、木马,一定要把其物理地址放在杀毒软件前面,这样就可以在杀毒软件之前启动了,然后把杀毒软件弄没。
MOV指令不能修改CS/IP的值,需要使用转移指令,即JMP
代码段,用于存放代码,在8086中小于64kb
CPU只认CS:IP指认的内存单元为指令执行