菜单设计(成功实现全部焦点控制),求救,跳不出来!●●●●●

x0s0z0 2009-09-07 06:28:32
;菜单设计(成功实现全部焦点控制,但上边届未控制好)●●我们应当像法国人拥有自己的汇编器!masm具有我们未知的命令,所以微软可为所欲为地
;设计,我们则不行,总遇到不能完成任务的情况。会自己设计virtual pc,才算是设计自己的操作系统。
data segment
ALT=00001000B
L=60
H=20
L2=56
H2=16
produ1 dw 1 dup(0)
produ2 dw 1 dup(0)
produ3 db 1 dup(0)
produ4 db 1 dup(0)
jiaodian db 1 dup(0);当前焦点位置纪录
data ends
code segment
assume cs:code,ds:data
start:
mov ax,data
mov ds,ax

mov bx,505fh
mov ax,4f02h
int 10h ;显示模式

;画窗口边框
mov si,1
mov bx,2
mov produ1,636
add produ1,bx
mov produ2,476
add produ2,si
call brick
;●横眉●冷对千夫指
mov si,3
mov bx,4
mov cx,6
lop0:push cx
mov produ1,L
add produ1,bx
mov produ2,H
add produ2,si
call brick
add bx,62
pop cx
loop lop0

;●列向
mov bp,0
mov di,0
mov jiaodian,6
mov bx,4;●决定起点
try_again:mov ah,2
int 16h
test al,ALT
jne shift_to_left_or_right
jmp try_again
shift_to_left_or_right:;●画焦点列●
mov produ1,L;●
add produ1,bx
mov si,25
mov produ2,H
add produ2,si
call brick
mov produ1,L;●
add produ1,bx
mov si,46
mov produ2,H
add produ2,si
call brick
mov produ1,L;●
add produ1,bx
mov si,67
mov produ2,H
add produ2,si
call brick
mov produ1,L;●
add produ1,bx
mov si,88
mov produ2,H
add produ2,si
call brick
mov produ1,L;●
add produ1,bx
mov si,109
mov produ2,H
add produ2,si
call brick
add bx,2;●决定起点--画横眉焦点框---此加2,后又减2,否则错!
mov produ1,L2
add produ1,bx
mov si,5
mov produ2,H2
add produ2,si
call brick3
sub bx,2;-------
try_again2:MOV AH,0;●接受一个键,0会等按键,1不会等
INT 16H
cmp ah,077;●;●;●;●;●075是左方向键,077是右方向键,网上找到的对照表把此两个搞反了!●;●;●;●;●
je shift_to_left_or_right2
cmp ah,075
je shift_to_left_or_right2
cmp ah,080
je jiao1;----je这错东西比jmp跳得不远啊!
cmp ah,072
je jiao3
cmp ah,0dh
je exit
jmp try_again2
shift_to_left_or_right2:mov produ4,ah;●擦掉过时列●
mov produ1,L;●
add produ1,bx
mov si,25
mov produ2,H
add produ2,si
call brick2
mov produ1,L;●
add produ1,bx
mov si,46
mov produ2,H
add produ2,si
call brick2
jmp ok9
exit:;jmp exit5;+++++++++++++++++++++?●●●●●求救,跳不出来!
ok9:
mov produ1,L;●
add produ1,bx
mov si,67
mov produ2,H
add produ2,si
call brick2

jmp ok4
jiao1:jmp jiao2
ok4:mov produ1,L;●
add produ1,bx
mov si,88
mov produ2,H
exit5:
add produ2,si
call brick2
jmp ok5
jiao3:jmp jiao4
ok5:
mov produ1,L;●
add produ1,bx
mov si,109
mov produ2,H
add produ2,si
call brick2

add bx,2;●决定起点----擦横眉焦点框---此加2,后又减2,否则错!
mov produ1,L2
add produ1,bx
mov si,5
mov produ2,H2
add produ2,si
call brick2

mov produ1,L2;●擦第一行
add produ1,bx
mov si,27
mov produ2,H2
add produ2,si
call brick2

mov produ1,L2;●擦第二行
add produ1,bx
mov si,48
mov produ2,H2
add produ2,si
call brick2
mov produ1,L2;●擦第三行
add produ1,bx
mov si,69
mov produ2,H2
add produ2,si
call brick2

mov produ1,L2;●擦第四行
add produ1,bx
mov si,90
mov produ2,H2
add produ2,si
call brick2
mov produ1,L2;●擦第五行
add produ1,bx
mov si,111
mov produ2,H2
add produ2,si
call brick2
sub bx,2;-------

