目录 上一页 下一页 下一章

-124- PC机汇编语言实战精解





outloop:







end_out:


main
code

mov
mov
mov
mov

lodsb
or
jz
mov
int

jmp

mov
int
endp
ends
end
bh,0
bl,00010100b
cx,1
si,offset msg


al,al
end_out
ah,09h
10h

outloop

ah,4ch
21h


main
;显示页号送入BH寄存器
;属性字节送入BL寄存器
;显示一个字符
;SI寄存器指向字符串MSG

;从字符串中取得一个字符
;已到字符串结尾了吗?
;已到结尾,转END_OUT
;利用10H中断的09H功能
;输出AL寄存器中的字符以及BL中的属性

;转至OUTLOOP继续输出下一个字符

;结束进程




  表面看来这个程序是使用0EH功能的翻版,应该没有问题,可运行这个程序后除了能看到一个蓝底红色的句号外并没有看到任何文字,这就是09H功能没有移动光标的结果。其实每个字符都被显示了,只不过它们都显示在同一个地方,所以除了最后的一个句号外我们看不到其它的文字。我们可以在指令"INT 10H"后面插入一个"等待":
  ;**等待**********************
      mov   ah,0    ;*
      int   16h    ;*
  ;****************************
  然后运行这个程序,可以看到字符一个个的显示在同一个位置,光标始终不移动。BIOS特别提供了一个功能调用用于移动光标:
功能号:02H
用 途:设置光标位置
参 数:DH=行号(0-24)
    DL=列号(0-79)
    BH=显示页号
调 用:INT 10H
返 回:无
  程序DISPSTR1.ASM就是应用了这个功能修改之后的结果:
DISPSTR1.ASM
data

msg
segment
assume
db

ds:data
'Take care,I want to sleep.',0

Copyright © 2004-2015 Reanimator www.cookmoon.org

目录 上一页 下一页 下一章