【汇编】第一个程序——源程序从写出到执行的过程(重要)、源程序的编译连接、汇编指令与伪指令的关系和区别、segment ends 定义一个段、assume 寄存器与段关联、codesg标号

前言

在这里插入图片描述

4.1 一个源程序从写出到执行的过程

在这里插入图片描述

4.2 对源程序进行编译连接

使用编译程序MASM.exe对源程序文件中的源程序进行编译,产生目标文件,即.obj文件
再用连接程序LINK.exe对目标文件进行连接,生成可以在操作系统中直接运行的可执行文件,即.exe文件

源程序:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

可执行文件

可执行文件中包含两部分:
程序:源程序汇编指令翻译的机器码。
数据:源程序中定义的数据。
相关的描述信息:程序大小,内存空间等。

在这里插入图片描述

汇编指令

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

伪指令

  • 没有对应机器码的指令,最终不被CPU所执行。由编译器来执行。

segment ends 定义一个段

segment,ends,这两个成对使用的伪指令。
segment:定义一个段开始。
ends:定义一个段结束。

一个段必须有一个名称来标识:

  • 段名 segment
  • 段名 ends

一个汇编程序是由多个段组成的,这些段用来存放代码、数据或栈空间来使用。至少有一个段来存放代码。

  • end是一个汇编程序的结束标记,代表着源程序的结束编译,不可或缺一定要加在结尾。

不要搞混ends和end。

assume 寄存器与段关联

  • assume:假设一段寄存器和程序中某一个用segment——ends定义的段相关联

汇编源程序:

  • 伪指令(编译器处理)
  • 汇编指令(编译为机器码)
    程序:源程序中最终由计算机执行、处理的指令或数据。

案例:

这其中所有代码合称为源程序。
在这里插入图片描述
在这里插入图片描述
程序经编译连接后变成机器码。
在这里插入图片描述

codesg 标号

一个标号指代一个地址。

  • codesg:放在segment之前,作为一个段的名称,最终被处理为一个段的段地址。

在这里插入图片描述

在这里插入图片描述

4.3 程序返回、段结束、程序结束、段返回

  • 程序返回:DOS为单任务操作系统一个程序p2作为可执行文件,必须有一个正在运行的程序p1,将p2从可执行文件中加载进内存后,p1将CPU控制权交给P2,p2开始运行,p1暂停运行p2运行完后,把控制权交回p1.。这整个过程称为程序返回.
  • mov ax,4c00H
  • int 21H
    这两条指令所实现的功能就是程序返回。

在这里插入图片描述

4.4 1.exe的执行

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

问题

在这里插入图片描述
在这里插入图片描述
1)***DOS中有一个command,即CMD称为命令解释器,也就是DOS的shell。***是CMDshell将1.exe加载进内存。
2)CMD设置CPU的CS:IP执行程序的第一条指令,从而运行程序。
3)程序运行结束后,返回到CMD中,CPU继续运行CMD。

从编程到CPU运行的过程(重要)

在这里插入图片描述

在这里插入图片描述
程序真正开始在SA+10H:0,因为这一段地址需要给PSP数据区。
从CS:0100H开始是程序真正开始。即DS和CS之间相差10。

在这里插入图片描述

总结

程序加载后,DS中放着程序所在内存区的段地址,这个内存区的偏移地址为0。
程序所在内存区的地址为:DS:0。
内存区的前256字节存放PSP数据区,DOS用来和程序进行通信。
256字节后的空间存放的是程序。
故PSP段地址为SA,PSP偏移地址为0,物理地址即为SA*16+0
因PSP占256字节,所以程序的物理地址为:SA*16+0+256
用段地址和偏移地址表示为:SA+10:0

4.5 程序执行过程的跟踪

最后程序返回的命令不能用t执行,需要用P执行
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

webfker from 0 to 1

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值