汇编 第三章 寄存器(内存访问)知识点总结

最近学习了第三章,总结了以下知识点。

3.1  CPU中,用一个16位寄存器来存储一个字,一个字两个字节,高8位存放高位字节,低8位存放低位字节,低字节所在的内存单元称为起始地址,这就是小端法。

3.2 CPU要读写一个内存单元的时候,必须先给出这个内存单元的地址。

mov指令的两种传送 :将数据直接送入寄存器、将一个寄存器中的内容送入另一个寄存器。

3.3 8086CPU中,通常用DS寄存器来存放要访问数据的段地。

mov bx,1000H

mov ds,bx

mov 【0】,al

用ds存放段地址为1000H。8086CPU的硬件设计,不支持将数据直接送入段寄存器。

3.4 mov、add、sub指令

 操作位数必须要一致

3.5数据段

累加数据段中的前三个字型数据

mov ax,123BH

mov dx,ax

mov al,0

add al,[0]

add al,[0]

add al,[2]

3.6 栈

后进先出:一个入口,放进三本书,高等数学、c语言、软件工程,拿出来的顺序,软件工程、c语言、高等数学。

栈的两个基本操作:入栈和出栈。

3.7 CPU提供的栈机制

8086CPU提供的栈机制,跟数据结构的类似,PUSH出栈,POP入栈,任意时刻,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指向当前栈顶下面的单元,当前栈顶下面的单元为新的栈顶。

3.8 栈顶越界的问题

8086CPU用SS和SP指示栈顶的地址,并提供push和pop指令实现入栈和出栈。

空栈执行pop出栈操作或者满栈执行push入栈操作,这些会引起栈顶越界问题。

我们在编程的时候要担心数组越界的问题,要根据可能用到的最大栈空间,来安排栈的大小,防止入栈的数据太多而导致的超界;

执行出栈操作的时候也要注意,以防栈空的时候继续出栈而导致的超界。

3.9 push.pop指令

push和pop的后面可以是寄存器,段寄存器,内存单元。

mov ax,1000H

mov ss,ax

mov sp 0010H    初始化栈顶

mov ax,001AH

mov bx,001BH

push ax

push bx        ax,bx入栈

sub ax,ax       ax清零

sub bx,bx

pop bx       恢复bx,ax原来的数据

pop ax

最后入栈的寄存器的内容在栈顶,所以恢复时,要最先出栈。

3.10 栈段

他的段地址放在SS中,将栈顶单元的偏移地址存放在SP中,这样CPU在需要进行栈操作的时候,比如执行push、pop指令等,

就将我们定义的栈段当作栈空间来使用。

猜你喜欢

转载自www.cnblogs.com/ljw376386/p/9830641.html