【汇编语言】——第三章课后总结

第三章 的书本上主要有以下几个内容:

1.内存中字的存储

字单元:即存放一个字型数据(16位)的内存单元,由两个地址连续的内存单元组成。

小端法:高地址内存单元中存放字型数据的高位字节,低地址内存单元中存放字型数据的地位字节。

任何两个地址连续的内存单元,N号单元和N+1号单元,可以将他看成两个内存单元,也可看成一个地址为N的字单元的高位字节单元和地位字节单元。

2.DS和[address]

8086有一个DS寄存器,通常用来存放要访问的数据的段地址

比如读取10000H单元的内容:

mov bx,1000H

mov ds,bx

mov al,[0]

[...]:代表一个内存单元,其中的数字代表内存单元的偏移地址 

mov al ,[0]所使用的段地址来自ds,但ds不能直接写入数据(8086不支持将数据直接送入段寄存器的操作),所以借助其他的一般性寄存器。

8086CPU自动取ds中的数据为内存单元的段地址

3.字的传送

我们用mov指令在寄存器和内存之间进行字节数据的传送。因为8086CPU是16位结构,有16根数据线,所以,可以一次性传送16位数据,也就是说可以一次性传送一个字。

只要mov指令中给出16位的寄存器就可以进行16位的数据的传送了。比如:

mov bx,1000h

mov ds,ax

mov ax,[0]

mov [0],cx

4. mov add sub 指令

汇编指令   (1)操作码

                  (2)操作数   (常数,寄存器操作数,内存单元操作数)

用mov指令访问内存单元,可以在mov指令中只给出单元的偏移地址,此时,段地址默认在DS存储器中。

mov  寄存器,寄存器

mov  寄存器,内存单元

mov  内存单元,寄存器

mov  段寄存器,寄存器

mov  寄存器,段寄存器

mov 内存单元 段寄存器

mov 段寄存器,内存单元

add 寄存器,数据

add 寄存器 ,寄存器

add 寄存器,内存单元

add  内存单元,寄存器

sub 寄存器,数据

sub 寄存器,寄存器

sub 寄存器,内存单元

sub 内存单元,寄存器

5.数据段

可以将一组长度为N(N<=64KB)、地址连续,起始地址为16的倍数的内存单元当作专门存储数据的内存空间——定义数据段

用ds存放数据段的段地址,

访问时可以用ds存放数据段的段地址,再根据需要,用相关指令访问数据段中的具体单元

6.栈

后进先出(LIFO):最后进入这个空间的数据,最先出去

栈顶:最后入栈的字数据所对应的地址单元

栈底:固定的一端,栈区最高地址单元的前一个单元

操作:push(入栈),栈顶上移,栈顶-2 

           pop(出栈),栈顶下移,栈顶+2

7.CPU提供的栈机制

PUSH(入栈)POP(出栈)

在8086CPU中,有两个寄存器,段寄存器SS和寄存器SP,栈顶的段地址存放在SS中,偏移地址存放在SP中。任意时刻,SS和SP指向栈顶元素,PUSH指令和POP指令执行时,CPU从SS和SP中得到栈顶的地址。

PUSH AX 的执行

(1)SP=SP-2,SS:SP指向当前栈顶前面的单元,以当前栈顶前面的单元作为新的栈顶

(2)将ax中内容送入SS:SP指向的的内存单元处,SS:SP此时指向新栈顶

     入栈时栈顶从高地址向低地址方向增长

POP ax的执行

(1)将SS:SP指向的内存单元处的数据送入ax中

(2)SP=SP+2,SS:SP指向当前栈顶下面的单元,以当前栈顶下面的单元为新的栈顶。

注意:

出栈后 SS:SP指向新的栈顶1000EH,POP操作前的栈顶元素。1000CH处的2266H依然存在,但是已经不在栈中,当再次执行PUSH等入栈指令后,他将被覆盖。

8.栈顶超界问题

当栈空时,再使用pop出栈,当栈满时,再使用push入栈

要根据可能用到的最大栈空间来安排栈的大小,防止入栈的数据与太多而导致的超界;执行出栈的时候继续出栈二导致的超界。

9.push、pop指令

push、pop实质上就是一种内存传送指令,可以在寄存器和内存之间传送数据,与mov指令不同的是,push和pop指令访问的内存单元的地址不是在指令中给出的,而是由ss:sp指出的。

执行push时:先改变sp,后向ss:sp处传送。

执行pop时:先读取ss:sp处的数据,后改变sp。

栈顶的最大变化范围为0~FFFFH。

猜你喜欢

转载自www.cnblogs.com/hongyezhu/p/10009637.html