8086地址 ffff:ffff 和 0:ffef 回绕问题

学汇编的孩子大概都疑惑过:8086CPU最大寻址为1MB = FFFFFH = FFFF:000F,可是为什么Debug中输入FFFF:FFFF合法而且有数据显示???

这就是8086CPU的地址回绕问题:

FFFF0   +   FFF0   =   10   FFE0

这样1最前面的1会出现溢出,从而实际地址应该是0FFE0

Dosbox:

上图证实了地址FFFF:FFF0回绕为0000:FFE0,那么为什么会产生地址回绕呢?

8086只有20根地址线,只能访问1M的地址空间。CPU寻址则按段+偏移的方式进行。16位段+16位偏移的可能的范围是0~0x10FFEF

(即0xFFFF0+0xFFFF),即1M+65520字节的范围。由于只有20根地址线,所以在对1M~1M+65520范围进行访问时,会发生“地址回绕”

的现象,就是说实际会访问到0~65520的地方。据说某个著名的/臭名昭著的软件利用了这个特点

另外:有的童鞋Debug并不会产生地址回绕,也就是上面两行显示数据不一致,这是因为

我们使用的DOS(或者是XP、WIN7 32下的CMD),它们都是打开A20地址线的,也就是说 -d   ffff:fff0其显示的已经是10FFE0的地址的内容了

从80286起由于CPU的寻址实际已经超过了1M的限制,MICROSOFT的DOS就使用了一些技术来使用大于1M的内存,比如扩展内存技术和扩充内存

技术。如果使用DOS 6.22 可以尝试不加载HIMEM.SYS 和EMM386.EXE,然后再使用DEBUG,就可以看到想要的地址循环效果了。

补充:为了保持完全的兼容性,IBM决定在PC
AT系统上加个逻辑,来模仿以上的回绕特征。他们的方法就是把A20和键盘控制器的

一个输出进行AND,这样来控制A20的打开和关闭。一开始时A20是被屏蔽的(总为0),直到系统软件去打开它。

时间: 2024-10-11 11:00:28

8086地址 ffff:ffff 和 0:ffef 回绕问题的相关文章

宽带IP地址等都为0的解决方案

今天介绍一个今天我所碰到的问题,当路由器直接重置后,关于路由器打开设置路由器网络IP地址等都为0的问题: 解决步骤: (1)首先连接上你所要进行设置的密码,点击浏览器,在地址栏中输入192.168.1.1,然后输入管理员密码,第一次登录自行设置密码 (2)设置好登录后,会显示如下页面: 首先点击运行状态进行,查看是否为上述情况,如果是进行第三步 (3)点击设置向导,点击下一步,进入到上网方式选择PPPoE的方式进行设置,然后点击下一步,输入上网的账号和口令.然后下一步设置上网的口令(就是你设置的

一个C类地址192.168.1.0划分5个子网,每个子网至少要容纳30台主机,如何规划?

C类地址要划分5个子网,因2^2<5<2^3,故子网掩码为24+3=27位:主机地址位是5位,每个子网可容纳最大主机数量为2^5-2=30:子网规划如下(可划分为8个子网,依题只用5个即可):192.168.1.0/27:子网地址192.168.1.0,广播地址192.168.1.31,可用地址范围为192.168.1.1~192.168.1.30:192.168.1.32/27:子网地址192.168.1.32,广播地址192.168.1.63,可用地址范围为192.168.1.33~192

通信协议之广播---recvfrom 放回客户端的ip地址第一次全为0.0.0.0

遇到一个很恶心的问题. while(1) { recvfrom(sockfd, readbuff, UDP_CMD_BUFF_LENGTH - 1, 0, (struct sockaddr *)&Glob_remot_88_port_add, &len); PRINT("[recevudp]len %d IP is %s\n", len, inet_ntoa(Glob_remot_88_port_add.sin_addr)); } 这个函数, 第一次接受打印出的发送方I

用nginx做了一下反向代理,得到的ip地址都是127.0.0.1

nginx反向代理配置时,一般会添加下面的配置: proxy_set_header Host $host;      proxy_set_header X-Real-IP $remote_addr;      proxy_set_header REMOTE-HOST $remote_addr;      proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; location / { proxy_pass http://127.0

Linux系统Centos查看IP地址,不显示IP地址或者显示127.0.0.1

1.桌面界面 右上角有个电脑的图标,鼠标悬停会显示no network connect 点击一下图标,选择连接的网络则ok 2.命令行界面 在命令行界面输入 vi  /etc/sysconfig/network-scripts/ifcfg-eth0 点击键盘的i或作a进入编辑模式 把ONBOOT改为yes 点击键盘Esc 然后到最后输入:wq,敲击回车保存退出 在命令行界面输入:service network restart(重启网络服务) 输入ifconfig查看IP地址 原文地址:https

FlashFXP 5.0.0官方中文破解版,附文件下载地址和破解码

FlashFXP 5.0.0官方中文破解版是一个功能强大的 FXP/FTP 软件,融合了一些其他优秀 FTP 软件的优点,如像 CuteFTP 一样可以比较文件夹,支持彩色文字显示:像 BpFTP 支持多文件夹选择文件,能够缓存文件夹:像 LeapFTP 一样的外观界面,甚至设计思路也差相仿佛.支持文件夹(带子文件夹)的文件传送.删除:支持上传.下载及第三方文件续传:可以跳过指定的文件类型,只传送需要的文件:可以自定义不同文件类型的显示颜色:可以缓存远端文件夹列表,支持FTP代理及 Socks

计算机网络-将C网192.168.25.0划分四个子网,计算每个子网的有效IP地址范围和对应网络掩码

首先计算子网掩码: 将256/4=64,主机块大小64 2的6次方=64 根据主机数量计算出掩码的最后一个字节为11000000,用十进制表示掩码为255.255.255.192 由于IP地址结尾全为0为网络地址:全为1为广播地址.两者都是不允许用作主机IP地址的. 因此,4个子网分为: 1> 192.168.25.1 -- 192.168.25.622> 192.168.25.65 -- 192.168.25.1263> 192.168.25.129 -- 192.168.25.190

Redis3.0集群crc16算法php客户端实现方法(php取得redis3.0集群中redis数据所在的redis分区插槽,并根据分区插槽取得分区所在redis服务器地址)

数据分区        Redis集群将数据分区后存储在多个节点上,即不同的分区存储在不同的节点上,每个节点可以存储多个分区.每个分区在Redis中也被称为"hash slot",Redis集群中总共规划了16384个分区. 例如:当集群中有3个节点时,节点A将包含0-5460分区,节点B将包含5461-10922分区,节点C将包含10923-16383分区. 每个key将会存储到一个唯一的分区中,每个分区其实就是一组key的集合,两者对应关系为:key的CRC16校验码%16384=

127.0.0.1和0.0.0.0地址的区别

在进行网络编程时,会将服务器的IP地址设置为127.0.0.1.然后绑定端口,开始监听.但是对于服务器来说,除了127.0.0.1,还有内网IP和公网IP,绑定本地的话只能局域网传输,所以,应该怎么绑定? 先复习一下IP类型: IP地址一共分为5类,即A-E,它们分类的依据是其net-id所占的字节长度以及网络号前几位. A类地址:网络号占1个字节.网络号的第一位固定为0. B类地址:网络号占2个字节.网络号的前两位固定为10. C类地址:网络号占3个字节.网络号的前三位固定位110. D类地址