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

嘿嘿,和C语言里面的goto(x,y)+显示字符 差不多的功能

zhu224039 发布于 2012-10-13 04:25, 1131 次点击
程序代码:
date segment
    db 'GAO SHU WO NI SHI BU SHI CHU NAN HAO MA?','$'
date ends
code segment
assume cs:code,ds:date
start: mov ax,date
       mov ds,ax
       mov si,0

       mov dh,20   ;屏幕显示的行号
       mov dl,18   ;屏幕显示的列号
       mov cl,2    ;字符的显示颜色
       call show_str
       mov ax,4c00h
       int 21h

show_str:dec dh
         mov al,160  ;定位屏幕的输出位置公式 x为行号 y为列号  输出位置内存偏移地址 f(x,y)=x*160+2y
         mul dh
         mov bx,ax
         mov al,2
         mul dl
         add ax,bx      ;ax里面存放的是屏幕最终定位的内存偏移地址
         mov bx,0b800h   ;显存I/O地址
         mov es,bx     
         mov di,ax
         mov ah,cl  
   
      s: mov al,[si]
         cmp al,'$'
         jz over
         mov es:[di],ax
         inc si
         add di,2
         jmp s
   over: ret
code ends
     end start
只有本站会员才能查看附件,请 登录


[ 本帖最后由 zhu224039 于 2012-10-13 04:34 编辑 ]
8 回复
#2
TonyDeng2012-10-13 11:41
直接写屏,在新系统中是无法顺利运行的,除非你永远待在那个虚拟环境中。
#3
zhu2240392012-10-13 11:47
回复 2楼 TonyDeng
我知道 这个又是保护模式,现在我想弄清楚的是  全局描述符表  放在哪的,怎么修改他 ,把自己写的程序 搞成全局描述符表里 具有0级特权的 嘿嘿
#4
TonyDeng2012-10-13 11:52
0b800h,是显示卡文本模式的入口地址,硬件规定的(不同行数和列数的文本模式,计算位置的公式也会变动,不过简单点,只是二维表格那样的定位而已)。类似地,不同图形模式下的显示内存入口地址也不同,当显示卡支持的图形模式不同于标准的320*200、640*480、800*600时(这些是EGA/VGA标准图形模式),入口也不一样。入口地址是显示卡驱动程序告诉操作系统的,你也只能查阅驱动程序资料来获得那些地址。至于把数据写在程序中的什么地方,自己考虑。

[ 本帖最后由 TonyDeng 于 2012-10-13 11:56 编辑 ]
#5
newdos2012-10-13 12:46
EGA/VGA 最高只支持640*480。EGA/VGA 图形模式0a0000H,统一的地址,与操作系统无关。
#6
zhu2240392012-10-13 13:41
回复 4楼 TonyDeng
大牛们,作为牛仔怎么才能快速成为大牛呢
迷茫的一塌糊涂

莫非 我得去学习 写驱动去?
#7
TonyDeng2012-10-13 13:44
你需要的是相关的东西的资料,特别是人家公布的技术文档,而不钻语言,这些东西与语言无关的。
#8
zhu2240392012-10-13 14:00
回复 7楼 TonyDeng
恩,要得
#9
有容就大2012-10-13 14:08
目前就知道个0b800h 也不知道为什么是他 他还有没有兄弟 反正就用他
1