⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 infomag.asm

📁 仿TC界面用汇编写的一个信息管理器
💻 ASM
字号:
include immacro.lib 
include core.lib
include msgdiglog.lib

extrn TaxisMarkT:far

STACKSG SEGMENT STACK 'S'
        DB 512 DUP (?)
STACKSG ENDS

MESSAGE STRUC
NUMBER DB 10 DUP (0)
UNAME   DB 10 DUP (0)
MASM   DB 10 DUP (0)
COMPOSE DB 10 DUP (0)
SYSTEM DB 10 DUP (0)
TOTAL  DB 10 DUP (0)
ORDER  DB 10 DUP (0)
NUMBIT DB 10 DUP (0);每种数据的长度
TOTALNUM DW 0;存放总成绩
MESSAGE ENDS

data segment common
;主菜单名
mainmenu1 db 'File'
mainmenu2 db 'Edit'
mainmenu3 db 'See'
mainmenu4 db 'Help'
;主菜单File下的子菜单名
submenu11 db 'Save'
submenu12 db 'Open'
submenu13 db 'Exit'
;主菜单Edit下的子菜单名
submenu21 db 'Insert'
submenu22 db 'Delete'
submenu23 db 'Order'
submenu24 db 'Modify' 
;主菜单See下的子菜单名
submenu31 db 'SeeData'
submenu33 db 'Find'
;主菜单Help下的子菜单名
submenu41 db 'About'
submenu42 db 'Help'
;欢迎窗口信息
msgtitle db 'Info Manage System (V1.0)'
msg0 db 'Powered by lixi'
msg1 db 'Copyright @ 2004 - 2005'
msg6 db 'Press any key to continue...'
;其他信息
buttonMsg1 db 'Alt+X-Exit'
buttonMsg2 db 'Alt+S-Save'
buttonMsg3 db 'Esc-Return' 
buttonMsg4 db 'F1-Help'
buttonMsg5 db 'F3-Find'

helpMsg0 db 'Help'
helpMsg1 db 'Press Alt+F,Alt+E,Alt+S,Alt+H or ',19h,' to open the submenu3.'
helpMsg2 db 'Press Enter (',11h,0c4h,0d9h,') to open the submenu3.'
helpMsg3 db 'Press ',1bh,' or ',1ah,' to select the mainmenu.'
helpMsg4 db 'Press ',18h,' or ',19h,' to select the submenu3.'
helpMsg5 db 'Press Esc to exit every subject.'

text db '    NO      Name    Masm    Compose    System    Total    Order'

text20 db '---------------------Insert---------------------------'
text21 db 'No     (10):'
text22 db 'Name    (6):'
text23 db 'Masm    (4):'
text24 db 'Compose (4):'
text25 db 'System  (4):'
text26 db 'Total   (4):'
text27 db 'Order   (4):'
text28 db 'Press Alt+S to Save'

text30 db 'Manage'
text31 db 'Delete'
text32 db 'Modify'
text33 db 'Exit'

text40 db 'Confirm'
text41 db 'Are you sure?'
text42 db 'Yes'
text43 db 'No'

text50 db 'Open File'
text51 db 'Path:'

text60 db 'Save File'
text61 db 'File Name:'
text62 db 'Save To This File?'

text70 db 'File Message'
text71 db 'File open frustratedly!'
text72 db 'File save frustratedly!'
text73 db 'File open successfully!'
text74 db 'File save successfully!'

text80 db 'Find'
text81 db 'Name(6):'
text82 db 'Not find the note!'

text90 db 'About'
text100 db 'Delete'

sub11 db 'Select Save'
sub12 db 'Select Open'
sub13 db 'Select Exit'
sub21 db 'Select Insert'
sub22 db 'Select Delete'
sub23 db 'Select Compose'
sub31 db 'Select SeeData'
sub32 db 'Select InAll'
sub33 db 'Select Find'
sub41 db 'Select About'
sub42 db 'Select Our'

