1.在汇编语言程序当中,包含两种指令,一种是汇编指令,一种是伪指令,汇编指令是有对应的机器码的指令,最终为CPU所执行,而伪指令没有对应的机器指令,最终不能被CPU所执行,它是由编译器来执行.
2.segment ends是一对成对使用的伪指令,segment和ends的功能是定义一个段,segment说明一个段的开始,ends说明一个段的结束.
3.一个汇编程序是由多个段组成,这些段用来存放代码,数据或是当做栈来使用.
4.一个有意义的汇编程序中至少有一个段,这个段用来存放代码
5.end:是一个汇编程序的结束标记,伪指令,编译器遇到end就结束对程序的编译,
上面的ends可以看成"end segment",end的作用是标记整个程序的结束
6.assume:伪指令,含义是"假设",它假设某一段寄存器和程序中的某一个用segment...ends定义的段相关联,assume是将特定用途的段和相关的寄存器关联起来.
7.标号:代表了一个地址.
8.一个程序结束后,将CPU的控制权交还给使它得以运行的程序,这个过程即:程序返回.
9.mov ax,4c00H
int 21H 这两条指令就可以实现程序返回
10.小结: ends:通知编译器一个段结束
end:通知编译器程序结束
mov ax 4c00H int 21H:表示程序返回
11.连接的作用: ①.当源程序很大时,可以将它分为多个源程序文件来编译,每个源程序编译为目标文件,再用连接程序将它们连接到一起,生成一个可执行文件
②.程序中调用了某个库文件中的子程序,需要将这个库文件和该程序生成的目标文件连接在一起,生成一个可执行文件
③.一个源程序编译后,得到了存有机器码的目标文件,目标文件中的有些内容还不能直接生成可执行文件,连接程序将这些内容处理为最终的可执行信息,所以,在只有一个源程序文件,而又不需要调用某个库中的子程序的情况下,也必须用连接程序对目标文件进行处理,生成可执行文件.
12.汇编程序从写出到执行的过程:
edit(编程)→1.asm→masm(编译)→1.obj→link(连接)→1.exe→command(加载)→内存中的程序→CPU(运行)
13.描述一个内存单元,需要两个信息:①.内存单元的地址;②.内存单元的长度.
14.[0]表示一个内存单元时,0表示单元的偏移地址,段地址默认在ds中,单元的长度(类型)可以由具体指令中的其他操作对象(比如寄存器)指出.
15.loop是循环指令,[idata]表示常量.
16.inc bx:表示bx中的内容加1.
17.mov ax,[bx]:bx中存放的数据作为一个偏移地址EA,段地址SA默认在ds中,将SA:EA处的数据送入ax中,即(ax)=((ds)*16+(bx)).
18.loop指令:loop标号,CPU执行loop指令的时候,要进行两边操作:①.(cx)=(cx)-1;②.判断cx中的值,,不为零则转至标号处执行程序,如果为零则向下继续执行
19.标号代表一个地址
20.loop s,CPU执行的操作:①.(cx)=(cx)-1②.判断cs中的值,不为0则转至标号s所标识的地址处执行,如果为零则执行下一条指令
21.loop指令的三个要点:①.在cx中存放循环次数②.loop指令中的标号所标识地址要在前面③.要循环执行的程序段,要写在标号和loop指令的中间
22.大于9FFFH(40959)的十六进制数据,在书写的时候都是以字母开头的,而在汇编源程序中,数据不能以字母开头,所以要在前面加上0。
23.8位数据不能直接加到16位当中的寄存器,即((dx)=(dx)+内存中8位数据)是错误的.
24.通过改变[bx]中的bx的值,就可以改变访问的内存单元.
25.短前缀:用于显示地指明内存单元的段地址的DS,CS, SS,ES,在汇编语言中称为段前缀.
26.在不能确定一段内存空间中是否存放着重要的数据或代码的时候,不能随意向其中写入内容
27.在一般的PC机,DOS方式下,DOS和其他合法的程序一般都不会使用0:200~0:2ff的256个字节的空间.(512~767)
28.我们是不能随便决定哪段空间可以使用的,应该让系统来为我们分配.我们可以在程序中,定义我们希望处理的数据,这些数据就会被编译,连接程序作为程序的一部分写到可执行文件中,当可执行文件中的程序被加载到内存时,这些数据也同时加载入内存中,与此同时,我们要处理的数据也自然而然地获得了存储空间.
29.dw→define word→定义字型数据.
30.end作用,end除了通知编译器程序结束外,还可以通知编译器程序的入口在什么地方.
31.可执行文件的执行过程如下:
①.由其他程序将可执行文件中的程序加载入内存
②.设置CS:IP指向的第一条要执行的指令,从而使程序得以运行
③.程序运行结束后,返回到加载者
32.可执行文件由描述信息和程序组成,程序来自源程序中的汇编指令和定义的数据,描述信息则主要是编译,连接程序对源程序中相关伪指令进行处理所得到的信息.
关键:CPU从何处执行程序,只要在源程序中用"end标号" 指明就可以指明就可以.
33.定义不同的段: 例如: data segment data ends
stack segment stack segment
code segment code segment
34.在程序中,段名就表示相当于一个标号,它代表了段地址,所以"mov ax,data"的含义就是将名称为"data"的段的段地址送入ax.一个段中的数据的段地址可由段名代表,偏移地址就要看它在段中的位置了,偏移地址就要看它在段中的位置了.
35.8086CPU不允许将一个数据直接送入寄存器当中
36.段空间是当做栈空间还是数据空间,栈空间是取决于程序中具体的汇编指令,和汇编指令对CS:IP,SS:SP,DS等寄存器的设置来决定的.
汇编学习 NO3
最新推荐文章于 2024-08-20 17:16:10 发布