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

Posted 鱼竿钓鱼干

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了汇编语言第4章 第一个程序相关的知识,希望对你有一定的参考价值。

推荐文章:【汇编语言 王爽第三版】学习笔记目录+习题解析+实验

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

本文分为4个部分:

  1. 书本知识点概览

知识点概览

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

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

4.2 源程序

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

伪指令

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

源程序中的程序
程序最先以汇编指令的形式存在源程序中,经过编译链接转变后变为机器码
在这里插入图片描述
标号
一个标号指代了一个地址,比如codesg在segment前面,作为一个段的名称,这个段的名称最终被编译链接程序处理为一个段的地址

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

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

mov ax,4c00H
int 21H

在这里插入图片描述
语法错误和逻辑错误
语法错误:编译不通过了
逻辑错误:写得代码可以正确编译但是不符合想要的逻辑

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

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

在这里插入图片描述
基本是可以完成书上的操作
在这里插入图片描述

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

这节主要两个问题,一个是谁把程序载入内存,另外一个是程序运行后载入到哪里。
答案是 command,命令解释器
在这里插入图片描述
观察执行过程可以发现
command 把程序载入到内存中
command 设置程序的入口
程序运行结束后又回到 cpu

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

4.9 程序执行过程的跟踪

debug命令使用

主要是 debug 的应用,实际上具体命令我们都已经在 1~3 章里使用过了,区别是以前是 debug 里写命令,现在是对已经写好的汇编程序进行调试。
同样我们直接使用集成的实验环境进行debug
在这里插入图片描述
R 检测程序入口,U 查看指令,T 执行
在这里插入图片描述
一直使用 T 命令执行直到出现 INT 21此时程序应当结束了,我们使用 P 命令执行 INT 21出现 Program terminated normally 表示程序正常结束了。

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

程序加载过程
在这里插入图片描述
程序加载后, DS 中存放了程序所在内存区的段地址,偏移地址为0.所以程序所在内存区的地址为 DS : 0

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

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

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

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

以上是关于汇编语言第4章 第一个程序的主要内容,如果未能解决你的问题,请参考以下文章

由浅入深学C语言基础(进阶与必做430题)

汇编实验第六到八章总结

《SystemVerilog验证-测试平台编写指南》学习 - 第3章 过程语句和子程序

04747_Java语言程序设计_第4章_数组和字符串

奇偶个数 翁恺老师C语言程序设计CAP第4章编程题

第4章 x86反汇编速成班