登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

DOS编程技术

讨论在纯DOS下的编程技术

 
 
 

日志

 
 
关于我

1984年大学毕业,1985年底有机会开始接触PC机,1986年开始在PC机上做开发工作,曾接触过MS-DOS、CP/M、UNIX、VMS、LINUX、iRMX等众多的操作系统并在上面从事技术开发,擅长做底层与硬件相关的软件开发,目前主要在DOS和LINUX平台下工作,主要从事软件,在硬件开发上也有一定造诣,亦有在8051系列、6502系列(凌阳)、z80系列、ARM、X86等各类平台下开发软硬件的经历。更详细情况可以参考http://resume.whowin.net

早期CPU的点滴区别  

2009-02-03 14:41:10|  分类: 杂七杂八 |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |

    近日从以前的书籍里找到了一张以前记录的笔记,发现了一些早已被我淡忘的关于早期CPU的细节,或者永远也用不上了,但还是决定记录下来,或者......

  • 以前的8086/8088 CPU上的一个小BUG
        我们都知道,SP寄存器是堆栈的指针,当我们执行一条push(在8086/8088上)指令后,SP寄存器的值会自动减2,可是有没有想过,如果我们执行push sp这条指令的话,应该是先把SP - 2再压入堆栈,还是把SP压入堆栈,再把SP - 2呢?大家可以在你现在的机器上试试,当然应该是先把SP压入堆栈,再把SP - 2喽。
        可以在以前的8086/8088上偏偏就出现了这么个BUG,执行push bp指令时,CPU居然把SP -2后才把SP的值压入堆栈,其实即便这样如果再pop sp是能够修正过来也无妨,可是偏偏没有修正,所以,在以前的8086/8088上如果执行push sp后再执行pop sp的话,SP的值和原来的就不同了,幸好很难得使用push sp这种指令。哈哈
  • 在偏移为offffh的地方写入一个字,会怎样呢?
        在实模式下,每个分段为64K,最大偏移地址是0ffffh,有没有人想过,如果有如下的指令序列会出现什么事情?
        (假定此时ds=1234h)
        mov si,0ffffh
        mov ax,0b1c2h
        mov [si],ax
        我想问的是,在执行完这三条指令之后,肯定c2h会放到1234h:0ffffh这个这个地方,但是,b1h会放到那里呢?是放在1234h:0这个地方,还是放在2234h:0(1234h加10000h偏移)这个地方呢?
        在Intel的CPU上,在一点上居然也是有区别的,在8086上,是第一种请况,上面说的b1h会放在1234h:0这个地方,但是从80186开始,就变成放在2234h:0这个地方了。

    要说明的是,在写之前,我试图验证一下这个早已不怎么记得的事,但很是遗憾,没有找到8086的机器,只得作罢了,如果那位读者还能找到8086的机器,不妨试一下,最好能告诉我一下结果,谢谢!


 

  评论这张
 
阅读(2290)| 评论(3)

历史上的今天

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2018