首页
社区
课程
招聘
[求助]调试出现了问题,求解答!
发表于: 2018-9-10 18:22 3357

[求助]调试出现了问题,求解答!

2018-9-10 18:22
3357
我在网上找了个C语言程序,作用是开机的时候显示字符“x”:

__asm__(".code16gcc\n");
void main() {
    char* video_memory = (char*) 0xb8000;
    *video_memory = 'X';
}

我把用gcc生成的elf的代码部分拷出来,用bochs调试。注意此时是bochs的模拟器是intel系列且能执行64位指令的,但是开机时处于实模式状态。


当执行到这条指令出现了问题,执行完这条指令时直接跳转到其它指令了,是不是产生了异常?



而当我把地址0xb8000改到0xFFFF时(16位的最大值),则顺利执行,指令没有发生跳转!即更改下面的红框里面的内容为ff ff 00 00再测试。




我猜想是不是虽然64位CPU,但是处于实模式下时,寻址的最大值还是必须完全按照实模式的特点,不能超过16位?
如果CPU是intel 8086,应该不支持0x66,0x67前缀吧?

[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课

最后于 2018-9-12 12:02 被sodarkbit编辑 ,原因:
上传的附件:
收藏
免费 0
支持
分享
最新回复 (2)
雪    币: 68
活跃值: (101)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
2018-9-12 09:08
0
雪    币: 68
活跃值: (101)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
sodarkbit 答案:0d7K9s2c8@1M7s2y4Q4x3@1q4Q4x3V1k6Q4x3V1k6K6N6r3q4U0K9$3!0$3k6i4u0X3L8r3!0%4i4K6u0W2j5$3!0E0i4K6u0r3j5g2)9J5c8U0b7&6y4o6b7#2y4U0M7H3
使用unreal mode使得limit扩大到32位,再执行这段程序就可以了。unreal mode曾经是一项很流行的技术?dd7K9s2c8@1M7s2y4Q4x3@1q4Q4x3V1k6Q4x3V1k6T1j5Y4y4Q4x3X3g2U0M7$3c8F1i4K6u0W2L8X3g2@1i4K6u0r3N6r3!0H3K9h3y4K6i4K6u0r3x3U0j5H3x3o6j5$3y4U0V1I4 没有书提到啊,不过intel手册里有。
最后于 2018-9-19 00:38 被sodarkbit编辑 ,原因:
2018-9-17 16:05
0
游客
登录 | 注册 方可回帖
返回