1、一个汇编语言程序从写出到最终执行的简要过程:

编写--> 编译,链接 --> 执行

2、编译,链接

使用汇编语言编译程序(MASM.EXE)对源程序文件中的源程序进行编译,产生目标文件;

再用连接程序(LINK.EXE)对目标文件进行连接,生成可在操作系统中直接运行的可执行文件。

3、可执行文件

可执行文件中包含两部分内容:
程序(从原程序中的汇编指令翻译过来的机器码)和数据(源程序中定义的数据)
相关的描述信息(比如:程序有多大、要占多少内存空间等)

4、一个简单的源程序

assume cs:codesg

codesg segment

start:

MOV AX, 0123H

MOV BX, 0456H

ADD AX, BX,

ADD AX, AX

// 程序返回

MOV  AX, 4C00H

INT 21H

codesg ends

end start

5、指令

1)汇编指令有对应的机器码的指令,可以被编译为机器指令,最终为CPU所执行。

2)伪指令。没有对应的机器码的指令,最终不被CPU所执行。

伪指令是由编译器来执行的指令,编译器根据伪指令来进行相关的编译工作。

6、定义一个段

segment和ends是一对成对使用的伪指令,这是在写可被编译器编译的汇编程序时,必须要用到的一对伪指令。

segment和ends的功能是定义一个段,segment说明一个段开始,ends 说明一个段结束。

一个段必须有一个名称来标识,使用格式为:

段名 segment

段名 ends

7、End。

END是一个汇编程序的结束标记,编译器在编译汇编程序的过程中,如果碰到了伪指令 end,就结束对源程序的编译。

如果程序写完了,要在结尾处加上伪指令end 。否则,编译器在编译程序时,无法知道程序在何处结束。

8、程序返回
应该在程序的末尾添加返回的程序段。
    mov ax,4c00H
    int 21H
这两条指令所实现的功能就是程序返回。

9、编译和链接的作用

连接的作用有以下几个:
1)当源程序很大时,可以将它分为多个源程序文件来编译,

每个源程序编译成为目标文件后,再用连接程序将它们连接到一起,生成一个可执行文件;

2)程序中调用了某个库文件中的子程序,需要将这个库文件和该程序生成的目标文件连接到一起,生成一个可执行文件;
3)一个源程序编译后,得到了存有机器码的目标文件,

目标文件中的有些内容还不能直接用来生成可执行文件,连接程序将这此内容处理为最终的可执行信息。

所以,在只有一个源程序文件,而又不需要调用某个库中的子程序的情况下,也必须用连接程序对目标文件进行处理,生成可执行文件。

注意,对于连接的过程,可执行文件是我们要得到的最终结果。

10、程序的执行

程序最先以汇编指令的形式存在源程序中,经编译、连接后转变为机器码,存储在可执行文件中。

一个程序的执行必须由一个正在执行的程序对其进行调用。

在DOS中,可执行文件中的程序P1若要运行,必须有一个正在运行的程序P2 ,

将 P1 从可执行文件中加载入内存,将CPU的控制权交给它,P1才能得以运行;

当P1运行完毕后,应该将CPU的控制权交还给使它得以运行的程序P2。

汇编程序从写出到执行的过程

编程->1.asm->编译(masm) ->1.obj ->链接(link) ->加载->内存中的程序->CPU运行

11、程序执行过程的跟踪   debug 1.exe

程序加载后,ds中存放着程序所在内存区的段地址,这个内存区的偏移地址为 0 ,则程序所在的内存区的地址为:ds:0;

这个内存区的前256 个字节中存放的是PSP,dos用来和程序进行通信。

从 256字节处向后的空间存放的是程序。

所以,我们从ds中可以得到PSP的段地址SA,PSP的偏移地址为 0,则物理地址为SA×16+0。

因为PSP占256(100H)字节,所以程序的物理地址是:
   SA×16+0+256= SA×16+16×16=(SA+16)×16+0
可用段地址和偏移地址表示为:SA+10:0。

到了 int 21,我们要用P命令执行:

int 21 执行后,显示“Program terminated normally”,返回到Debug中。

表示程序正常结束。

注意,要使用P命令执行int 21。

个人总结: 这一章通过编写第一个源程序,认识源程序从编写到被执行的过程。

转载于:https://www.cnblogs.com/bbsno1/p/3263049.html

