汇编程序--要术及编译过程
2015-06-14 17:55
155 查看
汇编源程序结构
汇编指令:有对应的机器码的指令,可以被编译为机器指令,最终为CPU所执行。
伪指令:由编译器来执行的指令,没有对应的机器码;编译器根据伪指令来进行相关的编译工作。
段:一个汇编程序是由多个段组成的。分别用来存放代码、数据或当作栈空间来使用。
说明:一个有意义的汇编源程序至少要包含一个段,用来存放汇编指令代码。
汇编程序设计的具体过程
编辑、编译、连接、执行
编译过程:
进入DOS,运行编译程序masm.exe
输入要编译的源文件名
确定目标文件名称(.obj)
产生列表文件(.lst)
产生交叉引用文件(.crf)
编译结束,输出编译结果。
连接的作用
将多个源程序的目标文件连接;
程序调用了某个库文件中的子程序,将库文件和目标文件连接;
编译生成的目标文件中,有些内容还不能直接用来生成可执行文件,需要通过连接处理为最终的可执行信息。
说明:Command.com是 DOS 的命令解释器程序,也就是DOS系统的shell;用Debug跟踪程序运行时,装入操作由Debug执行。
注意:DOS是单任务系统。
程序的加载过程:
磁盘访问.exe程序;
找到一段容量足够的空闲内存区,该内存区的起始地址的偏移地址为0;
在这段内存区的前256个字节创建程序段的前缀PSP;
从内存区的256字节处开始装入程序;
将该内存区的段地址存入DS,初始化其他相关寄存器,设置CS:IP指向程序入口。
程序执行过程中Dubug跟踪:
Debug 可以将程序加载入内存,设置CS:IP指向程序的入口,但Debug并不放弃对CPU 的控制,这样,我们就可以使用Debug 的相关命令来单步执行程序 ,查看每条指令指令的执行结果。
相关命令:
debug myfile:加载程序
r:查看寄存器设置
u:查看指令序列
t:单步执行
p:执行一组指令
说明:Debug加载程序后,CX存放程序长度,DS与ES、CS与SS值相同,IP=0000H。
废话: 这一部分牵扯到一部分操作系统和编译原理的知识, 然而书中并没有进行讲解, 草滩小恪也并不会(但是不久后就一定会会的)。 个人感觉学汇编能使我对C/C++更深入的了解, 并且能更容易学会微机原理, 编译原理, 操作系统等相关的知识。
汇编指令:有对应的机器码的指令,可以被编译为机器指令,最终为CPU所执行。
伪指令:由编译器来执行的指令,没有对应的机器码;编译器根据伪指令来进行相关的编译工作。
段:一个汇编程序是由多个段组成的。分别用来存放代码、数据或当作栈空间来使用。
说明:一个有意义的汇编源程序至少要包含一个段,用来存放汇编指令代码。
汇编程序设计的具体过程
编辑、编译、连接、执行
编译过程:
进入DOS,运行编译程序masm.exe
输入要编译的源文件名
确定目标文件名称(.obj)
产生列表文件(.lst)
产生交叉引用文件(.crf)
编译结束,输出编译结果。
连接的作用
将多个源程序的目标文件连接;
程序调用了某个库文件中的子程序,将库文件和目标文件连接;
编译生成的目标文件中,有些内容还不能直接用来生成可执行文件,需要通过连接处理为最终的可执行信息。
说明:Command.com是 DOS 的命令解释器程序,也就是DOS系统的shell;用Debug跟踪程序运行时,装入操作由Debug执行。
注意:DOS是单任务系统。
程序的加载过程:
磁盘访问.exe程序;
找到一段容量足够的空闲内存区,该内存区的起始地址的偏移地址为0;
在这段内存区的前256个字节创建程序段的前缀PSP;
从内存区的256字节处开始装入程序;
将该内存区的段地址存入DS,初始化其他相关寄存器,设置CS:IP指向程序入口。
程序执行过程中Dubug跟踪:
Debug 可以将程序加载入内存,设置CS:IP指向程序的入口,但Debug并不放弃对CPU 的控制,这样,我们就可以使用Debug 的相关命令来单步执行程序 ,查看每条指令指令的执行结果。
相关命令:
debug myfile:加载程序
r:查看寄存器设置
u:查看指令序列
t:单步执行
p:执行一组指令
说明:Debug加载程序后,CX存放程序长度,DS与ES、CS与SS值相同,IP=0000H。
废话: 这一部分牵扯到一部分操作系统和编译原理的知识, 然而书中并没有进行讲解, 草滩小恪也并不会(但是不久后就一定会会的)。 个人感觉学汇编能使我对C/C++更深入的了解, 并且能更容易学会微机原理, 编译原理, 操作系统等相关的知识。
相关文章推荐
- python学习 持续更新
- C++对象模型之简述C++对象的内存布局
- python中if __name__ == '__main__': 的解析
- [LeetCode] Invert Binary Tree
- C++二插树和值与子树求解
- C/C++的学习 持续更新
- C语言文件处理-对图片取模数据的转换
- 重踏学习Java路上_Day03(java 基础上,运算符,IF等)
- C++ 静态成员函数调用非静态成员函数方法
- C++打印位数为n的所有数
- awk编程总结
- Java多线程中的阻塞队列和并发集合
- VC++ 自定义控件的建立及使用方法
- Asp.net MVC23 使用Areas功能的常见错误
- block 实现原理和相关内存管理详解
- 分类之数据集导入matlab方法
- Ubuntu 13.10 用sogou拼音输入法替换ibus
- (C++)C++类继承中的构造函数和析构函数
- struts2 开发中,一些功能需要在struts.xml中的配置
- Java多线程生命周期