;-------------------------
IL EQU 33 ;输入数据对话框左边界
IT EQU 10 ;输入数据对话框上边界
IB EQU 14 ;输入数据对话框下边界
IR EQU 43 ;输入数据对话框右边界
FL EQU 14 ;文件对话框输入左边界
FR EQU 27 ;文件对话框输入右边界
FT EQU 5  ;文件对话框输入上边界
ML EQU 3  ;菜单的左边界
MT EQU 0  ;菜单的上边界
FINDL EQU 36 ;查找对话框输入左边界
FINDT EQU 10 ;查找对话框输入上边界
FINDR EQU 45 ;查找对话框输入右边界
;-------------------------
;屏幕缓存
scrmm db 100 dup(?)
bscrmm db 20000 dup(?)
scrnum dw 0
;存储数据
;TOTAL DB ?
GRADE MESSAGE 200 dup (<>)
varGrade db 82 dup(0)
;文件名
FILENAME DB 100 DUP (0);存储文件路径
FILENAMEBUF DB 100 DUP (0);文件路径缓存
FILEHANDLE DW 0 ;文件句柄
;查找缓存
FINDBUF DB 15 DUP (0)
;系统变量
isChange db 0;0:没对数据进行修改,1:对数据进行了修改
isInsData db 0;0:没有插入数据,1:插入了数据
mainnum db 1;主菜单序列号
subnum db ?;子菜单序列号
subshow db 0;为0时子菜单未显示
mainindex db ?;主菜单字符长度
nowpos db 5 dup(?);当前列
nowrow db ?;当前行
nowline db ?;当前列
datanum db 0;数据数
wdatanum dw 0;
displaynum db 18;显示的行数
temVar db ?;临时变量
wtemVar dw ?;字型临时变量
data ends
;--------------------------------
code segment
main proc far
assume cs:code,ds:data,es:data
mov ax,data
mov ds,ax
mov es,ax

drawwin

input:;消息接收循环
mov ah,0
int 16h
cmp ah,2dh        ;Alt+X退出
jne continue1 
mov ah,02h
int 16h
and al,0fh
cmp al,08h
jne continue1
call exit
jmp input

continue1:
cmp ah,4bh
jne continue2
call prsleft
jmp input

continue2:
cmp ah,4dh
jne continue3
call prsright
jmp input

continue3:
cmp ah,50h
jne continue4
call prsdown
jmp input

continue4:
cmp ah,21h
jne continue5
mov ah,02h
int 16h
and al,0fh
cmp al,08h
jne continue5
call FAlt
jmp input

continue5:
cmp ah,12h
jne continue6
mov ah,02h
int 16h
and al,0fh
cmp al,08h
jne continue6
call EAlt
jmp input

continue6:
cmp ah,1fh
jne continue7
mov ah,02h
int 16h
and al,0fh
cmp al,08h
jne continue7
call SAlt
jmp input

continue7:
cmp ah,23h
jne continue8
mov ah,02h
int 16h
and al,0fh
cmp al,08h
jne continue8
call HAlt
jmp input

continue8:
cmp ah,48h
jne continue9
call prsup
jmp input

continue9:
cmp ah,1ch
jne continue10
call prsenter
jmp input

continue10:
cmp ah,01h
jne continue11
call escenter
jmp input

continue11:
cmp ah,3bh
jne continue12
call f1enter
jmp input

continue12:
cmp ah,3dh
jne continue13
call f3enter
jmp input

continue13:
jmp input

;-----------------
setNowPos proc near
mov al,mainnum
push ax
mov cl,0ah
mul cl
sub ax,07h
mov mainnum,al
setpos MT,mainnum
mov subshow,0
pop ax
mov mainnum,al
ret
setNowPos endp

f1enter proc near;按下F1键
call escenter
HelpDialog
mov ah,0h
int 16h
writebscr 5,10,19,70,bscrmm
call setNowPos
ret
f1enter endp

f3enter proc near;按下F3键
call escenter
FindProcess
call setNowPos
f3enter endp

escenter proc near;按下ESC键
cmp subshow,0
je escEnd
mov al,mainnum
push ax
mov cl,0ah
mul cl
sub ax,07h
mov mainnum,al
dec mainnum
writescr mainnum,scrmm
inc mainnum
setpos 0,mainnum
pop ax
mov mainnum,al
mov subshow,0
drawwindow 13h,22,4,22,50
escEnd:
ret
escenter endp

prsenter proc near;按下ENTER键
cmp subshow,0
jne enter1
call prsdown
ret

enter1:
mov al,mainnum
push ax
mov cl,0ah
mul cl
sub ax,07h
mov mainnum,al
dec mainnum
writescr mainnum,scrmm
inc mainnum
setpos 0,mainnum
pop ax
mov mainnum,al
drawwindow 13h,22,4,22,50
cmp mainnum,1
jne prsenter1
cmp subnum,2
jne entersub12
;-------------------------------
SaveFileProcess
;--------------------------------
;outputstr sub11,11,22,5,13h

entersub12:
cmp subnum,3
jne entersub13
;--------------------------------
OpenFileProcess
DataDisplay grade,datanum,displaynum
call setNowPos
;--------------------------------

entersub13:
cmp subnum,4
jne prsenter1
outputstr sub13,11,22,5,13h 
call exit

prsenter1:
cmp mainnum,2
jne prsenter2
cmp subnum,2
jne entersub22

;INSERT
;-----------------------------------
InsertDialog
initPos nowpos,33,5
insert datanum
writebscr 8,20,16,55,bscrmm
cmp isInsData,0
je notInsertData
inc datanum
inc wdatanum
notInsertData:
DataDisplay grade,datanum,displaynum
mov isInsData,0
call setNowPos
;------------------------------------

