汇编简介
单元前问题
-
本地代码的指令中,表示其功能的英文缩写称为什么
助记符 -
汇编语言文件的拓展名,通常是什么格式
.asm -
汇编语言程序中的段定义指的是什么
构成程序的命令和数据的集合组
汇编语言和本地代码是一一对应的
由来
- 通过调查本地代码的内容,可以了解程序最终是以何种形式来运行的,但是,直接看本地代码看不懂,于是人们就使用助记符来帮助理解,使用助记符的编程语言成为汇编语言
名词
- 汇编语言编写的源代码,最终也必须要转换成本地代码才能运行,负责转换工作的程序称为汇编器
- 用汇编语言编写的源代码,和本地代码是一一对应的。因此,本地代码也可以反过来转换成汇编语言的源代码,持有该功能的逆变换程序称为反汇编程序,逆变换这一处理本身称为反汇编
汇编程序讲解
源代码


汇编代码
注:彩色部分是转换成注释的C语言源代码



伪指令
解释:
- 汇编语言的源代码,是由转换成本地代码的指令(操作码)和针对汇编器的伪指令构成的。
- 伪指令:负责把程序的构造及汇编的方法知识给汇编器,不过伪指令本身是无法汇编转换成本地代码的


说明
- segment 和ends围起来的部分,称为段定义,段定义即命令和数据等程序的集合体的意思。
- group:表示的是吧_BSS和_DATA着两个段定义汇总为名为DGROUP的组



汇编语言的语法是操作码+操作数
操作码


寄存器是CPU的存储区域,不过,寄存器并不仅仅具有存储指令和数据的功能,也有运算功能

mov
dword ptr(double word pointer)表示的是从指定内存地址读出4字节的数据
push pop
对栈进行读写的内存地址是由esp寄存器进行管理,push 和pop后,esp寄存器的值会自动更新
函数调用

call指令运行后,call指令的下一行的内存地址会自动push入栈
该值会在函数最后调用ret指令pop出栈

最优化功能

函数内部

- ebp寄存器在(1)中入栈在(5)中出栈,主要是为了把函数中用到的ebp寄存器的内容,恢复到函数调用前的状态
- (2)中esp赋值给ebp,是因为,nov不允许指定esp寄存器
- (3)读取参数123,eax是负责运算的累加寄存器
- 函数的返回值必须通过eax寄存器返回
- 函数的参数是通过栈来传递,返回值时通过寄存器来返回的
- 栈的最高位的数据地址,一直存储在esp寄存器中
- (6)执行,函数返回目的地的内存地址会自动出栈
整个过程栈变化


全局变量 局部变量







局部变量只是在函数处理运行器件临时存储在寄存器和栈上。函数中的局部变量所需要的内存领域,会被尽可能地分配在寄存器中,(8)就相当于给5个局部变量c1-c5分布赋予数值1-5。寄存器不够时,局部变量就会申请分配栈的内存空间。(9)中给c6-c10分配栈空间。

循环处理的实现方法
第一行异或结果永远是0
条件分支的实现方法


了解程序运行方式的必要性




硬件的控制方法
端口
- I/O控制器中有用于临时保存输入输出数据的内存,这个内存就是端口。I/O控制器内部的内存,也称为寄存器
- 一个I/O控制器既可以控制一个外围设备,也可以控制多个外围设备。各端口之间通过端口号进行区分。端口号也称为I/O地址。
- IN指令和OUT指令在端口号指定的端口和CPU之间进行数据的输入输出
- 通过指定端口号,并利用IN/OUT命令,就可以直接控制软驱这硬件设备,实现输入输出处理
I/O端口号 IRQ DMA通道
- 是识别外围设备的三点组合。计算机主机通过软件控制硬件时所需要的信息的最低限,是外围设备的I/O端口号。IRQ只对需要中断处理的外围设备来说是必需的。DMA通道只对需要DMA机制的外围设备来说是必需的
文字及图片显示机制
- 显示器中显示的信息一直存储在某内存中,该内存称为VRAM(Video RAM),在程序中,只要往VRAM中写入数据,该数据就会在显示器中显示出来。

让计算机思考
举了一个猜拳的程序
刚开始,使用随机数出拳
后面通过算对方出拳情况的概率,来出拳
到后面加入人类的思考方式,即人类是有类似与节奏短语样子的出拳,这样程序就有了自己的出拳节奏

被折叠的 条评论
为什么被折叠?



