evilknight 发表于 2010-1-31 02:34:27

[原]联系人管理


; 联系人管理
; 作者: 小奇
; 日期: 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

FUCKCCTV 发表于 2010-1-31 11:49:33

拿走代码,留下脚印!~
你就是偶们的偶像:kiss: !~~

MeowCat 发表于 2010-2-11 00:23:32

我承认我是来偷代码的..../:11

boy 发表于 2010-2-11 10:08:04

只能膜拜,无法学习
页: [1]
查看完整版本: [原]联系人管理