8086 DS 和 ES 寄存器
来源:互联网 发布:金蝶软件科技有限公司 编辑:程序博客网 时间:2024/05/03 11:54
DS 寄存器和 ES 寄存器:
DS 寄存器和 ES 寄存器都属于段寄存器,其实它们和 CS 寄存器以及 SS 寄存器用起来区别不大,
既然是段寄存器的话,自然它们存放的就是某个段地址了 。
通过上面对基础知识的介绍呢,我们已经知道,如果 CPU 要访问一个内存单元时,
我们必须要提供一个指向这个内存单元的物理地址给 CPU ,
而我们也知道在 8086 CPU 中,物理地址是由段地址左移 4 位,然后加上偏移地址形成的,
所以,我们也就只需要提供段地址和偏移地址即 OK 。
8086 CPU 呢,提供了一个 DS 寄存器,并且通常都是通过这个 DS 段寄存器来存放要访问的数据的段地址 。
DS(Data Segment):很显然,DS 中存放的是数据段的段地址 。
但是这里不得不再点一下,那就是我们对段的支持是在 CPU 上体现的,而不是在内存中实现了段,
所以事实上我们使用的段其实是一个逻辑概念,即是我们自己定义的,
再说白了,我定义一个段,我说它是数据段那它就是数据段,我说它是代码段那么它就是代码段,
它们其实都是一块连续的内存而已,至于为什么要区分为数据段和代码段,
很明显,是用来给我们编程提供方便的,即我们在自己的思想上或者说是编码习惯上规定,
数据放数据段中,代码放代码段中 。而我们在使用数据段的时候,为了方便或者说是代码的编写方便起见,
我们一般把数据段的段地址放在 DS 寄存器中,当然,如果你硬要觉得 DS 不顺眼,那你可以换个 ES 也是一样的,
至于 ES(Extra Segment) 段寄存器的话,自然,是一个附加段寄存器,如果再说得过分点,
就当它是个扩展吧,当你发现,你几个段寄存器不够用的时候,你可以考虑使用 ES 段寄存器,
在使用方式上,则和其他的段寄存器没什么区别 。
下面看一个介绍使用 DS 寄存器的 Demo:
ASSUME CS:CODESCODES SEGMENT START: MOV AX,1000H MOV DS,AX MOV AL,1 MOV BX,0 MOV CX,5;设计一个循环,让其循环 5 次 s: MOV [BX],AL;这里 [BX] 并没有指定段地址哦 INC AL INC BX LOOP s MOV AH,4CH INT 21HCODES ENDS END START
上面的代码所做的事情,就是循环将 1,2,3,4,5 写入到地址 1000H:0000H ,1000H:0001H,
1000H:0002H,1000H:0003H,1000H:0004H 中,
语句的执行过程如下:首先我们来看尚未执行上述任何指令时栈中的数据情况:
而当循环执行完成以后,我们再来看内存 1000H:0000H 处的值:
在这里,我们可以看到确实达到了我们预期的效果,但是大家注意看代码:
s: MOV [BX],AL;这里 [BX] 并没有指定段地址哦 INC AL INC BX LOOP s
这里可以看到,我们在 [BX] 中并没有给其指定段地址,而只有一个偏移地址,
但是根据我们一开始的介绍,必须要有段地址和偏移地址才能够定位内存单元,
莫非这里出问题了?
其实不是的,因为我们在最前面定义了段地址 DS 为 1000H,
当我们定义好段地址后,每一次 CPU 执行到 [BX] 时,便会自动或者说是默认的从 DS 中取值,
并且将取得的值作为段地址,因此,当 [BX] 为 0001H 时,CPU 会从 DS 中取得一个 1000H ,
由这两个一合成即可以得到正确的物理地址 1000H:0000H 。
最后还提醒一点,那就是 8086 CPU 不支持直接将一个数据送入段寄存器中,
也就是下面的做法是错误的:
MOV DS,1000H
- 8086 DS 和 ES 寄存器
- 寄存器中cs,ds,ss,es的区别
- DS, ES, SS, DI, SI, BP, SP, IP, FS 寄存器
- DS, ES, SS, DI, SI, BP, SP, IP, FS 寄存器
- 寄存器中cs,ds,ss,es的区别
- DS, ES, SS, DI, SI, BP, SP, IP, FS 寄存器
- DS, ES, SS, DI, SI, BP, SP, IP, FS 寄存器
- Linux BIOS启动代码DS与ES寄存器初始化分析
- DS, ES, SS, DI, SI, BP, SP, IP, FS 寄存器
- 8086汇编学习之DS寄存器、SS/SP寄存器
- 汇编语言bp寄存器和es寄存器有何用…
- CS、DS、SS、ES
- 8086CPU下使用DS寄存器的注意事项
- 通过ds寄存器操作内存
- 8086汇编学习之[BX],CX寄存器与loop指令,ES寄存器等
- 菜鸟学汇编004 DS寄存器
- 汇编寄存器(cs,ds)的区别
- cs,ds,ss,es?即cs,ds,ss,es的区别
- JavaWeb学习之Servlet的学习(一)
- Storm 安装
- js日期时间格式化
- 树状数组 讲解和题目集
- 当你的能力撑不起你野心的时候,就静下心来学习吧!
- 8086 DS 和 ES 寄存器
- 使用openwrt设置Guest Wifi网络
- flex布局
- 关于pymssql 连接SQLserver数据库的18456问题处理之一
- BZOJ2799/POI2012 Salaries
- 【罗兰のJava学习笔记】第二天,变量&运算符
- YII框架中表单验证出现Bad Request (#400)---Unable to verify your data submission的错误解决方法
- 中国现代军衔制度
- Maven构建SpringBoot项目