麻烦解释一下这段汇编程序

来源:百度知道 编辑:UC知道 时间:2024/09/20 20:52:17
逐个解释吧,把状态说清楚一些,本人菜鸟~ 最后别忘了说一下这段代码的运行结果是什么样子,3q

void ClearWindow(BYTE Left, BYTE Top, BYTE Right, BYTE Bottom,BYTE Char, BYTE Colour)
{
asm{
mov ax,0b800h
mov es,ax

mov al,Top
mov bl,80
mul bl

mov dh,0
mov dl,Left
add ax,dx

mov cl,Right
sub bl,cl
mov bh,0
add dx,bx

shl ax,1
shl dx,1
mov di,ax

mov bl,Bottom
sub bl,Top
}
orz:
asm{
mov al,Right
mov ah,Left
mov cl,al
sub cl,ah
mov ch,0

mov al,Cha

//这应该是一个刷新窗口的函数
void ClearWindow(BYTE Left, BYTE Top, BYTE Right, BYTE Bottom,BYTE Char, BYTE Colour)
{
asm{
mov ax,0b800h //先定义显示缓冲区的段地址
mov es,ax

mov al,Top //取窗口的顶部位置
mov bl,80 //乘以80,因每行是80个字符
mul bl //得到行地址,存放在ax中

mov dh,0 //高8位清0
mov dl,Left //取窗口左边位置,得到列地址
add ax,dx //列地址加到行地址中,得到输出窗口的首地址

mov cl,Right //取窗口右边位置
sub bl,cl //用80减它,得到列的位置
mov bh,0 //高位清0
add dx,bx //窗口右边列地址存入dx中.

shl ax,1 //起始地址左移1位,相当于乘以2
shl dx,1 //窗口右边列地址左移1位,同上
mov di,ax //起始地址放入di中

mov bl,Bottom //窗口底部位置
sub bl,Top //底减去顶,得到底部的坐标地址
}
orz:
asm{
mov al,Right //右位置
mov ah,Left //窗口左位置
mov cl,al
sub cl,ah //右减去左,得到右边的坐标地址
mov ch,0

mov al,Char //取字符,用来刷新窗口的字符值.
mov ah,Colour //取字符属性,即颜色

cld //置1,正向传输
rep stosw //字传输,从ds:si至es:di,即输出到窗口,直到cx为0
add di,dx //这应该是下一行?

dec bl //bl减1
jnz orz