汇编学习笔记:第五章 [BX]和loop指令

1、如果bx寄存器中的内容为 0,那么 “ [bx] ” 就等同于 “ [0] ” ,如同变量的用法;
2、mov ax,[bx] 指令,是把偏移地址为 [bx] ,段地址默认在 ds 中的数据,送入 ax 中。即:(ax)=((dx)*16+(bx));
3、段前缀:显式的指明段地址,如,mov ax,ds:[bx]、mov ax,cs:[bx]、mov ax,ss:[bx]、mov ax,es:[bx];
4、loop 指令有特定的结构,可以在汇编中实现循环功能,需要 cs 寄存器的配合。cpu 在执行 loop 指令时,会先执行 (cx)=(cx)-1,然后判断 cx 是否为零,如果为零,则向下执行,如果不为零,则转至标号处执行程序,有点像高级语言里的 for 语句;
5、inc bx 相当于 (bx)=(bx)+1,dec bx 则相当于 (bx)=(bx)-1,优点:速度比 sub 指令快,占用空间小;
6、在 8086 模式中,随意向一段内存空间写入内容是很危险的,因为,这段空间中可能存放着重要的系统数据或代码。要使用操作系统给我们分配的空间,而不应直接用地址任意指定内存单元,向里面写入。
7、程序取得所需空间的方法有两种:一是在加载程序的时候为程序分配,再就是程序在执行过程中向系统申请(摘至第 6 章,第 3 小段);

  汇编的学习,打算又放一放。这一个月来比较懒散,差不多一个月时间,才看了 122 页,大部分还是在地铁上看的。昨晚,在某东上买了本 C 语言的书。准备开始,好好地学习一门重要的语言了。
  其实呢,我这一段时间学习汇编语言,并不是打算真正掌握它。而是,准备好好地认识一下这门语言,了解它是用来做什么的,大概的一些原理。就好比我以前一直不理解,php为什么是解释型语言。
  编程世界里的语言那么多,我们究竟需要学习多少门语言,才能让自己具有竞争力。我们究竟需要精通什么样的语言,才能到35岁的时候没有中年危机,这个答案怕是没有答案。

汇编学习笔记:第四章 第一个程序

1、汇编程序从写出到最终执行过程:编写汇编源程序、对源程序进行编译连接、执行可执行文件中的程序;
2、指令:源程序中,包含两种指令。一种是汇编指令、一种是伪指令。汇编指令是指:有对应机器码的指令,可被编译为机器指令,最终由CPU所执行。而伪指令,没有对应的机器指令,最终不被CPU所执行,由编译器来执行的指令,编译器根据伪指令来进行相关的编译工作;
3、程序结构:源程序是由一些段构成的,我们可以在这些段中存放代码、数据、或将某个段当作栈空间;
4、程序返回:一个程序结束后,将CPU的控制权,交还给使它得以运行的程序,这个过程,称之为程序返回。在程序的末尾,添加返回的程序段,便可实现程序返回。如: mov ax,4c00h (换行) int 21H;

汇编学习笔记:第三章 寄存器(内存访问)

1、字单元:即存放一个字形数据(16位)的内存单元,由两个地址连接的内存单元组成;
2、DS段寄存器:8086CPU不支持将数据直接送入段寄存器(如:mov ds,1000H),只能将另一个寄存器的数据送入ds段寄存器(如:mov ds,bx);
3、在使用mov时,可以使用mov al,[0]的方式,把数据送入al寄存器,其中“[0]”为偏移地址,并且会自动取ds中的数据为内存单元的段地址。所以,mov al,[0]会把“ds:0”所在内存单元的数据,送入al中;
4、字的传送,除了有:mov 寄存器,数据、mov 寄存器,寄存器、mov 寄存器,内存单元等形式,还有:add 寄存器,数据、sub寄存器,数据,分别代表:相加、相减;
5、数据段:根据编程需要,可以将一组内存单元定义为一个段。比如,可以将一组长度为N(N<=64kb)、地址连续、起始地址为16的倍数的内存单元,当作专门存储数据的内存空间;
6、栈:后进先出的线性表,衍生出两个新命令push、pop,分别代表:入栈、出栈。用法如:push ax、pop ax;
7、SS:SP指向的是栈顶, 栈还会出现栈顶超界问题 。每执行一次push ax,相当于执行了:SP=SP-2、将ax中的内容送入当前SS:SP处;
8、栈段: 一段连续的内存空间,起止位置由我们自行安排,遵循后进先出原则。

汇编学习笔记:第二章 寄存器

1、cpu由运算器、控制器、寄存器等构成,这些器靠内部总线相连,内部总线连接CPU内部各个器件,外部总线连接CPU与主板上其他器件;
2、8086CPU有14个寄存器,分别为:AX、BX、CX、DX、SI、DI、SP、BP、IP、CS、SS、DS、ES、PSW,所有寄存器都是16位的,可以存放2个字节;
3、不同寄存器的作用各不相同,通用寄存器用于存放一般性数据(AX、BX、CX、DX),段寄存器用于存放并提供段地址(CS、DS、SS、ES),指针寄存器用于存放并提供偏移地址(IP);
4、为保证向下兼容,16位的8086CPU的AX、BX、CX、DX寄存器,都可分为2个独立使用的8位寄存器来用,如:AX可分为AH和AL、BX可分为BH和BL、CX可分为CH和CL、DX可分为DH和DL;
5、CPU读写内存时,都是通过物理地址(段地址*16+偏移地址/段地址:偏移地址/CS:IP)来访问数据;
6、DOS下debug程序的命令:R查看或修改寄存器的内容、D查看内存中的内容、E修改内存中的内容、U将内容中的内容解释为机器指令和对应的汇编指令、T执行CS:IP指向的内存单元处的命令、A以汇编指令的形式向内存中写入指令;

汇编学习笔记:第一章 基础知识

1、每一种cpu都有自己的汇编指令集;
2、在存储器中,数据和程序都是以二进制形式存放的;
3、存储单元的编号从零开始;
4、计算机的最小单位是 bit ( 比特,二进制0101 ),8个bit组成一个Byte ( 字节 );
5、cpu通过总线向接口卡发送指令,总线又分为:地址总线、控制总线和数据总线;
6、地址总线的宽度,决定了cpu的寻址能力。例如:10根地址总线,寻址能力为2^10 ( 1024 或 1k );
7、数据总线的宽度,决定了cpu向其他器件,单次传输的数据量。例如:8根数据总线,一次可传输1字节( 8位的二进制数据 );
8、控制总线的宽度,决定了cpu对其他器件的控制能力。控制总线是个总称,是对一些不同控制线的集合。有多少根控制总线,就意味着cpu提供了对外部器件的多少种控制;