第4章 第一个程序

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

第一步:编写汇编源程序
第二步:对源程序进行编译链接
使用汇编语言编译程序对源程序文件中的源程序进行编译,产生目标文件;再用链接程序对目标文件进行链接,生成可在操作系统中直接运行的可执行文件。
可执行文件包含两部分内容
1)程序(从源程序中的汇编指令翻译过来的机器码)和数据(源程序定义的数据)
2)相关的的描述信息(比如,程序多大、占多少内存空间等)

第三步:执行可执行文件中的程序
操作系统依照可执行文件的描述信息,将可执行文件中的机器码和数据载入内存,开始相关初始化,然后由CPU执行

源程序

汇编语言写的源程序,包括伪指令和汇编指令,其中伪指令由编译器来处理,而程序是指源程序中由计算机执行、处理的指令或数据
伪指令:
1>segment 和 ends成对使用,功能是定义一个段,segment 说明一个段开始,ends 说明一个段结束
格式: 段名 segment
.
段名 ends
2>end是一个汇编程序的结束标志,编译器碰到它就结束编译,注意区分ends
3>assume 含义为假设。它假设某一段寄存器和程序中的某一个用segment...ends定义的段相关联。
比如code segment ... code ends就定义了一个名为code的段
在程序开头,用assume cs:code 将用作代码段的段code和CPU中的段寄存器cs 联系起来

DOS(一个单任务操作系统)

一个程序p2在可执行文件中,则必须有一个正在运行的程序p1,将p2从可执行文件中加载入内存,将CPU的控制权交给p2,p2才能运行。p2开始运行后,p1暂停运行
而当p2运行完,CPU控制权应交还给p1
这个过程叫做:程序返回
任何通用的操作系统,都要提供一个称为shell(外壳)的程序,用户使用这个程序来操作计算机系统进行工作
DOS启动时,先完成其他重要初始化工作,然后运行command.com,command.com运行后,执行完其他的相关任务后,在屏幕上显示出由当前盘符和当前路径组成的提示符
比如C:
用户输入的指令 cd dir 等由command执行
执行一个程序,command 首先根据文件名找到可执行文件,然后将可执行文件加载入内存,设置CS:IP指向程序的入口。此后,command 暂停运行,CPU运行程序。程序运行结束后,返回到command中,command 再次显示由当前盘符和当前路径组成的提示符,等待用户输入

在DEBUG中,command将debug加载入内存,而debug将程序加载入内存,所以程序结束后返回到debug中,Q可以返回到command
mov ax,4c00h
int 21h
这两条指令所实现的就是程序返回,在程序末尾使用

edit

编辑程序

masm

汇编编译器,接收默认文件扩展名为 .asm,如果不是就要将文件扩展名写出
输入源程序文件名要指明路径,除非它就在当前路径下
masm 1t.asm / masm 1t
简化过程,最后加上 ; 忽略中间文件的生成

链接器,接收默认文件扩展名 .obj,如果不是就要将文件扩展名写出
对编译生成的目标文件进行链接,从而得到可执行程序。
输入目标文件名要指明路径,除非它就在当前路径下
link 1t.obj / link 1t
简化过程,最后加 ; 忽略中间文件的生成
学习汇编主要目的,通过用汇编语言进行编程而深入地理解计算机底层的基本工作机理,达到可以随心所欲控制计算机的目的。汇编语言编程用到的工具在操作系统是运行,暂时不做过多探究
image

Debug

数据在Debug中默认所有数据用十六进制表示
遇到int 21h时要用P命令执行
载入.EXE
DOS系统中.EXE文件中程序加载,cx 中存放了程序的长度
.exe装入内存后,程序被装入内存的什么地方?
image

posted @ 2022-01-21 17:46  摸鱼的Beck  阅读(83)  评论(0)    收藏  举报