cmp produ4,077
je ok
cmp bx,5
jb leftstop
sub bx,62;此句曾紧跟在je ok后,导致限制越左边界功能无效
dec bp;●先记录水平坐标,目前未用,后要用于对应内部功能模块;●●●●●;●●●●●
jmp shift_to_left_or_right
leftstop:mov bx,4
jmp shift_to_left_or_right
ok:add bx,62
inc bp
cmp bx,314;移动6次后不许再右移
jg rightstop
jmp shift_to_left_or_right
rightstop:mov bx,314
jmp shift_to_left_or_right

jiao2:;每按一次●下●方向键,先擦焦点框。
add bx,2;●擦焦点框
mov produ1,L2
add produ1,bx
mov si,jiaodian
mov produ2,H2
add produ2,si
call brick2;---------
inc di
cmp di,5;怪胎,用di控制列长度才起作用,直接用jiaodian2比较就不起作用!
jg ok2;●●●●●想用di作30个焦点编号●di控制列bp控制行
;●画焦点框
add jiaodian,21;下移一个框的高度
jmp ok3
ok2:mov jiaodian,111
ok3:mov produ1,L2
add produ1,bx
mov si,jiaodian
mov produ2,H2
add produ2,si
call brick3
sub bx,2
jmp try_again2
jiao4:;每按一次●上●方向键,移动一个框的高度。
dec di
cmp di,1;怪胎,用di控制列长度才起作用,直接用jiaodian2比较就不起作用!
jb ok6;●●●●●想用di作30个焦点编号●●●●●
add bx,2;●擦焦点框
jmp ok7
ok6:mov di,1;恢复边界值
add bx,2
mov jiaodian,27;此值由6改为27后就控制好上边界了。●●●很不稳定!本来试很久没错,过一段时间运行又超出上界●●●!。
ok7:mov produ1,L2
add produ1,bx
mov si,jiaodian
mov produ2,H2
add produ2,si
call brick2
sub jiaodian,21;●画焦点框
mov produ1,L2
add produ1,bx
mov si,jiaodian
mov produ2,H2
add produ2,si
call brick3;---------
sub bx,2
jmp try_again2


exit4:
mov ah,1
int 21h
mov ah,4ch
int 21h

brick proc;●方框子程序
mov cx,bx
mov dx,si
lop6:mov al,02
mov ah,0ch
int 10h
add cx,1
cmp cx,produ1
jg lop7
jmp lop6
lop7:mov al,02
mov ah,0ch
int 10h
inc dx
cmp dx,produ2
jg lop8
jmp lop7
lop8:mov al,02
mov ah,0ch
int 10h
dec cx
cmp cx,bx
jb lop9
jmp lop8
lop9:mov al,02
mov ah,0ch
int 10h
dec dx
cmp dx,si
jb lop10
jmp lop9
lop10:
ret
brick endp
brick2 proc;●擦方框子程序
mov cx,bx
mov dx,si
lop11:mov al,0
mov ah,0ch
int 10h
add cx,1
cmp cx,produ1
jg lop12
jmp lop11
lop12:mov al,0
mov ah,0ch
int 10h
inc dx
cmp dx,produ2
jg lop13
jmp lop12
lop13:mov al,0
mov ah,0ch
int 10h
dec cx
cmp cx,bx
jb lop14
jmp lop13
lop14:mov al,0
mov ah,0ch
int 10h
dec dx
cmp dx,si
jb lop15
jmp lop14
lop15:
ret
brick2 endp
brick3 proc;●画焦点方框子程序●
mov cx,bx
mov dx,si
lop16:mov al,07
mov ah,0ch
int 10h
add cx,1
cmp cx,produ1
jg lop17
jmp lop16
lop17:mov al,07
mov ah,0ch
int 10h
inc dx
cmp dx,produ2
jg lop18
jmp lop17
lop18:mov al,07
mov ah,0ch
int 10h
dec cx
cmp cx,bx
jb lop19
jmp lop18
lop19:mov al,07
mov ah,0ch
int 10h
dec dx
cmp dx,si
jb lop20
jmp lop19
lop20:
ret
brick3 endp

code ends
end start
...全文
42 回复 打赏 收藏 转发到动态 举报
写回复
用AI写文章
回复
切换为时间正序
请发表友善的回复…
发表回复

21,459

社区成员

发帖
与我相关
我的任务
社区描述
汇编语言(Assembly Language)是任何一种用于电子计算机、微处理器、微控制器或其他可编程器件的低级语言,亦称为符号语言。
社区管理员
  • 汇编语言
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