当前位置:网站首页>王爽汇编语言第四章:第一个程序
王爽汇编语言第四章:第一个程序
2022-08-04 08:17:00 【Deteriorate_Kr】
文章目录
前言
现在我们将开始编写完整的汇编语言程序,用编译器将它们编译成为可执行文件(如:*.exe文件),在操作系统中运行。
这一章,我们将编写第一个这样的程序。
一、一个源程序从写出到执行的过程
一个汇编语言程序从写出到最终执行的简要过程:
编写--〉编译--〉连接--〉执行
第一步:编写汇编源程序
使用文本编辑器(如Edit、记事本等),用汇编语言编写汇编源程序。这一步工作的结果是产生了一个存储源程序的文本文件。
第二步:对源程序进行编译连接
这一步工作的结果:产生了一个可在操作系统中运行的可执行文件。
第三步:执行可执行文件中的程序
二、源程序
下面就是一段简单的汇编语言源程序
1.伪指令
上图中出现了3种伪指令
(1) XXX segment →XXX end
(2) end
(3)assume,假设某一段寄存器与程序中的某一段相关联
2.源程序中的程序
3.标号
4.程序的结构
5.程序返回
6. 语法错误和逻辑错误
三、编辑源程序
(2)
(3) 将程序保存为 c:\1.asm后,退出edit,结束对源程序的编辑
文件保存在我们的挂载目录下。
四、编译,得到.obj文件
我直接挂载在了MASM目录下,直接执行MASM.exe
我的1.asm文件也在MASM目录下
(5) 忽略了交叉引用文件的生成后,屏幕显示如下图
五、连接,得到.exe文件
自己电脑上的如下图
番外
连接的作用
六、以简化的方式进行编译和连接,忽略中间文件
在link后面加上被连接的目标文件的路径、文件名,在命令行结尾再加上分号,按Enter键后,连接程序就对当前路径下的1.obj进行处理,在当前路径下生成可执行文件1.exe,并在过程中自动忽略中间文件的生成。
七、 1.exe的执行
八、谁将可执行文件中的程序装载进入内存并使它运行?
问题4.1
问题分析4.2
操作系统的外壳
问题4.1和4.2的分析
小结
九、程序执行过程的跟踪
(阴影部分是已经被使用的内存)
注意:有一步称为重定位的工作我们在上面没有讲解,因为这个问题和操作系统的关系较大,我们不作讨论。
总结
边栏推荐
- LeetCode 135. 分发糖果
- LeetCode 97. 交错字符串
- MySQL 8.0.29 详细安装(windows zip版)
- 经典动态规划问题的递归实现方法——LeetCode39 组合总和
- int *p = &a、p = &a、*p = a的正确理解
- 金仓数据库的单节点如何转集群?
- inject() can only be used inside setup() or functional components.
- leetcode 22.8.1 二进制加法
- 解决报错: YarnScheduler: Initial job has not accepted any resources
- 【剑指Offer】二分法例题
猜你喜欢
inject() can only be used inside setup() or functional components.
智能健身动作识别:PP-TinyPose打造AI虚拟健身教练!
「PHP基础知识」转换数据类型
字符流与字节流的区别
Secondary network security competition C module MS17-010 batch scanning
一天搞定JDBC02:开启事务
[NOI Simulation Competition] Paper Tiger Game (Game Theory SG Function, Long Chain Division)
Recommend several methods that can directly translate PDF English documents
解决:Hbuilder工具点击发行打包,一直报尚未完成社区身份验证,请点击链接xxxxx,项目xxx发布H5失败的错误。
智汇华云 | 华云软件定义网络 DCI介绍
随机推荐
The school to apply for link
unity2D横版游戏教程7-敌人AI死亡效果
【论文笔记】Dynamic Convolution: Attention over Convolution Kernels
字符流与字节流的区别
秒懂大模型 | 3步搞定AI写摘要
怎么写专利更容易通过?
dalle:zero-shot text-to-image generation
Cross-species regulatory sequence activity prediction
阿里云的数据库系统怎么升级更新的www.zgysffm.com怎么加快访问速度?
inject() can only be used inside setup() or functional components.
金仓数据库的单节点如何转集群?
高等代数_证明_幂等矩阵一定能够相似对角化
redis stream 实现消息队列
小程序如何使用订阅消息(PHP代码+小程序js代码)
研究性学习专题 3_LL(1)语法分析设计原理与实现
为什么手动启动GBase 8c数据库中GTM节点,起不来。显示“Run cmd failed:scp: /tmp/gtm_gtm1.server: Permission denied”
经典二分法查找的进阶题目——LeetCode33 搜索旋转排序数组
在GBase 8c数据库后台,使用什么样的命令来对gtm、dn节点进行主备切换的操作?
【论文笔记】Delving into the Estimation Shift of Batch Normalization in a Network
智能健身动作识别:PP-TinyPose打造AI虚拟健身教练!