张狂的暑假学习之 汇编入门学习笔记 (三)—— 第一个程序
参阅:《汇编语言》 王爽 第四章
1.一个源程序从写到履行的进程
第一步:编写汇编源程序
第二步:对源程序进行编译衔接
第三步:在操作体系中履行
2.源程序
代码:
- assumecs:first
- firstsegment
- start:movax,2
- addax,ax
- addax,ax
- movax,4C00H
- int21H
- firstends
- endstart
代码解说:
assume 、segment、ends、end 等都是伪指令
end 表明 程序完毕。
segment与ends(留意与end的区别)成对呈现,表明一个段,segment前面的 first 表明段的姓名,标号,能够恣意取。一个程序至少有一个段。
assume 用来把寄存器跟段相关起来。
start:这个能够随意取姓名,但要与end 后边的相同。表明程序的进口。CS:IP 指向。
3.编译衔接
(在win7 64位,可能有问题,用DOSBox 模仿)
运用masm编译,link链接
把上面的代码保存到 1.asm中
编译:在cmd中输入 masm 1.asm; 生成 1.obj
链接:在cmd中输入 link 1.obj; 生成 1.exe
4.程序的运转
在cmd中输入1 ,运转不会有任何输出,一闪而过
程序的运转进程:首要必须有一个正在运转的P1程序,即将运转的P2程序从可履行文件中加载进入内存后将CPU控制权交给P2,P2才干运转。P2开端运转后P1暂停运转。当P2运转完毕后,将CPU的控制权交给P1,尔后P1持续运转。DOS中运转1.exe P1能够是command,将1.exe加载如内存。command设置CPU的CS:IP z指向程序的第一条指令(即程序的进口),然后使其运转。程序运转完毕后,回来command,CPU持续运转command。
前面代码中的:mov ax,4C00H
int 21H
功用便是程序回来
int 跟c英语中的int没有任何关系,表明中止。
5.程序履行进程的盯梢
在cmd中输入:debug 1.exe 即可盯梢运转1.exe
这时输入r检查寄存器信息,能够看到CX寄存源程序中指令的长度。
DS跟CS相差0010H,原因:
程序在运转前,DOS体系先找到一个XX:0000H地址,在这段内存区的前256个这个中 创立一个程序段前缀(PSP)的数据区,DOS要使用PSP来和被加载的程序进行通讯。从XX:0010H开端将程序装入。
输入t 单步履行,到int 21H时,输入p完毕。