![]() | 第9章 图形显示 | -245- | |||||||||||||||||||
loop3: next_dot: disp code |
mov mov lodsw xchg test push jz mov mov int inc shr pop dec jnz inc pop loop pop pop pop ret endp ends end |
cx,152 di,16 ah,al ax,bx ax next_dot ah,0ch al,2 10h cx bx,1 ax di loop3 dx cx loop2 di si bx main |
;汉字左上角的X坐标送入CX寄存器 ;处理16个Bit ;取得一个字 ;交换高低字节 ;测试"掩模"中指定的数位 ;暂存待测数据 ;若所测试的数位为0,转NEXT_DOT继续 ;画一个洋红色的点 ;X坐标加1,准备处理下一个数位 ;BX寄存器中的"掩模"右移1位 ;恢复AX寄存器中的待测数据 ;已处理了全部16个数位了吗? ;未处理完全部数位,转LOOP3继续 ;Y坐标加1,准备处理下一条线 ;恢复CX寄存器中的计数值 ;转LOOP2继续 ;恢复寄存器 ;返回主过程 |
||||||||||||||||||
这个程序和第三章的PROG4程序有一点相象,程序PROG4是利用AND指令进行按位测试工作的。实质上CPU执行TEST指令和执行AND指令是一样的,即把待测试的寄存器与"掩模"数据做一次"与"操作,根据结果设置标志位,但"与"之后的结果不保留。TEST与AND的关系类似于CMP与SUB的关系,将这样两个指令联合记忆效果不错。当然,也可以按以下规律记忆: (1)TEST指令后的源操作数为被测试数据,目的操作数为"掩模",需要测试哪几个数位,"掩模"中相应的数位就要置1。 (2)若被测试的数位都是0,那么ZF标志将被置1,指令"JZ"可以完成转移,反之如果被测数位中有一个不是0,ZF标志就会清0,指令"JNZ"可以完成转移。仔细观察"Z/NZ"与被测数位之间的关系可以很好地掌握TEST指令。 数据的分析看来不是很困难,那么如何获得字模数据呢?所有的汉字操作系统都带有标 |
|||||||||||||||||||||
Copyright © 2004-2015 Reanimator | www.cookmoon.org |