汇编语言(王爽) 第3章寄存器(内存访问)

3.1 内存中的字

内存中的字是16位的,以2个内存单元存储

地址大的存高位(字的左边8位),地址小的存低位(字的右边8位)

字单元:存放1个字形数据的内存单元,由2个内存单元组成,共16位

3.2 DS

一个寄存器的名字,用来放数据段的段地址

mov 指令可以把数据转到寄存器,一个寄存器的内容转到另一个寄存器,内存单元(字单元)转到寄存器

但是一般会mov ax,1000h;mov ds,ax而不是直接mov ds,1000h

因为8086CPU不支持直接把内存单元的东西转到段寄存器上面

3.3字的传送

直接上栗子

mov ax,1000h

mov ds,ax;

mov ax,[0]

假设10000h的数据是11H,10001h的数据是22H

那么指令执行好了之后,ax的数据就是2211H

说明内存中的东西到寄存器中是以1个字单元传输的,也就是2个字节

3.4 mov add sub

移动,加减把

3.5 数据段

把内存中砍一段处理存放数据,人为规定的,系统不认识

想系统认识这段内存是放数据的,就用ds中的段地址指向其地址就好了

3.6栈

栈也是把一段内存拿过来,遵循LIFO原则

用SS:SP识别内存段是一个栈

3.7 cpu提供的栈机制

基本指令就出栈和入栈,以字为单位进行

栈顶元素用SS:SP2个寄存器规定

入栈先SP+2再push进去

出栈先pop出去再sp-2

3.8 超越栈

因为栈是一段内存空间,有大小

push太多和pop太多都会跑到栈外面,影响别的内存

8086没办法限制栈顶和栈尾,只能自己注意下了

3.10栈段

也就是内存段,但是用SS:SP指向的

SP是个16位的寄存器,所以栈段范围是0000-ffff

段小结

段存放数据叫数据段,段地址是DS,当用mov,add,sub等指令访问内存单元的时候,CPU就把我们定义的数据段中的内容当数据来访问

段存放代码叫代码段,也就是指令段把。用CS:IP指向,这样CPU就会执行我们定义的代码段中的指令

段当做栈叫栈段,指向是SS:SP,当CPU进行栈操作的时候,如push,pop就把我们定义的栈段当栈空间用

完工~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

posted @ 2016-04-11 21:05  Debugor  阅读(201)  评论(0编辑  收藏  举报