- UID
- 62930
注册时间2009-7-24
阅读权限20
最后登录1970-1-1
以武会友
TA的每日心情 | 开心 2024-12-6 17:12 |
---|
签到天数: 6 天 [LV.2]偶尔看看I
|
- ; 联系人管理
- ; 作者: 小奇
- ; 日期: 2010-1-31
- ; 备注: 今天写的代码,基本框架,有需要的就拿去吧!
- ; 只写了打开文件,关闭文件,创建文件,还有一个switch
- .model small
- .stack 200h
- .data
- szFileName db 'data.dat', 0
- strOpenFileSuc db 'Open File Success', 13,10, '
- strOpenFileFail db 'Open File Failed' , 13, 10, '
- strCreateFileSuc db 'Create File Success', 13,10, '
- strCrateFileFail db 'Create File Failed' , 13, 10, '
- strCloseFileSuc db '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
- mov bp, sp
- push dx
- mov dx, offset szFileName
- push cx
- mov cx, [bp+Argv]
- jb CREATEFAIL ; 如果创建失败,将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
- mov bp, sp
- ;保存原来的寄存器
- mov dx, offset szFileName
- mov ax, [bp+argv]
- ; 将ah清零,因为打开方式只用到了al
- mov ah, 3dh
- int 21h
- push ax ; 将文件句柄保存起来
- jb OPENFAIL
- OPENSUC:
- ; 如果打开成功,不提示
- ; mov dx, offset strOpenFileSuc
- jmp OPENDISPLAY
- OPENFAIL:
- mov dx, offset strOpenFileFail
- OPENDISPLAY:
- mov ah, 9
- int 21h
- OPENEXIT:
- pop ax
- pop bp
- ret 2
- OpenFile endp
- ; 函数名: CloseFile
- ; 参 数: 文件句柄
- ; 作 用: 通过文件句柄,关闭已经打开的文件
- CloseFile proc
- Argv = 4
- push bp
- mov bp, sp
- push ax
- push bx
- push dx
- mov ah, 3eh
- mov bx, [bp + Argv]
- int 21h
- jb CLOSEFAIL
- CLOSESUC:
- mov dx, offset strCloseFileSuc
- jmp CLOSEDISPLAY
- CLOSEFAIL:
- mov dx, offset strCloseFileFail
- CLOSEDISPLAY:
- mov ah, 9
- int 21h
- CLOSEEXIT:
- ; 恢复寄存器
- pop dx
- pop bx
- pop ax
- pop bp
- ret 2
- CloseFile endp
- ; 函数名: ClearScreen
- ; 参 数: 无
- ; 作 用: 清屏
- ClearScreen proc
- ; 保存寄存器
- push bp
- mov bp, sp
- push ax
- push bx
- push cx
- push dx
-
- ; 清屏
- xor cx, cx
-
- mov dh, 32h ; 列数
- mov dl, 6eh ; 行数
- mov bh, 07 ; 清屏
- xor cx, cx
- ; 清除整个屏幕
- mov ax, 600h
- int 10h
-
- mov bh, 0
- mov dh, 0
- mov dl, 0
- mov ah, 2
- int 10h
- ; 恢复
- 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
- mov bp, sp
- push ax ; 变量 保存文件句柄
- push bx
- push cx
- push dx
-
- ; 打开文件
- mov ax, 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的话结束
- jz PARSEEXIT
- sub al, '1'
- sub al, 4 ; 如果大于5的话
- jg REINPUT
- ;-------------------------- 这里处理用户的请求了
- mov ax, ss:[bp-2]
- ; 把参数压进栈
- push ax
- mov bx, offset ParseTable
- shl ax, 1
- add bx, ax
- mov ax, cs:[bx]
- call ax
- ;; 处理完请求跳回去继续等待用户输入
- jmp PARSE
- CREATE: ; 创建文件
- xor ax, ax
- push ax
- call CreateFile
- cmp ax, 0ffffh
- jnz PARSE
- 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
复制代码 |
|