访客地图

汇编第三章

张成
2014/12

第3章 寄存器(内存访问)

内存中字的存储

8086 cpu 用16位存储一个字

1个字 分为高八位 和 第八位

CPU1个单元 存储8位 所以2个单元 组成一个字


地址大的位高八位 小的位低八位  连续的2个内存单元 组成一个字


DS 数据段地址寄存器


mov bx,1000H

mov ds,bx

mov al,[0]


表示 将1000H 放入bx  然后将bx中的值 作为ds中的值 就是段地址

不能直接将1000H mov 进ds  这是硬件设计的问题 不作讨论了这里

[]表示内存单元

[0] 表示这个内存单元的偏移 地址为 0,上面  段地址为ds中的1000H  

然后形成物理地址 10000H  将物理地址为10000H 的内存单元中的值 送入al中


mov [0],al 表示将寄存器的值 送入内存中去


字的传送

8086CPU 16根数据线

一次传送16位数据 就是一个字

mov bx,1000H

mov ds,bx

mov ax,[0]  将[0]处的字形数据 送入ax   高八位和第八位2个内存单元的数据 组合送入ax

mov [0],ax 完成一个字的传送  将此处的内存单元的值 改写 改写2个内存单元的值


sub bx,[0]  表示 bx中的字形数据 与[0] 处的字形数据 相减 然后 赋值给bx



数据段


用mov指令访问内存单元时 可以只使用 偏移地址  段地址在DS中


mov add sub 具有2个操作对象的指令,jmp具有一个指令对象

jmp 寄存器  修改IP

jmp cs:ip  修改CS 和IP



栈,一种特殊访问方式的内存空间。


规则:先进先出 LIFO (last in first out)


CPU提供的栈机制


push pop

push ax 将ax中的数据压入栈

pop ax 将栈顶的数据送入ax

栈操作的是 字  占内存中的2个单元  即2个地址的高低位数据 组成


CPU要找到栈的位置 就必须有他的地址

SS存储 栈的段地址 SP存储栈的偏移地址


任意时刻 SS:SP 指向栈顶

push操作 SP - 2

pop 操作 SP + 2

SP范围0H - FFFFH


栈顶超界将会发生不可预料的错误,CPU只管指令在何处,不知道要执行的指令有多少

尽可能用最大的栈空间 来防止 超过界


栈段


将一组N<=64KB的内存 起始位置为16的倍数的 内存单元当作栈空间来使用


栈顶的变化范围为0-FFFFH 再增加的话 就又会轮为 0-FFFFH  数据就将覆盖原先的数据 所以 最大空间为64KB



上一篇:

下一篇: