ch03_寄存器(内存访问)

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

汇编语言基础麦哥@red寄存器(内存访问)•3.1内存中字的存储•3.2DS和[address]•3.3mov指令•3.4add、sub指令•3.5数据段•3.6栈•3.7栈顶超界的问题•3.8push、pop指令•3.9栈段@red内存中字的存储•内存单元是字节单元,(一个字节,也就是8位)•则一个字要用两个连续的内存单元存放•任何两个地址连续的内存单元,N号单元和N+1号单元,可以将它们看成两个内存单元,也可以看成一个地址为N的字单元中的高位字节单元和低位字节单元•如图:•在0地址处开始存放20000(4E20H):@red和[address]•8086CPU中有一个DS寄存器,通常用来存放要访问的数据的段地址例如:我们要读取10000H单元的内容movbx,1000Hmovds,bxmoval,[0]其中moval,[0]将ds中的值作为段地址(1000H),将0作为偏移址,也就是将10000H(1000:0)中的数据读到al中.注意:不能将数值直接给ds,只能通过寄器movds,1000H是错误的将数据从寄存器送入内存单元:movbx,1000Hmovds,bxmov[0],al@red指令•MOV指令允许进行如下操作:–(1)MOV寄存器,寄存器/内存单元/段寄存器/立即数–(2)MOV内存单元,寄存器/段寄存器/立即数–(3)MOV段寄存器,寄存器/内存单元•MOV指令不允许进行下述操作:–两个操作数的类型不一致•如:MOVAL,050AH;非法指令:050Ah为字,而AL为字节–两个操作数不能都是存储器•如:mov[0],[2]–段寄存器的操作有一些限制•如:MOVDS,100H;非法指令:立即数不能传送段寄存器•不要直接改变cs的值如:MOVCS,[SI];不允许使用的指令@red指令•mov指令常用的的几种形式:–mov寄存器,数据如:movax,8–mov寄存器,寄存器如:movax,bx–mov寄存器,内存单元如:movax,[0]–mov内存单元,寄存器如:mov[0],ax–mov段寄存器,寄存器如:movds,bx–mov寄存器,段寄存器如:movax,ds@red、sub指令•add和sub指令同mov一样,都有两个操作对象@red数据段•对于8086PC机,我们可以根据需要将一组长度为N(N≤64K)、地址连续、起始地址为16的倍数的内存单元当作专门存储数据的内存空间,从而定义了一个数据段•我们将123B0H~123BAH的内存单元定义为数据段•累加数据段中的前3个字型数据@red栈•栈是一种具有特殊的访问方式的存储空间。它的特殊性就在于,最后进入这个空间的数据,最先出去(FILO).•你可以把栈看成一个弹夹,先压入的子弹最后打出来–入栈:将一个新的元素放到栈顶;–出栈:从栈顶取出一个元素。•8086CPU中,有两个寄存器:–段寄存器SS存放栈顶的段地址–寄存器SP存放栈顶的偏移地址–任意时刻,SS:SP指向栈顶元素。@red栈•push指令的执行过程(pushax)–1.SP=SP–2;–2.将ax中的内容送入SS:SP指向的内存单元处,SS:SP此时指向新栈顶。@red栈•POP指令执行过程(popax)–1.将SS:SP指向的内存单元处的数据送入ax中;–2.SP=SP+2,SS:SP指向当前栈顶下面的单元,以当前栈顶下面的单元为新的栈顶@red栈顶超界的问题•当栈满的时候再使用push指令入栈,栈空的时候再使用pop指令出栈,都将发生栈顶超界问题。•栈顶超界是危险的•8086CPU只知道栈顶在何处(由SS:SP指示),而不知道读者安排的栈空间有多大•我们在编程的时候要自己操心栈顶超界的问题,要根据可能用到的最大栈空间,来安排栈的大小,防止入栈的数据太多而导致的超界;@red、pop指令•push寄存器:将一个寄存器中的数据入栈•pop寄存器:出栈,用一个寄存器接收出栈的数据–例如:pushaxpopax•push段寄存器:将一个段寄存器中的数据入栈•pop段寄存器:出栈,用一个段寄存器接收出栈的数据–例如:pushdspopds•push内存单元:将一个内存单元处的字入栈(栈操作都是以字为单位)•pop内存单元:出栈,用一个内存字单元接收出栈的数据–例如:push[0]pop[2]@red栈段•对于8086PC机,在编程时,我们可以根据需要,将一组内存单元定义为一个段。•我们可以将长度为N(N≤64K)的一组地址连续、起始地址为16的倍数的内存单元,当作栈来用,从而定义了一个栈段。•将一段内存当作栈段,仅仅是我们在编程时的一种安排,CPU并不会由于这种安排,就在执行push、pop等栈操作指令时就自动地将我们定义的栈段当作栈空间来访问。•访问我们定义的栈段时将SS:SP指向我们定义的栈段谢谢观看红萌网出品

1 / 15
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功