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

📄 book.asm

📁 汇编语言课程设计的程序
💻 ASM
📖 第 1 页 / 共 2 页
字号:
itemno EQU  68  ;读写文件操作时处理的每条信息的长度
nno    EQU  15  ;信息当中  书名   所占的长度
ano    EQU  15  ;信息当中  作者   所占的长度
pno    EQU  15  ;信息当中 出版社  所占的长度
ino    EQU  15  ;信息当中  ISBN   所占的长度
prcno  EQU  8   ;信息当中  价格   所占的长度


data    segment
    w1       db    '                Welcome to the Book Information Management System!',0ah,0dh,0ah,0dh,'$'
    w2       db    '                     Designed and produced by Zhang Huanren ',0ah,0dh,'$'
    w3       db    '               From Information Science&Engineering College of CSU',0ah,0dh,0ah,0dh,'$'
    w4       db    '                      (c) All rights reserved 2005-2006',0ah,0dh,'$'
    m1       db    '        ***********************************************************',0ah,0dh,'$'
    m2       db    '        *          Book Information Management System             *',0ah,0dh,'$'
    m3       db    '        *                                                         *',0ah,0dh,'$'
    m4       db    '        *          Insert  (i)              List    (l)           *',0ah,0dh,'$'
    m5       db    '        *          Modify  (m)              About   (h)           *',0ah,0dh,'$'
    m6       db    '        *          Delete  (d)              Query   (q)           *',0ah,0dh,'$'
    m7       db    '        *          Exit    (e)                                    *',0ah,0dh,'$'
    m8       db    '        *                                                         *',0ah,0dh,'$'
    m9       db    '        *   Please choose corresponding function...               *',0ah,0dh,'$'
    m10      db    '        ***********************************************************',0ah,0dh,'$'
    re       db    0ah,0dh,'Do you really want to exit?(y/n) $'
    thk      db    0ah,0dh,0ah,0dh,'Thank you for using this system!              ',0ah,0dh,'$'
    messin   db    'Please input the information of the book you want to insert:',0ah,0dh,'$'
    messn    db    '    Book Name: $'
    messa    db    '    Author: $'
    messpub  db    '    Publisher: $'
    messi    db    '    ISBN: $'
    messprc  db    '    Price: $'
    messsuc  db    0ah,0dh,'The operation has been excuted successfully!',0ah,0dh,'$'
    messrtn  db    0ah,0dh,'Press any key to return...',0ah,0dh,'$'
    mess11   db    ' Book Name       Author          Publisher       ISBN            price',0ah,0dh,'$'
    messqur  db    'Please input the name of the book:  $'
    messrlt  db    0ah,0dh,'The book information you want is listed as follow:',0ah,0dh,'$'
    messmdf  db    0ah,0dh,'Please input new book information:',0ah,0dh,'$'
    messdm   db    0ah,0dh,'Do you really want to delete the item?(y/n) $'
    err1     db    'The book you want does not exist in the database!',0ah,0dh,'$'
    err2     db    ' file close wrong$'
    err3     db    'File written wrong!',0ah,0dh,'$'
    
    fname    db    'list.txt',0
    ftmp    db    'list.tmp',0
    buffer1  db    itemno+1 dup(?)   ;从键盘读取15个字符(图书名称)到首地址为buffer1缓冲区当中
    buffer2  db    itemno+10 dup(?)  ;从文件读取15个字符(图书名称)到首地址为buffer2缓冲区当中
    handle   dw    ?
    htmp     dw    ?
data    ends


score struc
    names    db nno dup(' ')
    author   db ano dup(' ')
    publish  db pno dup(' ')
    isbn     db ino dup(' ')
    price    db prcno dup(' ')
score ends

show macro addrs   ;显示字符串
        lea dx,addrs
        mov ah,9
        int 21h
        endm

set_p  macro
        mov ah,2       ;置光标位置
        mov dh,0       ;行
        mov dl,0      ;列
        mov bh,0       ;页号
        int 10h
endm

set_p0 macro       ;光标置于第11行,第2列
       mov ah,2
       mov dh,6
       mov dl,0     
       mov bh,0
       int 10h
       endm


clear  macro                        ;全屏幕清除
       mov al,0
       mov cl,0
       mov ch,0
       mov dh,24
       mov dl,79
       mov bh,7
       mov ah,6
       int 10h
       mov ah,2       ;置光标位置
       mov dh,0       ;行
       mov dl,0      ;列
       mov bh,0       ;页号
       int 10h
       endm

newline macro     ;回车换行
        push ax
        push dx
        mov dl,0dh
        mov ah,2
        int 21h
        mov dl,0ah
        mov ah,2
        int 21h
        pop dx
        pop ax
        endm
;-----------------------------------------------------------
showmenu macro
   clear
   show m1
   show m2
   show m3
   show m4
   show m5
   show m6
   show m7
   show m8
   show m9
   show m10
endm 
;-----------------------------------------------------------
show_item macro addrs
        local iloop,w10,againsi,againprc
        push bx
        push cx

        mov dl,' '            ;输出1个空格
        mov ah,2
        int 21h
        
        mov bx,0
iloop:  mov dl,addrs[bx]         ;display char 输出addrs开始的nno个字符
        mov ah,2
        int 21h
        inc bx
        cmp bx,nno
        jl  iloop

        mov cx,3             ; 输出格式:   01   23   45   67   
w10:    mov dl,' '            
        mov ah,2
        int 21h
        mov si,ano             ;输出addrs开始的ano个字符
againsi:
        mov dl,addrs[bx]         
        mov ah,2
        int 21h
        inc bx
        dec si
        cmp si,0
        jne againsi
        loop  w10

mov dl,' '            
        mov ah,2
        int 21h
        mov si,ano             ;输出addrs开始的ano个字符
againprc:
        mov dl,addrs[bx]         
        mov ah,2
        int 21h
        inc bx
        dec si
        cmp si,0
        jne againprc

        pop cx
        pop bx
        endm
;---------------------------------------------------------
getin   macro addrs,count2
local   zeroit,lp,input_end,exitg  ;将count2个字符输入到addrs为首的内存单元当中,以回车换行作为终止,多余15个字符的忽略
        push bx
        push ax

        mov bx,0            ;addrs为首的15个字符置为空格
zeroit: mov addrs[bx],' '
        inc bx
        cmp bx,nno
        jl  zeroit

        mov bx,0          ;将count2个字符输入到addrs为首的内存单元当中
lp:     mov ah,1
        int 21h
        cmp al,0ah   ;输入字符若为 回车 或 换行,则输入结束
        jz  input_end
        cmp al,0dh
        jz  input_end
        mov addrs[bx],al
        inc bx
        cmp bx,count2
        jl lp

input_end:              ;多输入的字符忽略,直到输入为回车换行时输入停止
        cmp al,0dh
        jz  exitg
        cmp al,0ah
        jz  exitg
        mov ah,7
        int 21h        ;无回显的键盘输入
        jmp input_end
exitg:   
        pop ax
        pop bx
        endm



code    segment
;-----------------------------------------------------------
main proc far
     assume  cs:code,ds:data,es:data

start: 
      mov ax,data
      mov ds,ax
      mov es,ax
      mov ah,0
      mov al,3
      int 10h
      
      clear
      set_p0
      show w1
      show w2
      show w3
      show w4
      mov ah,07h
      int 21h
      clear
      showmenu
      newline


;检测选择的功能
w:    mov ah,7
      int 21h    ;无回显键盘输入
      cmp al,'i'  ;插入功能
      jnz n1            
      call insert
      jmp  w
n1:   cmp al,'m'
      jnz  n2
      call modify   ;修改功能
      jmp  w
n2:   cmp al,'d'
      jnz  n3         ;删除功能
      call delete
      jmp  w
n3:   cmp al,'q'
      jnz  n4 
      call query         ;查询功能
      jmp  w
n4:   cmp  al,'l'         ;显示功能
      jnz  n5
      call list
      jmp  w
n5:   cmp  al,'h'         ;帮助提示功能
      jnz  n6
      call help
      jmp  w
n6:   cmp al,'e'        ;退出
      jz  exitf
      jmp  w
exitf:
       clear             ;清屏,鼠标置位,显示退出提示信息
       set_p        
       show re
       mov ah,01h
       int 21h
       show thk
       mov ah,07h
       int 21h
       mov ah,4ch
       int 21h
       ret
main   endp
;--------------------------------------------------------------
list   proc   near  ; 列出所有图书信息
       push ax
       push bx
       push cx
       push dx
      
       clear
       show messrlt
       show mess11
       call openf
again: 
       mov dx,offset buffer2
       mov cx,itemno
       mov ah,3fh
       int 21h
       cmp ax,0
       jz p
       show_item buffer2
       jmp again
p:         
       mov ah,3eh
       int 21h
              
       show messrtn
       mov ah,7
       int 21h
       showmenu
       pop dx
       pop cx
       pop bx
       pop ax
       ret
list   endp
;-----------------------------------------------------------------------
insert proc near   ;插入新的图书信息
       push ax
       push bx
       push cx
       push dx
      
       call openf
       clear         ;清屏
       show messin    
       call get_rec   ;获取输入数据到首地址为buffer1的缓冲区当中
       
       ;move file pointer to end
       mov cx,0               ;偏移值的高位字
       mov dx,0                ;偏移值的低位字
       mov al,2                ;绝对倒移方式
       mov ah,42h              ;读写指针功能
       int 21h
       
       ;write file
       mov cx,itemno                     ;写入的字节数
       mov dx,offset buffer1         ;数据缓冲区的偏移地址
       mov ah,40h 
       int 21h
       
       newline
       cmp ax,itemno
       je i1

⌨️ 快捷键说明

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