汇编语言程序设计(四)
2007-04-25 09:30:00 来源:WEB开发网游标移动值: BWMOV DW ? ;依当前功能先 ;设定
视框上限: BWTOP DW ? ;?= 设定值
视框下限: BWBTM DW ? ;?= 设定值
视框左限: BWLFT DW ? ;?= 设定值
视框右限: BWRGT DW ? ;?= 设定值
右界边际值: BWADDX DW ? ;?= 字或图宽
..
程式入口: CHKKEY DW CK47; 向左上移
DW CK48; 向上移
DW CK49; 向右上移
DW CRET; 无效
DW CK4B; 向左移
DW CRET; 无效
DW CK4D; 向右移
DW CRET; 无效
DW CK4F; 向左下移
DW CK50; 向下移
DW CK51; 向右下移
AX = 输入游标键扫瞄码
BP = 萤幕X向移动值
DX = 萤幕Y向移动值
ES:DI=萤幕记忆区位址
主流程: ( 已知 AL=0 AH=Scan-Code )
1:KEYIN:
2: SUB AH,47H ; =HOME
3: JB KEYRET ; 无效
4: CMP AH,11 ; >扫瞄码范围
5: JA KEYRET
6: MOV BL,AH
7: SUB BH,BH
8: SHL BX,1
9: MOV AX,BWMOV ; 移动值
10: JMP CHKKEY[BX] ; 进入各处理程式
..
40:CK47:
41: SUB DX,AX ; Y 向
42:CK4B:
43: NEG AX ; 向左为负
44:CK49:
45: ADD BP,AX ; X 向
46: JMP SHORT CKFUN
47:CK4D:
48: SUB DX,AX
49: JMP CK49
50:CK51:
51: ADD DX,AX
52: JMP CK49
53:CK48:
54: NEG AX ; 向上为负
55:CK50:
56: ADD DX,AX
57:CKFUN: ; 用变数观念检查「视窗」
58: CMP DX,BWTOP ; 超出上限?
59: JNS CKFUN1
60: MOV DX,BWTOP ; 上限值
61:CKFUN1:
62: CMP DX,BWBTM ; 超出下限?
63: JBE CKFUN2
64: MOV DX,BWBTM ; 下限值
65:CKFUN2:
66: CMP BP,BWLFT ; 超出左限?
67: JNS CKFUN3
68: MOV BP,BWLFT ; 左限值
69:CKFUN3:
70: PUSH BP
71: ADD BP,BWADDX ; 右限+边际值再比
72: CMP BP,BWRGT ; 超出右限?
73: POP BP
74: JBE CKFUN4
75: MOV BP,BWRGT ; 右限值
76:CKFUN4:
77: ..
CKFUN4以下为功能处理,由前面的功能参数决定。
用这种方法,多种功能可以共用一个入口,程式精简且速度快。
更多精彩
赞助商链接