第四章 第一个程序
4.1 一个源程序从写出到执行的过程
1.编写汇编语言(用编辑器进行汇编语言的编写)
2.对源程序进行编译连接(对源程序进行编译,产生目标文件;再连接程序对目标文件进行连接,生产可执行文件)
3.执行可执行文件中的程序(执行文件需要将机器码和数据载入内存,然后CPU执行)
4.2 源程序
例如源程序:assume cs:codesg
codesg segment
mov ax,0123H
mov bx,0456H
add ax,bx
add ax,ax
mov ax,4c00H
int 21H
codesg ends
end
1.伪指令
汇编语言中的两种指令:伪指令,汇编指令。汇编指令有对应的机器码,伪指令没有对应机器码不被CPU执行而被编译器执行。
A.××× segment·····×××ends是成对出现的伪指令,用来定义一个代码段。
B.end(不是ends)是一个汇编程序结束的标志。
C.assume(假设)功能:将指定用途的段和相关的段寄存器关联起来。比如上面的代码将cs和定义的代码段codesg联系起来。
2.源程序中的“程序”
这里的源程序指最终由计算机执行、处理的指令或数据(最后的二进制机器码)。
3.标号
标号例如上面的codesg就想名称一样。
4.程序的结构
1首先是定义段 abc segment ·····abc ends,2在里面写汇编指令把·····换成汇编指令,3指出何处结束end,4用assume将段寄存器与abc联系起来。
5程序的返回
举例:一个p2程序要执行必须有一个正在执行的p1程序把p2加载入内存后,才能将CPU交给p2,p2随之运行,p2结束后返回控制权给p1这个返回过程就是:程序返回 最上面的例子中的mov ax,4c00H int 21H这两条指令实现的功能就是程序返回。
6.语法错误和逻辑错误
语法错误就是编译器发现的错误,运行的结果与预期的不同就是逻辑错误。
4.3 编辑源程序
这里开始就是动手实操了,我用的win10环境,看了很多博客在win10编写汇编语言都是用DOSBOX和MASM挂两篇博客汇编 之 win10 下安装dosbox 和 MASM和Win10(64位)安装汇编环境(MASM) 按照两篇博客装教程很快可以入手实操! 注意:我按照两篇博客内容整下来在编译 连接时没问题但是不能运行.exe文件应该时不兼容问题,无赖只好又找到一款好用的工具代替用VSCode风格的编辑器写MASM汇编语言注意注意注意:(重要的说三篇还是去用DOSBOX和MASM了解熟悉编译连接这个过程在用这个集成环境)
我用的notepad++编辑如图
4.4 编译
4.5连接
4.6 以简化的方式进行编译和连接
4.7 运行
上面4步在大佬博客里都有。
4.8 谁将可执行文件中的程序装载进入内存并使用它运行?
问题4.1:执行1.exe时是windows的cmd将1.exe加载到内存
问题4.2:运行完后返回到cmd继续执行cmd
4.9 程序执行过程的跟踪
用大佬给的MASMACAU debug打开(那个小黄鸭)
程序在装入内存时会先装入psp,DOS用来和程序进行通讯。256字节即10H
程序执行到 int 21 时需要在debug中用p命令
实验3
编写程序直接debug运行即可。