天津网站排名提升,网络营销推广策略包括哪些,浙江省城乡建设网站,深圳电商网站开发目录
内存中字的存储
示例#xff1a;
数据段寄存器DS与[address] 字的传送
数据段简介
CPU提供的栈机制
栈段寄存器SS和栈顶指针寄存器SP
PUSH AX指令的完整描述
示例图 POP AX指令的完整描述
示例图 栈顶超界问题
示例一#xff1a; 示例二#xff1a; 内存中字…目录
内存中字的存储
示例
数据段寄存器DS与[address] 字的传送
数据段简介
CPU提供的栈机制
栈段寄存器SS和栈顶指针寄存器SP
PUSH AX指令的完整描述
示例图 POP AX指令的完整描述
示例图 栈顶超界问题
示例一 示例二 内存中字的存储 在CPU中用寄存器存储一个字高8位存放高位字节低8位存放低位字节 在内存中由于一个内存单元是一个字节则一个字需要用两个地址连续的内存单元存放这个字的低位字节存放在低地址单元中高位字节存放高地址单元 示例
假设从0地址处存放数据1然后从2地址处存放数据2 数据120000 16进制表示4E20H 数据218 16进制表示: 0012H 注将起始地址为N的字单元简称为N地址字单元由N号单元和N1号单元组成 例如用0,1两个内存单元存放的数据4E20H称之为4E20H存放于起始地址为0的字单元中 数据段寄存器DS与[address] CPU要读写一个内存单元时必须给出该内存单元的地址CPU是根据段地址与偏移地址给出物理地址8086CPU中用DS寄存器存放要访问数据的段地址而[address]表示内存单元的偏移地址 question 如何将内存物理地址为10000H中的数据读取到寄存器AL中
思考如下 物理地址为10000H取段地址为1000H偏移地址为0000H 将段地址保存到DS寄存器中但是8086CPU不支持将数据直接送入段寄存器的操作考虑一个通用寄存器作为中转
// mov指令可以完成两种传送
// 1. 将数据直接送入寄存器 2.将一个寄存器中的内容送入另一个寄存器
mov bx,1000H
mov ds,bx
mov al,[0] 字的传送 1. mov ML/MH, [address] 该指令可以使寄存器和内存之间进行字节型数据传送;(MA/B/C/D) 2. mov MX,[Address] 该指令可以使寄存器与内存之间进行字型数据传送MA/B/C/D mOV BX,1000
mov ds,bx
mov ax,[0] //1000:0000处的字型数据送入AX
mov [0],cx //cx中的16位数据送到1000:0000
数据段简介 将一组长度为NN64KB) 地址连续 起始地址为16的倍数的内存单元当做专门存储数据的内存空间从而定义了一个数据段 例如 123B0H - 123B9H 这段内存空间当做数据段使用取段地址为123BH长度为10个字节 CPU提供的栈机制 栈是一种只能在一段进行插入或删除操作的数据结构 栈有两个基本操作 入栈 将一个新的元素放到栈顶 出栈 从栈顶取出一个元素 栈顶元素最后入栈最先出栈 8086CPU提供相关指令以栈的方式访问内存空间这意味着在基于8086CPU编程时可以将一段内存当做栈来使用 8086CPU提供入栈和出栈指令最基本的两个是PUSH(入栈和POP(出栈 push ax 表示将寄存器AX中的数据送入栈中pop ax 表示从栈顶取出数据送入AX 注入栈和出栈的操作都是以字为单位进行 栈段寄存器SS和栈顶指针寄存器SP
question push ax等入栈指令执行时要将寄存器中的内容放入栈顶单元的上方成为新的栈顶元素pop ax等出栈指令执行时从栈顶单元要取出数据送入寄存器当中如何知道哪个单元是栈顶单元
可以根据栈段寄存器SS和栈顶指针寄存器定位处栈顶单元。 栈段寄存器SS存放栈顶单元的段地址 栈顶指针寄存器SP存放栈顶单元的偏移地址 任意时刻SS:SP指向栈顶元素 PUSH AX指令的完整描述 SPSP-2 SS:SP指向当前栈顶前面的单元以当前栈顶前面的单元为新的栈顶 将寄存器AX 中的内容送入SS:SP指向的内存单元处SS:SP指向新栈顶 示例图 POP AX指令的完整描述 将SS:SP指向的内存单元处的数据送入寄存器AX中SPSP2SS:SP指向当前栈顶下面的单元以当前栈顶下面的单元为新的栈顶 示例图 栈顶超界问题
question依靠SS 与 SP 可以保证在入栈和出栈时找到栈顶但是如何能够保证在入栈和出栈时栈顶不会超出栈空间
示例一 示例二 上述示例描述了执行push,pop指令时发生栈顶超界问题当栈满的时候使用push命令入栈当栈空时使用pop命令出栈都将发生栈顶超界问题
当编程时要根据可能用到的最大栈空间安排栈的大小需要程序员自己担心栈顶超界问题