关于ds寄存器(数据段寄存器)(cs是代码段寄存器)
如此:mov a1,[0] 这里的[0]指的是ds指向内存的偏移地址(指令格式:mov 寄存器名,内存单元地址)
8086cpu不支持数据直接送入段寄存器的操作,ds是一个段寄存器,所以 mov ds,100h非法,只能用一个寄存器进行中转
在8086CPU加电启动或复位后(即CPU刚开始工作时)CS和IP被设置为CS=F000H,IP=FFFFH,即在8086PC机刚启动时,CPU从内存FFFF0H单元中读取指令执行,FFFFOH单元中的指令是8086PC机开机后执行的第一条指令。
mov指令的几种形式:
mov 寄存器,数据
mov 寄存器,寄存器
mov 寄存器,内存单元
mov 内存单元,寄存器 (mov [0],ax)
mov 段寄存器,寄存器
sub和add的不同之处在于它们不可以对段寄存器有操作
一个字型数据占两个单元,所以偏移地址是[0],[2],[4]
栈:一种具有特殊的访问方式的存储空间,特殊性在于最后进入这个空间的数据最先出去。
8086cpu提供入栈和出占指令,最基本的两个是:push(入)和pop(出)
push 寄存器/段寄存器/内存单元
pop 寄存器/段寄存器/内存单元
注意ss:sp永远指向栈顶元素
如果将10000h-1000fh这段空间当作栈,初始状态栈是空的,此时ss=1000h,sp=0010
栈会越界,会影响到其它的数据,栈越界是危险的。
cpu只知道栈顶位置,不知道栈空间的大小
每一次执行push前都会将sp-2,因此cpu执行push要两步,而move只要一步
一个栈的最大值是64kb
用一个段存放代码,用一个段存放数据,用一个段当作栈,这些都是我们自己安排的。
数据段存在ds中,代码段存在cs中,栈段存在ss中
一段内存可以什么都是,也可以什么都不是
debug中t命令执行改变ss后下一条指令紧接着执行
debug在其处理d命令的程序段中,必须有将段地址送入段存储器的代码,访问内存指令一般被存在ds中
d命令可以这样用:-d 段存储器:偏移地址
e a u 命令也可以这样如上
如此:mov a1,[0] 这里的[0]指的是ds指向内存的偏移地址(指令格式:mov 寄存器名,内存单元地址)
8086cpu不支持数据直接送入段寄存器的操作,ds是一个段寄存器,所以 mov ds,100h非法,只能用一个寄存器进行中转
在8086CPU加电启动或复位后(即CPU刚开始工作时)CS和IP被设置为CS=F000H,IP=FFFFH,即在8086PC机刚启动时,CPU从内存FFFF0H单元中读取指令执行,FFFFOH单元中的指令是8086PC机开机后执行的第一条指令。
mov指令的几种形式:
mov 寄存器,数据
mov 寄存器,寄存器
mov 寄存器,内存单元
mov 内存单元,寄存器 (mov [0],ax)
mov 段寄存器,寄存器
sub和add的不同之处在于它们不可以对段寄存器有操作
一个字型数据占两个单元,所以偏移地址是[0],[2],[4]
栈:一种具有特殊的访问方式的存储空间,特殊性在于最后进入这个空间的数据最先出去。
8086cpu提供入栈和出占指令,最基本的两个是:push(入)和pop(出)
push 寄存器/段寄存器/内存单元
pop 寄存器/段寄存器/内存单元
注意ss:sp永远指向栈顶元素
如果将10000h-1000fh这段空间当作栈,初始状态栈是空的,此时ss=1000h,sp=0010
栈会越界,会影响到其它的数据,栈越界是危险的。
cpu只知道栈顶位置,不知道栈空间的大小
每一次执行push前都会将sp-2,因此cpu执行push要两步,而move只要一步
一个栈的最大值是64kb
用一个段存放代码,用一个段存放数据,用一个段当作栈,这些都是我们自己安排的。
数据段存在ds中,代码段存在cs中,栈段存在ss中
一段内存可以什么都是,也可以什么都不是
debug中t命令执行改变ss后下一条指令紧接着执行
debug在其处理d命令的程序段中,必须有将段地址送入段存储器的代码,访问内存指令一般被存在ds中
d命令可以这样用:-d 段存储器:偏移地址
e a u 命令也可以这样如上