汇编语言第4章 第一个程序
Posted 鱼竿钓鱼干
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了汇编语言第4章 第一个程序相关的知识,希望对你有一定的参考价值。
推荐文章:【汇编语言 王爽第三版】学习笔记目录+习题解析+实验
【汇编语言】第4章 第一个程序
本文分为4个部分:
- 书本知识点概览
知识点概览
4.1 一个源程序从写出到执行的过程
- 编写汇编源程序
- 对源程序进行编译链接,生成可执行文件(程序,数据,描述信息)
- 执行可执行文件中的程序。操作系统根据可执行文件中的描述信息,将可执行文件中的机器码和数据载入内存,并进行相关初始化
4.2 源程序
汇编语言源程序包含两种指令,汇编指令和伪指令,汇编指令对应机器码最终有CPU执行,伪指令由编译器执行
伪指令
- segment和ends定义一个段
- end,汇编程序的结束标记
- 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章 第一个程序的主要内容,如果未能解决你的问题,请参考以下文章