entersub22:
cmp subnum,3
jne entersub23
;------------------------------------
DeleteProcess
DataDisplay grade,datanum,displaynum
call setNowPos
;------------------------------------

entersub23:
cmp subnum,4
jne prsenter2
;------------------------------------------
call far ptr TaxisMarkT
DataDisplay grade,datanum,displaynum
call setNowPos
;------------------------------------------

prsenter2:
cmp mainnum,3
jne prsenter3
cmp subnum,2
jne entersub33

;SeeData
;------------------------------------
outputstr text,63,3,3,1ah
DataDisplay grade,datanum,displaynum
seeProcess 
call setNowPos
;------------------------------------

entersub33:
cmp subnum,3
jne prsenter3
;-------------------------------------
call f3enter
;-------------------------------------

prsenter3:
cmp mainnum,4
jne prsenter4
cmp subnum,2
jne entersub42
;-------------------------------------
AboutDialog
mov ah,0h
int 16h
writebscr 7,20,17,55,bscrmm
call setNowPos
;-------------------------------------
;outputstr sub41,11,22,5,13h

entersub42:
cmp subnum,3
jne prsenter4
;--------------------------------------
call f1enter
;--------------------------------------

prsenter4:
mov subshow,0
ret
prsenter endp
;----------------
halt proc near;H+Alt 
mov al,mainnum
mov cl,0ah
mul cl
sub ax,07h
mov mainnum,al
cmp subshow,1
jne dshow
dec mainnum

writescr mainnum,scrmm
inc mainnum
dshow:
readscr 32,scrmm

submenu2 32,submenu41,5,submenu42,4,9
changemenu 0,mainnum,5,70h
changemenu 0,mainnum,1,74h
mov mainnum,04h
changemenu 0,33,5,0fh
changemenu 2,34,6,0fh
mov subnum,2
mov subshow,1
setpos 0,33
ret
halt endp
;----------------
salt proc near;S+Alt 
mov al,mainnum
mov cl,0ah
mul cl
sub ax,07h
mov mainnum,al
cmp subshow,1
jne rshow
dec mainnum
writescr mainnum,scrmm
inc mainnum
rshow:
readscr 22,scrmm
submenu2 22,submenu31,3,submenu33,4,9
changemenu 0,mainnum,5,70h
changemenu 0,mainnum,1,74h
mov mainnum,03h
changemenu 0,23,3,0fh
changemenu 2,24,6,0fh
mov subnum,2
mov subshow,1
setpos 0,23
ret
salt endp
;----------------
ealt proc near;E+Alt 
mov al,mainnum
mov cl,0ah
mul cl
sub ax,07h
mov mainnum,al
cmp subshow,1
jne eshow
dec mainnum
writescr mainnum,scrmm
inc mainnum
eshow:
readscr 12,scrmm
submenu3 12,submenu21,6,submenu22,6,submenu23,5,9
changemenu 0,mainnum,5,70h
changemenu 0,mainnum,1,74h
mov mainnum,02h
changemenu 0,13,4,0fh
changemenu 2,14,6,0fh
mov subnum,2
mov subshow,1
setpos 0,13
ret
ealt endp
;----------------
falt proc near;F+Alt
mov al,mainnum
mov cl,0ah
mul cl
sub ax,07h
mov mainnum,al
cmp subshow,1
jne fshow
dec mainnum
writescr mainnum,scrmm
inc mainnum
fshow:
readscr 2,scrmm
submenu3 2,submenu11,4,submenu12,4,submenu13,4,9
changemenu 0,mainnum,5,70h
changemenu 0,mainnum,1,74h
mov mainnum,01h
changemenu 0,3,4,0fh
changemenu 2,4,6,0fh
mov subnum,2
mov subshow,1
setpos 0,3
ret
falt endp
;----------------
prsup proc near; 按上箭头
cmp subshow,0
jne prsup2
ret
prsup2:
mov al,mainnum
push ax
mov cl,0ah
mul cl
sub ax,07h
mov mainnum,al
changemenu subnum,mainnum,8,70h
inc mainnum
changemenu subnum,mainnum,1,74h
pop ax
mov mainnum,al
;控制菜单下拉显示的个数
cmp subnum,02h
jne prsuptop
cmp mainnum,4
je upTwoSubMenu
cmp mainnum,3
je upTwoSubMenu
cmp subnum,04h
jne prsuptop
jmp upContinue
upTwoSubMenu:
mov subnum,03h
jmp upContinue
mov subnum,04h
upContinue:
jmp prsup1
prsuptop: 
dec subnum
prsup1:
mov al,mainnum
push ax
mov cl,0ah
mul cl
sub ax,07h
mov mainnum,al
changemenu subnum,mainnum,8,0fh
pop ax
mov mainnum,al
ret
prsup endp
;----------------
prsdown proc near; 按下箭头
cmp subshow,0
jne prsdown2

