h18755 发表于 2011-10-9 17:31:20

跪求爷爷奶奶们解释下下面这段文字里的公式是河意

【dos下是80*25的显示。基址是b800:0000每个字符占两个字节(一个要显示的字符,一个是颜色,颜色在高位)要显示的位置是x,y则首字母应该放在=base+y*80*2+x*2】


这是我在百度提问如何计算屏幕的中间位置的,它的回答都能看懂可就是最后的公式看不懂

topcookie 发表于 2011-10-9 18:13:56

1行是80列,从0~79,也就是说1行输出的内容加上颜色信息是160字节,只要这个明白了就可以看懂了,理解不了也不用再去纠结它了,谁还在DOS下编程,过去的就让它过去吧

h18755 发表于 2011-10-9 18:28:56

topcookie 发表于 2011-10-9 18:13
1行是80列,从0~79,也就是说1行输出的内容加上颜色信息是160字节,只要这个明白了就可以看懂了,理解不了也 ...

base=基地址 也就是B800H y=页数 那X=什么

风扫地 发表于 2011-10-9 18:33:46

本帖最后由 风扫地 于 2011-10-9 18:37 编辑

h18755 发表于 2011-10-9 18:28 static/image/common/back.gif
base=基地址 也就是B800H y=页数 那X=什么
y是行数吧。。X是列数吧。。


每行80个字符。一个字符的显示需要由显示内容(1个字节)和显示方式(1个字节)两个属性所以一行就要80×2
至于列数   就是 2*x
所以字符应该   base +160*行数+2*列数   其中base   0B8000H ..化为段地址就是0B800H了。

topcookie 发表于 2011-10-9 18:37:14

本帖最后由 topcookie 于 2011-10-9 18:45 编辑

X,Y定义并不能单纯看成行或列,那只是我们想像出来的,每1行输出的内容加上颜色信息最多就是160字节,超过160就要排到下1行,1行是80列,列从0~79,行是从0~24,你先不要看公式,基地址是B800H,在第1行第1列输出你会怎么作 ,当然是基地址+160+2,为什么加160,因为第0行占了160字节,为什么再加2,因为第0列占2字节

h18755 发表于 2011-10-9 18:55:39

topcookie 发表于 2011-10-9 18:37
X,Y定义并不能单纯看成行或列,那只是我们想像出来的,每1行输出的内容加上颜色信息最多就是160字节,超过 ...

那比如我 db ‘haonan’ 它要在中间位置显示是不是 0B8000h +12*160+(160-6)/2 这样正好在屏幕的中间位置了?

topcookie 发表于 2011-10-9 19:33:51

本帖最后由 topcookie 于 2011-10-9 19:36 编辑

就是这样的,最底层并不关心是第几行第几列,只是线性顺序排放的,一行放不下了就放到下一行
另外你的标题太夸张了,给搞汇编的太跌价了,呵呵,玩笑了

h18755 发表于 2011-10-9 19:58:05

topcookie 发表于 2011-10-9 19:33
就是这样的,最底层并不关心是第几行第几列,只是线性顺序排放的,一行放不下了就放到下一行
另外你的标题 ...

assume ds:bbb,cs:ooo
bbb segment
db ‘haonan’
bbb ends

ooo segment

start:   mov ax,bbb
         mov ds,ax
         mov si,0
         mov ax,0b800h
         mov es,ax
         mov di,12*160+(160-6)/2h
         mov cx,6
loops:mov al,
         mov ,al
         inc si
         add di,2
         loop loops
      mov ah,4ch
      mov al,0
      int 21h
   ooo ends
end start

这对吗大师??
页: [1]
查看完整版本: 跪求爷爷奶奶们解释下下面这段文字里的公式是河意