[原]联系人管理
; 联系人管理
; 作者: 小奇
; 日期: 2010-1-31
; 备注: 今天写的代码,基本框架,有需要的就拿去吧!
; 只写了打开文件,关闭文件,创建文件,还有一个switch
.model small
.stack 200h
.data
szFileName db 'data.dat', 0
strOpenFileSuc db 'Open File Success', 13,10, '
strOpenFileFaildb 'Open File Failed' , 13, 10, '
strCreateFileSuc db 'Create File Success', 13,10, '
strCrateFileFail db 'Create File Failed' , 13, 10, '
strCloseFileSucdb 'Close File Success', 13,10, '
strCloseFileFail db 'Close File Failed' , 13, 10, '
strMenuTips db 13,'**************************************************************',13,10
db ' linkman manage',13, 10,13, 10
db 9,'1.Add linkman', 13, 10
db 9,'2.Search linkman', 13, 10
db 9,'3.Modification linkman information', 13, 10
db 9,'4.Delete linkman', 13, 10
db 9,'5.Show all linkman list', 13, 10
db 9,'0.Exit', 13, 10
db 13,10, '**************************************************************'
db 13,10, 'Please input: ', "$"
strReenter db 13, 10, 'input error,Please Reenter: ', '
.code
; 函数名: CreateFile
; 参数: 文件类型
; 作用: 通过文件类型
; 返回值: 如果AX为FFFFh的话,说明文件创建失败了
CreateFile proc
Argv = 4
push bp
movbp, sp
push dx
mov dx, offset szFileName
push cx
mov cx,
jbCREATEFAIL ; 如果创建失败,将ax置为全FFFF
mov dx, offset strCreateFileSuc
jmp CREATEDISPLAY
CREATEFAIL:
mov ax, 0ffffh
mov dx, offset strCrateFileFail
CREATEDISPLAY:
mov cx, ax
mov ah, 9h
int 21h
mov ax, cx
pop cx
pop dx
pop bp
ret 2
CreateFile endp
; 函数名: OpenFile
; 参数: 打开方式
; 作用: 通过打开方式,打开联系人数据文件
OpenFile proc
Argv = 4
push bp
movbp, sp
;保存原来的寄存器
movdx, offset szFileName
movax,
; 将ah清零,因为打开方式只用到了al
movah, 3dh
int21h
push ax ; 将文件句柄保存起来
jb OPENFAIL
OPENSUC:
; 如果打开成功,不提示
; mov dx, offset strOpenFileSuc
jmp OPENDISPLAY
OPENFAIL:
movdx, offset strOpenFileFail
OPENDISPLAY:
movah, 9
int 21h
OPENEXIT:
popax
popbp
ret2
OpenFile endp
; 函数名: CloseFile
; 参数: 文件句柄
; 作用: 通过文件句柄,关闭已经打开的文件
CloseFile proc
Argv = 4
push bp
movbp, sp
push ax
push bx
push dx
movah, 3eh
movbx,
int21h
jb CLOSEFAIL
CLOSESUC:
movdx, offset strCloseFileSuc
jmpCLOSEDISPLAY
CLOSEFAIL:
mov dx, offset strCloseFileFail
CLOSEDISPLAY:
movah, 9
int21h
CLOSEEXIT:
; 恢复寄存器
popdx
popbx
popax
popbp
ret2
CloseFile endp
; 函数名: ClearScreen
; 参数: 无
; 作用: 清屏
ClearScreen proc
; 保存寄存器
push bp
mov bp, sp
push ax
push bx
push cx
push dx
; 清屏
xorcx, cx
movdh, 32h ; 列数
movdl, 6eh ; 行数
movbh, 07 ; 清屏
xorcx, cx
; 清除整个屏幕
movax, 600h
int10h
movbh, 0
movdh, 0
movdl, 0
movah, 2
int10h
; 恢复
pop dx
pop cx
pop bx
pop ax
pop bp
ret
ClearScreen endp
; 函数名: ShowMenu
; 参数: 无
; 作用: 显示操作界面
ShowMenu proc
call ClearScreen
mov dx, offset strMenuTips
mov ah, 9
int 21h
ret
ShowMenu endp
; 函数名: ShowAll
; 参数: 文件句柄
; 作用: 显示操作界面
ShowAll proc
mov dx, offset strReenter
mov ax, 09h
int 21h
ret 2
ShowAll endp
; 函数名: ParseRequest
; 参数: 无
; 作用: 处理用户选项界面
ParseRequest proc
; 局部变量
; 这里不能这么申请,要改直接放到栈里去
push bp
movbp, sp
push ax ; 变量 保存文件句柄
push bx
push cx
push dx
; 打开文件
movax, 2h ; 2是打开文件的方式
push ax
Call OpenFile
jb CREATE ; 如果打开文件失败,则跳去创建文件
PARSE:
call ShowMenu
INPUT: ; 用户输入
xor ax, ax
int 16h
; 输入回显
mov ah, 6
mov dl, al
int 21h
cmp al, '0' ; 如果用户输入0的话结束
jzPARSEEXIT
sub al, '1'
sub al, 4 ; 如果大于5的话
jgREINPUT
;-------------------------- 这里处理用户的请求了
mov ax, ss:
; 把参数压进栈
push ax
mov bx, offset ParseTable
shl ax, 1
add bx, ax
mov ax, cs:
call ax
;; 处理完请求跳回去继续等待用户输入
jmp PARSE
CREATE: ; 创建文件
xor ax, ax
push ax
call CreateFile
cmp ax, 0ffffh
jnzPARSE
PARSEEXIT:
pop dx
pop cx
pop bx
pop bp ; 变量
pop bp
ret
REINPUT:
mov dx, offset strReenter
mov ah, 09h
int 21h
jmp INPUT
; 还没有加函数
ParseTable dw offset PARSEEXIT;
dw offset PARSEEXIT;
dw offset PARSEEXIT;
dw offset PARSEEXIT;
dw offset ShowAll;
ParseRequest endp
; 程序入口函数
main:
mov ax, @data
mov ds, ax
mov es, ax
call ParseRequest
mov ah, 4ch
int 21h
end main 拿走代码,留下脚印!~
你就是偶们的偶像:kiss: !~~ 我承认我是来偷代码的..../:11 只能膜拜,无法学习
页:
[1]