cmp mainnum,1
jne prsdown3
call falt
jmp prsdown7
prsdown3:
cmp mainnum,2
jne prsdown4
call ealt
jmp prsdown7
prsdown4:
cmp mainnum,3
jne prsdown5
call salt
jmp prsdown7
prsdown5:
cmp mainnum,4
jne prsdown6
call halt
jmp prsdown7
prsdown6:
call halt
prsdown7:
ret
prsdown2:
mov al,mainnum
push ax
mov cl,0ah
mul cl
sub ax,07h
mov mainnum,al
changemenu subnum,mainnum,8,70h
inc mainnum
changemenu subnum,mainnum,1,74h
pop ax
mov mainnum,al
;控制菜单下拉显示的个数
cmp mainnum,4
je twoSubMenu
cmp mainnum,3
je twoSubMenu
cmp subnum,04h
jne prsdownbot
jmp downContinue
twoSubMenu:
cmp subnum,03h
jne prsdownbot
downContinue:
mov subnum,02h
jmp prsdown1
prsdownbot: 
inc subnum
prsdown1:
mov al,mainnum
push ax
mov cl,0ah
mul cl
sub ax,07h
mov mainnum,al
changemenu subnum,mainnum,8,0fh
pop ax
mov mainnum,al
ret
prsdown endp
;----------------
prsright proc near; 按右箭头
cmp subshow,0
je prsright1
call prsrgtsub
ret

prsright1:
mov al,mainnum
push ax
mov cl,0ah
mul cl
sub ax,07h
mov mainnum,al
changemenu 0,mainnum,5,70h
changemenu 0,mainnum,1,74h
pop ax
mov mainnum,al
cmp mainnum,04h
jne prsright2
mov mainnum,01h
jmp prsright3

prsright2:
inc mainnum

prsright3:
cmp mainnum,1
je prsright4
cmp mainnum,2
je prsright4
cmp mainnum,3
je prsright5
cmp mainnum,4
je prsright6

prsright4:
mov mainindex,4
jmp prsright7

prsright5:
mov mainindex,3
jmp prsright7

prsright6:
mov mainindex,5

prsright7:
mov al,mainnum
push ax
mov cl,0ah
mul cl
sub ax,07h
mov mainnum,al
changemenu 0,mainnum,mainindex,0fh
pop ax
mov mainnum,al
ret
prsright endp
;----------------
prsrgtsub proc near;当子菜单打开时按右箭头
cmp mainnum,1
jne prsrgt1
call ealt
jmp prsrgt5
prsrgt1:
cmp mainnum,2
jne prsrgt2
call salt
jmp prsrgt5
prsrgt2:
cmp mainnum,3
jne prsrgt4
call halt
jmp prsrgt5
prsrgt4:
call falt
prsrgt5:
ret
prsrgtsub endp
;----------------
prsleft proc near;按左箭头
cmp subshow,0
je prsleft1
call prslftsub
ret
prsleft1:
mov al,mainnum
push ax
mov cl,0ah
mul cl
sub ax,07h
mov mainnum,al
changemenu 0,mainnum,5,70h
changemenu 0,mainnum,1,74h
pop ax
mov mainnum,al
cmp mainnum,01h
jne prsleft2
mov mainnum,04h
jmp prsleft3
prsleft2:
dec mainnum
prsleft3:
cmp mainnum,1
je prsleft4
cmp mainnum,2
je prsleft4
cmp mainnum,5
je prsleft4
cmp mainnum,3
je prsleft5
cmp mainnum,4
je prsleft6

prsleft4:
mov mainindex,4
jmp prsleft7
prsleft5:
mov mainindex,3
jmp prsleft7
prsleft6:
mov mainindex,4

prsleft7:
mov al,mainnum
push ax
mov cl,0ah
mul cl
sub ax,07h
mov mainnum,al
changemenu 0,mainnum,mainindex,0fh
pop ax
mov mainnum,al
ret
prsleft endp
;----------------
prslftsub proc near;当子菜单打开时按左箭头
cmp mainnum,2
jne prslft2
call falt
jmp prslft5
prslft2:
cmp mainnum,3
jne prslft3
call ealt
jmp prslft5
prslft3:
cmp mainnum,4
jne prslft4
call salt
jmp prslft5
prslft4:
call halt
prslft5:
ret
prslftsub endp
;----------------
exit proc near;退出子过程


mov ah,0
mov al,03h
int 10h
mov ah,4ch
int 21h
ret
exit endp

main endp
;-----------------
code ends
;-----------------------
end main

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -