汇编 光标轨迹程序求救

汇编 光标轨迹程序求救,第1张

因为b800:0000显示屏幕缓冲区的内容

在文本方式下,B800:0000开始的地址保存着屏幕上每个字符位置的值。在文本方式下,屏幕被分为80 X 25。每个位置有两个值,一个值是ASCII字符,一个值是该ASCII的属性值(主要是颜色)。所以一个屏幕共有80X25X2=400个字符。

也就是说奇数偏移地址保存的是字符的属性值,偶数偏移地址保存字符ASCII码值,显示某一行内存地址范围为 160*CH ---160*CH+79*2+1,如果cl的值超过

50H,或者等于它(行不变情况下),地址保存的是下一行字符ASCII值和属性值

如果在行ch不变情况下,cl越过0边界,cl变成FF,

rol bl,1 指令不能使它乘2的效果,由于最高位是1,每次cl减一后循环左移末位都有1

使mov es:[v_buff+bx],al中bx的值变为奇数偏移量,之前未超边界时cl都不会超过50H,最高位是0,rol bl,1 指令使bl乘2,变为偶数,具有偶偏移量

每次把block值赋值给偶地址,也就是ASCII值,屏幕出现空白,而超出列边界后

修改

求出的BX的值是奇数偏移地址,修改字符属性值,值为DBH,颜色发生变化(而原先属性值为70H),若再经过原先修改的空白区(字符ASCII为DBH,属性为70H)

字符ASCII和属性值都修改为DBH,又是另一种颜色!

另外,楼主所说的光标指的是什么?

光标始终都在0行0列(就是输入的光标),可能你表达有错误,程序界面之所以会变化,只是修改了

b800:0000 地址的值而已,通过偏移量BX修改,不要被眼睛看到的所误导...

汇编语言将光标移动到指定的位置可以调用BIOS中断INT 10h,输出显示可以调用DOS功能INT 21H。程序示例如下:

data segment

Total db '中国龙$'

data ends

code segment

assume cs:code,ds:data

main proc far

start:

mov ax,data

mov ds,ax

mov ah,02h

mov dx,0A10h设定光标到第10行16列

int 10h

mov dx,offset Total

mov ah,09h显示字符串

int 21h

mov ah,4ch

int 21h

ret

main endp


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/12199762.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-21
下一篇 2023-05-21

发表评论

登录后才能评论

评论列表(0条)

保存