-
-
[旧帖] [求助]16*16点阵显示汉字的程序,高手帮忙! 0.00雪花
-
发表于: 2010-5-22 09:34 980
-
显示大字的一个子程序,各位热心大侠帮我看下,为什么是显示一竖线?
pusha
push es
push ds
jmp next
buffer
dw 0300h,0300h,0300h,0302h,0fffeh,0300h,0300h,0300h,0300h,0380h,0640h,
dw 0c20h,1810h,1018h,200eh,0c004h
next:
mov ax,12h
INT 10H
mov cx,16 ;存放16个字
mov si,offset buffer
mov dx,2 ;汉字左上角开始的Y坐标
loop1:
push cx
mov bx,8000h ;用来与BUFFER里的字进行与操作
mov cx,3 ;X坐标
mov di,16 ;处理一个dw
mov ax,word ptr ds:[si]
loop2:
push ax
push bx
test ax,bx ;对ax的各个位测试,为1时画点,否则下一步
jz next_dot
mov bh,0 ;画点
mov ah,0ch
mov al,0fh
int 10h
next_dot:
pop bx
add cx,1 ;列加1
shr bx,1 ;用于测试的BX右移一位
pop ax
dec di ;一个dw的16位减1
jz next_2
loop loop2
next_2:
add dx,1 ;行加1
add si,2 ;处理下一个dw
pop cx
dec cx
jz exit
loop loop1
exit:
pop ds
pop es
popa
ret
后来我又把程序的buffer改为
buffer dw 0ffffh
按照我的意思是画一横线的,可是只画出一个点来。为什么??急求!
还有这个需要给分吗?刚来不太清楚,如果需要的,下次一定补回!见谅
pusha
push es
push ds
jmp next
buffer
dw 0300h,0300h,0300h,0302h,0fffeh,0300h,0300h,0300h,0300h,0380h,0640h,
dw 0c20h,1810h,1018h,200eh,0c004h
next:
mov ax,12h
INT 10H
mov cx,16 ;存放16个字
mov si,offset buffer
mov dx,2 ;汉字左上角开始的Y坐标
loop1:
push cx
mov bx,8000h ;用来与BUFFER里的字进行与操作
mov cx,3 ;X坐标
mov di,16 ;处理一个dw
mov ax,word ptr ds:[si]
loop2:
push ax
push bx
test ax,bx ;对ax的各个位测试,为1时画点,否则下一步
jz next_dot
mov bh,0 ;画点
mov ah,0ch
mov al,0fh
int 10h
next_dot:
pop bx
add cx,1 ;列加1
shr bx,1 ;用于测试的BX右移一位
pop ax
dec di ;一个dw的16位减1
jz next_2
loop loop2
next_2:
add dx,1 ;行加1
add si,2 ;处理下一个dw
pop cx
dec cx
jz exit
loop loop1
exit:
pop ds
pop es
popa
ret
后来我又把程序的buffer改为
buffer dw 0ffffh
按照我的意思是画一横线的,可是只画出一个点来。为什么??急求!
还有这个需要给分吗?刚来不太清楚,如果需要的,下次一定补回!见谅
赞赏
他的文章
- [求助]如何通过驱动程序获取到CR3里的内容 2010
- [求助]进程页表的获取 1745
- [求助]通过PE文件,如何获取其调用的DLL的完整路径?? 1493
- [求助]进程CREATE_SUSPEND后无法获取到模块信息 1517
- [求助]如何调试DLL 1465
看原图
赞赏
雪币:
留言: