首页 > 编程语言 >【汇编语言】第4章 第一个程序

【汇编语言】第4章 第一个程序

时间:2022-11-25 19:33:31浏览次数:42  
标签:可执行文件 第一个 汇编语言 程序 地址 内存 debug 源程序



【汇编语言】第4章 第一个程序

本文分为4个部分:

  1. 书本知识点概览

文章目录

  • ​​【汇编语言】第4章 第一个程序​​
  • ​​知识点概览​​
  • ​​4.1 一个源程序从写出到执行的过程​​
  • ​​4.2 源程序​​
  • ​​4.3编译源程序~4.7 1.exe的执行​​
  • ​​4.8 谁将可执行文件中的程序装载进入内存并使它运行​​
  • ​​4.9 程序执行过程的跟踪​​

知识点概览

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

  1. 编写汇编源程序
  2. 对源程序进行编译链接,生成可执行文件(程序,数据,描述信息)
  3. 执行可执行文件中的程序。操作系统根据可执行文件中的描述信息,将可执行文件中的机器码和数据载入内存,并进行相关初始化

4.2 源程序

汇编语言源程序包含两种指令,汇编指令和伪指令,汇编指令对应机器码最终有CPU执行,伪指令由编译器执行

伪指令

  1. segment和ends定义一个段
  2. end,汇编程序的结束标记
  3. assume,假设某段寄存器和程序中某个segment……ends定义的段相关联

源程序中的程序

程序最先以汇编指令的形式存在源程序中,经过编译链接转变后变为机器码

【汇编语言】第4章 第一个程序_源程序


标号

一个标号指代了一个地址,比如codesg在segment前面,作为一个段的名称,这个段的名称最终被编译链接程序处理为一个段的地址

程序的结构
源程序是由一些段构成的,我们可以在段中存放代码,数据,或者把某个段作为栈空间

程序的返回
CPU的控制权交还给使得它得以运行的程序

mov ax,4c00H
int 21H

【汇编语言】第4章 第一个程序_汇编语言_02


语法错误和逻辑错误

语法错误:编译不通过了

逻辑错误:写得代码可以正确编译但是不符合想要的逻辑

4.3编译源程序~4.7 1.exe的执行

时代变迁啊,书上的玩意实在过于古老了,导致有些东西 win 10上都已经没有了,比如 dos 里的 edit 貌似是很古老的玩意了,网上和电脑上找了一圈也没找到,所以直接下了个 Masm for Windows 集成实验环境 2015

【汇编语言】第4章 第一个程序_可执行文件_03

【汇编语言】第4章 第一个程序_可执行文件_04


基本是可以完成书上的操作

【汇编语言】第4章 第一个程序_可执行文件_05

4.8 谁将可执行文件中的程序装载进入内存并使它运行

这节主要两个问题,一个是谁把程序载入内存,另外一个是程序运行后载入到哪里。

答案是 command,命令解释器

【汇编语言】第4章 第一个程序_汇编语言_06


观察执行过程可以发现

command 把程序载入到内存中

command 设置程序的入口

程序运行结束后又回到 cpu

command 把 CPU 控制权给程序,然后程序再把 CPU 的控制权还给 command

4.9 程序执行过程的跟踪

debug命令使用

主要是 debug 的应用,实际上具体命令我们都已经在 1~3 章里使用过了,区别是以前是 debug 里写命令,现在是对已经写好的汇编程序进行调试。

同样我们直接使用集成的实验环境进行debug

【汇编语言】第4章 第一个程序_源程序_07


R 检测程序入口,U 查看指令,T 执行

【汇编语言】第4章 第一个程序_源程序_08


一直使用 T 命令执行直到出现 INT 21此时程序应当结束了,我们使用 P 命令执行 INT 21出现 Program terminated normally 表示程序正常结束了。

【汇编语言】第4章 第一个程序_可执行文件_09


需要注意的是,DOS 中运行程序的时候是 command 把程序载入内存所以最后返回到 command ,这里是 debug 把程序载入内存,所以返回到 debug 中

最后使用 Q 命令退出debug程序程序加载过程

【汇编语言】第4章 第一个程序_源程序_10


程序加载后, DS 中存放了程序所在内存区的段地址,偏移地址为0.所以程序所在内存区的地址为 DS : 0

内存区的前256个字母存放的是 PSP ,DOS用来和程序通信

所以可以从 DS 中得到PSP的段地址 SA,PSP的偏移地址为 0 ,物理地址为 SA*16+0

程序的物理地址是:(SA+16)*16+0

可以用段地址和偏移地址表示为:SA+10H:0


标签:可执行文件,第一个,汇编语言,程序,地址,内存,debug,源程序
From: https://blog.51cto.com/u_15891800/5887552

相关文章