3.1 内存中字的存储:
在内存存储时,由于内存单元是字节单元(一个单元存放一个字节),所以一个字要用两个地址连续的内存单元来存放,这个字的低位字节存放在低地址单元中,高位字节则会存放在高地址的单元中。
字单元,即存放一个字型数据的内存单元,由两个地址连续的内存单元组成。高地址内存单元中存放字型数据的高位字节,低地址内存单元中存放字型数据的低位字节。
3.2 Ds和address:
CPU想要读取一个内存单元时,必须先给出这个内存单元的地址。8086中有一个DS寄存器,通常用来存放要用的数据的段地址,正常情况下如果我们想要赋值ds会通常用类似:mov ds 1000h的这种赋值方式,但是,现实并不是如此,8086不支持将数据直接送入寄存器的操作,因为ds是寄存器所以上面的方法是非法的,所以我们会先将1000放入一个一般的寄存器,之后再赋值给ds。
例如 mov bx,1000h
mov ds,bx
这样的做法才是比较好的。可以把bx的值放入ds中。
3.3 3.4 3.5 字的传送 指令 数据段:
因为80806有16根数据线,所以可以一次性传送16位的数据,也就是说可以一次性传送一个字。
例如 mov ax 1000h
mov ds,ax
mov ax,[0]
前两条指令目的是将ds设为1000h
之后再将1000:0里存的数据放到ax中。
用mov指令访问内存单元,可以在mov指令中给出单元的偏移地址,此时,段地址默认在ds寄存器中
在内存和寄存器之间传送字型数据时,高地址单元和高8位寄存器,低地址单元和低8位寄存器相对应。
mov,add,sub是具有两个操作对象的指令。而jmp是具有一个操作对象的指令。
3.6 3.7 3.8 3.9关于栈的相关知识
栈有2个基本的操作:入栈和出栈。入栈就是将一个新的元素放到栈顶,出栈就是从栈顶取出一个元素。栈顶的元素总是最后入栈,需要出栈时,又最先被从栈中取出。
在8086中最主要的是push和pop两个操作。 push ax表示将寄存器ax中的数据送入栈中,pop ax表示从栈顶取出数据送入ax。8086中的入栈和出栈的操作都是以字为单位的。
8086提供了栈的操作机制, 在ss,sp中存放栈顶的段地址和偏移地址:
提供入栈和出栈指令,他们会根据ss和sp指示的地址,按照栈的方式访问内存单元
8086只会记录栈顶,栈的空间的大小我们要自己管理。
用栈来暂存以后需要恢复的寄存器的内容时,寄存器出栈的顺序要和入栈的顺序相反。
3.10 相关知识
将一段内存当做栈段,仅仅只是我们在编程时候的安排,CPU并不会由于这种安排,就在执行push和pop等操作指令时自动的将我们定义的的栈段当做栈的空间来访问。
一段内存,可以既是代码的存储空间,又是数据的存储空间,还可以是栈空间,也可以什么也不是。关于在于CPU中寄存器的设置,即CS,IP,SS,SP,DS的指向。
原文地址:https://www.cnblogs.com/QiaoGeGe/p/9821286.html