汇编学习 NO3

        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等寄存器的设置来决定的.

                                                                     

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值