注册 登录
编程论坛 汇编论坛

[讨论]为何我的程序运行时是乱码?

wchx215 发布于 2006-10-29 17:57, 714 次点击

code segment
assume cs:code
start: mov ax,cs ;安装程序到软盘
mov es,ax
mov bx,offset os
mov ah,3
mov al,2
mov ch,0
mov cl,1
mov dh,0
mov dl,0
int 13h
mov ax,4c00h
int 21h

os: jmp short osstart ;任务程序
a db '1) reset pc '
b db '2) start system '
c db '3) clock '
d db '4) set clock '
e db 'please input:'

osstart: mov ax,cs ;显示字幕
mov ss,ax
mov sp,512
mov ds,ax


mov si,offset a
mov ax,0b800h
mov es,ax
mov di,160*10+32*2
mov cx,4
show:push cx
mov cx,16
s: mov al,ds:[si]
mov es:[di],al
add si,1
add di,2
loop s
add di,128
pop cx
loop show

mov cx,13 ;显示要输入的一行
s1:mov al,[si]
mov es:[di],al
add si,1
add di,2
loop s1

mov bh,0 ;置光标位置
mov dh,14
mov dl,45
mov ah,2
int 10h
stack1 db 512-($-offset os) dup(0)
code ends
end start
当系统从软盘启动时显示的是乱码,我实在想不出是什么原因?
当我把这程序改写一下,不当做操作系统时,能正常显示的。

4 回复
#2
wchx2152006-10-29 17:58
请高手帮帮忙呀!!!
#3
菜鸟上路2006-10-29 19:06

用软盘启动的话,应该不只有这些代码(程序开始应该是mov ax,code),应该有相关的*.IMG文件,虚拟机也需要的.

因为机器启动程序是要被加载到7C00H处的,所以mov ax,code语句就是让程序加载CODE段的内容,这样就不会显示乱码,否则首先加载7C00H处的内容,显示就是乱码.

#4
wchx2152006-10-29 22:02
首先谢谢你的回答。
启动时,不是计算机自动将软盘的内容加载至7c00h处,然后执行7c00h处吗?
还有我改了,把数据那部分放到后面。第一句变成mov ax,cs,还是不行呀!你能说具体些吗?

我的QQ是623575521,希望能加我!!!
希望能与你多交流!!!
#5
wchx2152006-10-29 22:13
哈哈!谢谢你哦!经过你的提醒,终于搞明白问题在哪里了!!!
我已经弄出来了,再次感谢3楼!!!
1