码迷,mamicode.com
首页 > 其他好文 > 详细

第三章

时间:2018-12-17 22:37:52      阅读:216      评论:0      收藏:0      [点我收藏+]

标签:区分   写入   位置   add   sub   bsp   res   连续   编程   

1.内存中字的存储

用16位寄存器来存储一个字。高八位存放高位字节,低八位存放低位字节。

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

注意区分地址单元和地址字单元。

2:DS和address

DS寄存器用来存放访问数据的段地址。

如果我们想读取10000H单元的内容:

mov dx,1000h

mov ds,dx

mov al,[0]

前两行就是将1000H送入到DS寄存器中(需要用普通寄存器dx来过渡)

然后用用mov al,[0]来完成传送(mov指令中的[]说明操作对象是一个内存单元,[]中的0说明这个内存单元的偏移地址为0)

3.字的传送

8086CPU可以一次性传送16位的数据,即可以一次性传送一个字。

只要在mov 指令给出16位的寄存器就可以进行16位数据的传输。

列如:mov dx,1000h

           mov ds,dx

          mov al,[0]

          mov  [0],cx

就是将cx中的16位数据传到1000:0处。

4.mov add sub指令

mov 寄存器,数据 mov 寄存器,寄存器 mov 寄存器,内存单元 mov 内存单元,寄存器 mov 段寄存器,寄存器

add和sub指令只是没有mov 段寄存器,寄存器这一项。

5.数据段

比如:将123B0H~123B9H的内存单元定义为数据段,现在要累加这个数据段中的前三个单元的数据,代码如下:

mov ax,123BH

mov ds,ax

mov al,0

add al,[0]

add al,[1]

add al,[2]

6,栈

栈是一种具有特殊的访问方式的存储空间,它的特殊性就在于:最后进入这个空间的数据,最先出去。

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

入栈就是将新的元素放到栈顶,出栈就是从栈顶取出一个元素。

7,CPU提供的栈机制

8086CPU提供相关的指令来以栈的方式访问内存空间,这意味着在编程时,可以将一段内存当作栈来使用。

CPU提供入栈(PUSH)和出栈(POP)两个最基本的指令,比如:push axj就是表示将寄存器ax中的数据送入到栈中,pop  ax则表示从栈顶取出数据送入到ax当中。

对于CPU如何知道栈顶的位置,我们可以想到必须要有相应的寄存器来存放栈顶的 地址,即段寄存器SS和寄存器SP,SS就是用来存放栈顶的段地址,SP就是用来存放偏移地址,并且在任意时刻SS:SP指向栈顶的地址。

可以看出,入栈时,栈顶从高地址向低地址方向增长。

pop指令是完全与push指令相反的,当再次执行push指令时,并在里面写入新的数据时,它将会被覆盖。

8,栈顶超界问题

当栈满再使用push指令入栈时,或栈空的时候再使用pop时,都会发生栈顶超界的问题。

9,push pop指令

push 寄存器   ;将一个寄存器中的数据入栈

pop 寄存器  :用一个寄存器来接受出栈的数据

当然用段寄存器也是可以的;

push 内存单元  ;将一个内存单元处的字入栈

pop 内存单元   ;用一个内存单元来接受出栈的数据

比如: mov ax,1000h

            mov ds,ax

           push [0]     ;将1000:0处的字压入栈中

           pop [2]      ;将出栈的数据送入到1000:2处

10.栈段

对与栈段,将它的段地址放在SS中,将栈顶单元的偏移地址放在SP中,这样CPU在需要进行栈操作时,就可以将我们定义的栈段当作栈空间使用。

 

第三章

标签:区分   写入   位置   add   sub   bsp   res   连续   编程   

原文地址:https://www.cnblogs.com/lopezj/p/10134304.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!