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

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

2018-9-10 18:22
3206
我在网上找了个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
答案:https://stackoverflow.com/a/49445670
最后于 2018-9-12 09:08 被sodarkbit编辑 ,原因:
2018-9-12 09:08
0
雪    币: 68
活跃值: (101)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
sodarkbit 答案:https://stackoverflow.com/a/49445670
使用unreal mode使得limit扩大到32位,再执行这段程序就可以了。unreal mode曾经是一项很流行的技术?https://bbs.csdn.net/topics/260066691 没有书提到啊,不过intel手册里有。
最后于 2018-9-19 00:38 被sodarkbit编辑 ,原因:
2018-9-17 16:05
0
游客
登录 | 注册 方可回帖
返回
//