网站制作服务订单,临泉建设网站,wordpress主题 电子商务,企业网站 建设过程第三章 的书本上主要有以下几个内容#xff1a; 1.内存中字的存储 字单元#xff1a;即存放一个字型数据#xff08;16位#xff09;的内存单元#xff0c;由两个地址连续的内存单元组成。 小端法#xff1a;高地址内存单元中存放字型数据的高位字节#xff0c;低地址内…第三章 的书本上主要有以下几个内容 1.内存中字的存储 字单元即存放一个字型数据16位的内存单元由两个地址连续的内存单元组成。 小端法高地址内存单元中存放字型数据的高位字节低地址内存单元中存放字型数据的地位字节。 任何两个地址连续的内存单元N号单元和N1号单元可以将他看成两个内存单元也可看成一个地址为N的字单元的高位字节单元和地位字节单元。 2.DS和[address] 8086有一个DS寄存器通常用来存放要访问的数据的段地址 比如读取10000H单元的内容 mov bx,1000H mov ds,bx mov al,[0] [...]代表一个内存单元其中的数字代表内存单元的偏移地址 mov al ,[0]所使用的段地址来自ds但ds不能直接写入数据8086不支持将数据直接送入段寄存器的操作,所以借助其他的一般性寄存器。 8086CPU自动取ds中的数据为内存单元的段地址 3.字的传送 我们用mov指令在寄存器和内存之间进行字节数据的传送。因为8086CPU是16位结构有16根数据线所以可以一次性传送16位数据也就是说可以一次性传送一个字。 只要mov指令中给出16位的寄存器就可以进行16位的数据的传送了。比如 mov bx,1000h mov ds,ax mov ax,[0] mov [0],cx 4. mov add sub 指令 汇编指令 1操作码 2)操作数 常数寄存器操作数内存单元操作数 用mov指令访问内存单元可以在mov指令中只给出单元的偏移地址此时段地址默认在DS存储器中。 mov 寄存器寄存器 mov 寄存器内存单元 mov 内存单元寄存器 mov 段寄存器寄存器 mov 寄存器段寄存器 mov 内存单元 段寄存器 mov 段寄存器内存单元 add 寄存器数据 add 寄存器 寄存器 add 寄存器内存单元 add 内存单元寄存器 sub 寄存器数据 sub 寄存器寄存器 sub 寄存器内存单元 sub 内存单元寄存器 5.数据段 可以将一组长度为NN64KB、地址连续起始地址为16的倍数的内存单元当作专门存储数据的内存空间——定义数据段 用ds存放数据段的段地址, 访问时可以用ds存放数据段的段地址再根据需要用相关指令访问数据段中的具体单元 6.栈 后进先出LIFO最后进入这个空间的数据最先出去 栈顶最后入栈的字数据所对应的地址单元 栈底固定的一端栈区最高地址单元的前一个单元 操作push(入栈)栈顶上移栈顶-2 pop(出栈)栈顶下移栈顶2 7.CPU提供的栈机制 PUSH(入栈POP出栈 在8086CPU中有两个寄存器段寄存器SS和寄存器SP栈顶的段地址存放在SS中偏移地址存放在SP中。任意时刻SS和SP指向栈顶元素PUSH指令和POP指令执行时CPU从SS和SP中得到栈顶的地址。 PUSH AX 的执行 1SPSP-2SSSP指向当前栈顶前面的单元以当前栈顶前面的单元作为新的栈顶 2将ax中内容送入SSSP指向的的内存单元处SSSP此时指向新栈顶 入栈时栈顶从高地址向低地址方向增长 POP ax的执行 1)将SSSP指向的内存单元处的数据送入ax中 2)SPSP2SS:SP指向当前栈顶下面的单元以当前栈顶下面的单元为新的栈顶。 注意 出栈后 SSSP指向新的栈顶1000EHPOP操作前的栈顶元素。1000CH处的2266H依然存在但是已经不在栈中当再次执行PUSH等入栈指令后他将被覆盖。 8.栈顶超界问题 当栈空时再使用pop出栈当栈满时再使用push入栈 要根据可能用到的最大栈空间来安排栈的大小防止入栈的数据与太多而导致的超界执行出栈的时候继续出栈二导致的超界。 9.push、pop指令 push、pop实质上就是一种内存传送指令可以在寄存器和内存之间传送数据与mov指令不同的是push和pop指令访问的内存单元的地址不是在指令中给出的而是由sssp指出的。 执行push时先改变sp后向sssp处传送。 执行pop时先读取sssp处的数据后改变sp。 栈顶的最大变化范围为0~FFFFH。转载于:https://www.cnblogs.com/hongyezhu/p/10009637.html