为什么在引导区里面不能显示字符,而用debug调试的时候却可以呢?

superease 2001-06-09 02:50:00
我的程序是这样的:
用debug L 100 2 0 1 看
XXXX:0100 JMP 0280
XXXX:0280 MOV AX,CS
MOV DS,AX
MOV SI,02C1 (要显示的字符首地址)
STI
MOV CX,1B (字符个数)
c1: PUSH CX
MOV AH,9
MOV BX,0035
LODSB
INT 10H
然后光标进一
pop cx
loop c1
我怀疑是lodsb的时候ds:[si】没有放到al中,所以没有显示,但是
我已经用了cs--->ds了,为什么呢?(而且尽管没有显示字符但
可以通过改变bl的值来改变字符底色。)请赐教。
...全文
66 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
Areslee 2001-06-11
  • 打赏
  • 举报
回复
跳转指令使用相对地址,没有问题,问题就在那个MOV SI,2C1上面。
zhangcc99 2001-06-10
  • 打赏
  • 举报
回复
我大概明白你的情况了!
PC计算机把引导记录加在0:7C00处,所以你的程序调入内存不能用xxxx:0100这个地址,
你用L 100 2 0 1就错了,应该L 7C00 2 0 1,你要把你的程序加载在xxxx:7c00处试,
MOV SI,02C1要改为: MOV SI,01C1+7c00
当然了,你的第一条指令可能也不对,280就有问题了。就这意思。看看PC机硬件的书,
或DOS、WINDOWS的启动过程,你就明白了。不过别编病毒啊哥们!
superease 2001-06-10
  • 打赏
  • 举报
回复
但是在debug里不能用offset呀
zhangcc99 2001-06-09
  • 打赏
  • 举报
回复
试一下这个吧:
.

MOV SI,OFFSET BUFFER2
CALL DISPLAY
.
DISPLAY PROC NEAR
L5: LODSB
CMP AL,00h
JZ RETURN
PUSH SI
MOV BX,0007h
MOV AH,0Eh
INT 10h
POP SI
JMP L5
RETURN: RET
.
BUFFER1 DB 'Boot from Block 1...',Lf,Cr,0

21,458

社区成员

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

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