汇编语言学习——第四章 第一个汇编程序相关推荐

  1. STM32固件库(标准外设库)入门学习 第四章OLED屏幕使用

    STM32固件库(标准外设库)入门学习 第四章OLED屏幕使用 本学习教程,参考B站江科大自化协STM32视频,型号为STM32F103C8T6. 文章目录 STM32固件库(标准外设库)入门学习 第 ...

  2. 2022-3-1 王爽《汇编语言》第四章 实验

    一.调大窗口 原来的窗口太小了,快看瞎了,全屏又不好截图.下面是放大屏幕的方法. 在 dosbox 的配置文件中将 DOSBox 0.74-3 Options 当中的 改为: 参考文章:调整DOSBO ...

  3. 数学:确定性的丧失---第四章 第一场灾难:真理的丧失

    发信人: paradax (秀树*冬眠中...), 信区: Philosophy 标  题: 数学:确定性的丧失(5) 发信站: 北大未名站 (2002年10月23日22:34:43 星期三), 转信 ...

  4. 如何建立图像数据矩阵和图像显示灰度之间的关系!_放射技术考试第四章第一节 数字图像的特征...

    第四章第一节   数字图像的特征 一.模拟与数字 (一)模拟信号 在信息科学中,能够计数的离散量称为数字信号(整数),不能计数的连续量称为模拟信号. 模拟是以某种范畴的表达方式如实地反映另一种范畴.例 ...

  5. Vue 学习第四天--第一部分 --盲点整理与昨天知识回顾

    Vue   学习第四天--第一部分 1.父组件向子组件传值 v-bind:临时变量名="父组件变量名" v-bind:value="fathervalue" 子 ...

  6. 第四章 第一节:函数下

    Python基础入门(全套保姆级教程) 第四章 第一节:函数下 def wrapper(fn):def inner(*args, **kwargs);ret = fn(*args, **kwargs) ...

  7. 吴恩达深度学习第四课第一周 卷积神经网络

    文章目录 前言 一.计算机视觉(引言) 二.边缘检测示例(过滤器) 三.更多边缘检测内容(由亮到暗还是由暗到亮?) 四.Padding(Valid.Same.p) 五.卷积步长(s) 六.三维卷积(通 ...

  8. 【汇编语言学习之路】第一章 汇编语言核心方法论

    版权声明:本学习笔记是本人根据小甲鱼"汇编语言学习课程"和<汇编语言>(王爽)的书籍,来记录笔记的 1 汇编语言核心方法论 1.1 学习汇编语言的必要性 汇编语言与机器 ...

  9. 2021-9-28 数据结构学习 第四章 - 栈 和 队列【1024Re】

    新学期被作业淹没,将博客晾在这太久了,不禁心生惭愧,于是将今晚本来计划去深圳湾公园散步的时间用来写文章.我在想,要写什么呢,看着案上的数据结构,就决定是你了! 看名字是第四章,我是不是错过了什么,其实 ...

最新文章

  1. java英文字符串大小写转换 必须使用_【Java基础】之字符串大小写转换不利用API....
  2. 从源码编译InfluxDB
  3. nyoj 12(区间覆盖)
  4. 【UVA - 10038】Jolly Jumpers (模拟,水题,标记)
  5. redis——对项目的一些优化方案
  6. tensorflow独热编码方法_吴恩达课后作业学习2-week3-tensorflow learning-1-基本概念
  7. java list 获取索引_java – 获取arrayList中元素的索引
  8. 数据挖掘前景及工作方向选择
  9. php最新猜骰子精美ui源码,ThinkPHP全新UI猜猜乐H5游戏源码
  10. PyQt4安装使用以及pycharm环境配置
  11. 周杰伦 青花瓷 蒲公英的约定 我不配 彩虹 歌词和下载
  12. 计算机开关电源 原理与应用,开关电源原理与应用设计
  13. 怎样将linux系统打包成iso文件,封装linux系统成iso文件
  14. linux 合并多个pdf,Linux 下合并 PDF
  15. SylixOS命令行下内存操作/测试工具
  16. 小米NFC手机 手环 复制加密IC门禁卡
  17. 阿里曾文旌:Greenplum和Hadoop对比,架构解析及技术选型-CSDN公开课-专题视频课程...
  18. Python Flask 实现 HTML 文件压缩,9 级压缩
  19. Arduino烧录bootloader,并作为ISP进行下载程序
  20. HTC-VIVE如何实现瞬移和替换手柄模型

热门文章

  1. electron-关闭之前,弹出提示窗
  2. js原生实现点击事件只创建一个元素
  3. Matrix PKU 2155
  4. QSharedMemory共享内存实现进程间通讯(IPC)及禁止程序多开
  5. c# linq的差集,并集,交集,去重【转】
  6. UVALive4256 Salesmen
  7. 【2016.11.16】HTML学习笔记
  8. IOS 开发中 Whose view is not in the window hierarchy 错误的解决办法
  9. 如何创建基本的高级队列之一:创建发送方代码
  10. 请问这博客能有几种方便写法?