标签:
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就把我们定义的栈段当栈空间用
完工~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
标签:
原文地址:http://www.cnblogs.com/wz0107/p/5380158.html