一段修改显存的代码,模拟器下运行和真机下运行效果完全不一样,为什么?

autocar23 2016-04-16 05:51:16
模拟器用的是QEMU
QEMU上的效果是这样子:


而在真机上却什么都不显示
有时候在某一个位置会显示一个ASCII码为6的字符

org 07c00h
call clean_screen

mov ax, 0b800h
mov es, ax
mov si, text
mov bx, 0

s: mov al, [si]
cmp al, 0
je s0
mov [es:bx], al
inc si
add bx, 2
jmp s

s0:
mov ah, 0
int 16h
cmp al, 'r'
jne s0

call reboot

clean_screen:
push ax
push bx
push cx
push es

mov ax, 0B800h
mov es, ax
mov bx, 0
mov cx, 80*25
mov al, ' '
clean_screen_s:
mov [es:bx], al
add bx, 2
loop clean_screen_s

pop es
pop cx
pop bx
pop ax

ret

reboot:
mov ax, 0ffffh
push ax
mov ax, 0
push ax
retf

text db 'FUCK OS!', 0
times 510-($-$$) db 0
dw 0xaa55

真机配置:
CPU :E3-1231V3
显卡 :技嘉 GIGABYTE GV-N970IXOC-4GD GTX970 1076MHZ/7010MHZ 4GB/265bit DDR5 PCI-E显卡
主板 :技嘉(GIGABYTE)B85M-D3H主板 (Intel B85/LGA 1150)
...全文
1965 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
赵4老师 2016-04-18
  • 打赏
  • 举报
回复
代码功能归根结底不是别人帮自己看或讲解或注释出来的;而是被自己静下心来花足够长的时间和精力亲自动手单步或设断点或对执行到某步获得的中间结果显示或写到日志文件中一步一步分析出来的。 提醒:再牛×的老师也无法代替学生自己领悟和上厕所! 推荐使用Turbo Debug bc++3.1 http://download.csdn.net/source/2805028
  • 打赏
  • 举报
回复
mov si, text这应该是lea si, text
autocar23 2016-04-16
  • 打赏
  • 举报
回复
好吧, 我把代码改成 mov al, 'F' mov [es:bx], al add bx, 2 mov al, 'U' mov [es:bx], al add bx, 2 mov al, 'C' mov [es:bx], al add bx, 2 mov al, 'K' mov [es:bx], al add bx, 2 这样子就可以了,看来是text段在被加载到0:7c00h之后被修改掉了 为什么?

21,458

社区成员

发帖
与我相关
我的任务
社区描述
汇编语言(Assembly Language)是任何一种用于电子计算机、微处理器、微控制器或其他可编程器件的低级语言,亦称为符号语言。
社区管理员
  • 汇编语言
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