1.字数据在内存中的存储
存取原则:高 高 低 低 即:字数据的低位字节存放在低位内存单元;高位存放在高位字节存放在高地址内存单元;取低地址内存单位作为字数据地址。
2.数据在内存和cpu之间的传送
DS寄存器:数据段段寄存器,用于存放数据段的【段地址】
将一段内存用作数据段,是编程时的一种安排;在mov add sub 等汇编指令中,访问内存单元时,默认情况下指的是数据段。mov ax,【1】;ax<—((ds)*16+1)
3.汇编指令mov,add,sub
mov 指令形式:mov 寄存器,常数 mov ax,1000H ;mov 寄存器,寄存器 mov bx,ax ;mov 寄存器,内存单元 mov ax 【1】;mov 寄存器,段寄存器 mov ax,ds;mov 内存单元,常数 mov 【1】,byte ptr 3;mov 内存单元,寄存器 mov 【1】,ax; mov 内存单元 寄存器 mov 【1】,ds; mov 段寄存器,寄存器 mov ds,ax;mov 段寄存器,内存单元 mov ds,【1】
(1)两个操作的长度一致(2)关于常数,不能作为第一个操作数,做第二个操作数时如果最高位是十六进制的a~f或者A~F前面要加零(3)两个内存单元之间不能直接传送数据(4)不能使用mov指令修改CS和IP的值(5)关于段寄存器 两个断就成年期直接不能直接传送;不能把常数送到段寄存器
add指令形式:add 寄存器,常数 add ax,1000H ;add 寄存器 寄存器,add bx,ax;add 寄存器,内存单元,add ax,【1】;add 内存单元 常数 ,add 【1】,byte ptr 3;add 内存单元 寄存器,add 【1】,ax
(1)add指令的操作数不能同时是内存单元(2)add指令的操作数不能是段寄存器
sub指令:sub 寄存器,常数 sub ax,1000H;sub寄存器,寄存器 sub bx,ax;sub寄存器,内存单元 , sub ax,【1】;sub 内存单元,常数 , sub 【1】,byte ptr 3;sub 内存单元,寄存器 sub 【1】,ax
(1)两个内存单元不能直接使用sub指令相减(2)sub指令的操作不能是段寄存器
4.栈
是一个逻辑上的概念,可以将一段内存空间当作栈来使用
特性:后进先出;两个概念:栈底栈顶;两个操作:出栈入栈;一个约定:8086中栈以字为存取单元
栈顶:最后入栈的字数据所对应的地址单元;栈底:固定的一端,栈区最高地址单元的前一个单元
入栈:把数据存入栈;出栈:把栈取出数据
入栈操作分析:1126H存入栈区
第一步:栈顶上移两个单元,即栈顶-2—>栈顶;第二步存入数据
出栈操作分析:从栈中取出一个字数据给AX
第一步:取出字数据5020H—>AX;第二步:栈顶下移两个单元,即:栈顶+2—>栈顶
与栈相关的寄存器SS和SP
ss:栈段段寄存器,用于存放栈段的段地址
sp:栈指针寄存器,用于存放栈顶的偏移地址
ss:sp对应的物理地址是栈顶的物理地址 (ss)*16+(sp)—>栈顶的物理地址
栈操作指令:push和pop
指令形式:push ax 栈<—ax;pop ax ax<—栈 push 【0】 栈<—ds:0对应的内存单元字数据 ;pop【0】 ds:0对应的内存单元<—栈;push ds 栈<—ds ;pop ds ds<—栈
汇编指令:push 寄存器 将寄存器植入栈;pop 寄存器 用寄存器保存出栈数据;push内存单元 将内存单元内容入栈;pop 内存单元 用内存单元保存出栈数据;push 段寄存器 江段寄存器植入栈;pop 段寄存器 用段寄存器保存出栈数据
在posh内存单元和pop内存单元中,指令中只需给出【偏移地址】默认地址在DS中。
对8086cpu而言,push和pop的操作:入栈和出栈均以字为单位;操作对象不能是常数;pop段寄存器中,段寄存器不能是cs和ss;
利用栈后入先出特性,使用push和pop指令可以完成一些特殊处理
pop ss;x
;ss<—(ss:sp)
;sp<—(sp)+2
栈顶超界;当栈慢的时候,在使用push指令入栈;当栈空的时候,在使用pop指令出栈;