跪求爷爷奶奶们解释下下面这段文字里的公式是河意
【dos下是80*25的显示。基址是b800:0000每个字符占两个字节(一个要显示的字符,一个是颜色,颜色在高位)要显示的位置是x,y则首字母应该放在=base+y*80*2+x*2】这是我在百度提问如何计算屏幕的中间位置的,它的回答都能看懂可就是最后的公式看不懂 1行是80列,从0~79,也就是说1行输出的内容加上颜色信息是160字节,只要这个明白了就可以看懂了,理解不了也不用再去纠结它了,谁还在DOS下编程,过去的就让它过去吧 topcookie 发表于 2011-10-9 18:13
1行是80列,从0~79,也就是说1行输出的内容加上颜色信息是160字节,只要这个明白了就可以看懂了,理解不了也 ...
base=基地址 也就是B800H y=页数 那X=什么 本帖最后由 风扫地 于 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:45 编辑
X,Y定义并不能单纯看成行或列,那只是我们想像出来的,每1行输出的内容加上颜色信息最多就是160字节,超过160就要排到下1行,1行是80列,列从0~79,行是从0~24,你先不要看公式,基地址是B800H,在第1行第1列输出你会怎么作 ,当然是基地址+160+2,为什么加160,因为第0行占了160字节,为什么再加2,因为第0列占2字节 topcookie 发表于 2011-10-9 18:37
X,Y定义并不能单纯看成行或列,那只是我们想像出来的,每1行输出的内容加上颜色信息最多就是160字节,超过 ...
那比如我 db ‘haonan’ 它要在中间位置显示是不是 0B8000h +12*160+(160-6)/2 这样正好在屏幕的中间位置了? 本帖最后由 topcookie 于 2011-10-9 19:36 编辑
就是这样的,最底层并不关心是第几行第几列,只是线性顺序排放的,一行放不下了就放到下一行
另外你的标题太夸张了,给搞汇编的太跌价了,呵呵,玩笑了
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]