第五节程式写作 说了不少,才真正到了写作程式的时候,运用指令就相当于写程式。只是,在运用指令前,一定要充份了解一应相关的课题。否则,应用指令如同和稀泥一般,堆砌出一团可以运作的成品,我个人不认为那能叫做「写程式」,充其量只是涂鸦罢了。 一、暂存器安排 因为暂存器不足,必须事先安排妥当,才能有效应用。 再以前例说明,需要安排的因素有: 1,字形大小:此项有两个变数需要安排,一是横向之始、终值;另一是纵向之始、终值。因为在设计之初,我已经考虑到极限值的问题,将上限定在256点,恰在一个字元的范围内。所以我们可以把横向始值放在暂存器BL中,终值放在BH,而纵向始值放在DL,终值放进DH。 2,笔画粗细:有四个变数值,放在CL中,并使CH为0。 3,字码送入:在始存器SI中。 4,字形输出:在终存器DI中,根据BX及DX值求得。 二、程式规格 第二章第四节已介绍过,在此从略。 三、程式及说明 程式部份-说明部份 1:;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; 2:;功能:仓颉表格码绘图用。";"后,皆为注解。; 3:;输入参数:DS:SI=字码(1-2码),=0为终止。; 4:;BL=X1BH=X2; 5:;DL=Y1DH=Y2; 6:;CX=笔画粗细值。; 7:;输出结果:点阵在ES:DI中。; 8:;破坏暂存器:全部。; 9:;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; 10:CCODIN:;字码输入 11:LODSB;取一码以作图 12:MOVCL,AL;取粗细值 13:INCAX;调整码值 14:ANDAX,001EH;24个有效双数值 15:PUSHBX;保留后用 16:PUSHDX;同上 17:MOVSI,AX;AX不能间接定址 18:ANDCL,07H;有效值 19:CALLCCODTB[SI];假设CS=DS 20:POPDX 21:POPBX 22:JMPCCODIN;本程式主流程 23:CCOD00:;CODe为码 24:ADDSP,6;本程式为子程序 25:RET;码为0执行完毕 26:CCOD06:;06为E,F 27:SHLCL,1;E,F粗细值加倍 28:CLFT02:;LeFT指左横 29:ADDBH,BL;02为输入码A,B 30:SHRBH,1;左起BH中点值 31:JMPCHOR00;HORizon画横 32:CCOD08:;08为G,H 33:SHLCL,1 34:CLEF04:;04为C,D 35:ADDDH,DL 36:SHRDH,1;上起DH为中点值 37:JMPCVER00;VERtical画直 38:CCOD0E: 39:SHLCL,1 40:CRGT0A:;RiGhT指右横 41:ADDBL,BH;0A为码I,J |