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

📄 fcbwrit.asm

📁 用汇编语言做的一些小程序例题
💻 ASM
字号:
stack segment para stack 'stack'
    dw 80 dup (?)
stack ends
;-----------------------------------------
dseg segment para 'data'

reclen  equ 16
stureclen   equ  6*reclen

namepar label byte
maxlen  db  reclen
namelen db ?
namedta  db stureclen dup(' ')

;-----
fcbrec  label byte

fcbdriv  db  0
fcbname  db  'namefile'
fcbext   db  'dat'
fcbblk   dw  0
fcbrcsz  dw  ?
fcbflsz  dd  ?
         dw  ?
         dt  ?
fcbsqrc  db  0
         dd  ?
;-----

crlf     db 13,10,'$'
errcde   db 0
prompt    db   'name ?','$'
prompt1    db   'num ?','$'
prompt2    db   'sex ?','$'
prompt3    db   'shengyuan  ?','$'
prompt4    db   'score ?','$'

row      db  01

opnmsg   db  '*** open  error ***','$'
wrtmsg   db  '*** write error ***','$'
;---------
displa   db  '        ******  Welcome  ******',0ah,0dh,'$'

displa1  db  '           Please input (1-3)',0ah,0dh,'$'

displa2  db  '       1==input     2==search     3===output',0ah,0dh,'$'
dseg ends
;------------------------------------------
cseg segment para 'code'
begin proc  far
      assume cs:cseg,ds:dseg,ss:stack,es:dseg
      push ds
      sub ax,ax
      push ax
      mov ax,dseg
      mov ds,ax
      mov es,ax
      mov ah,6
      mov al,0
      call scro
      call curs
;========
      lea  dx,displa
      mov  ah,09h
      int  21h

      lea  dx,displa1
      int  21h

      lea  dx,displa2
      int  21h

      mov  ah,1
      int  21h

      cmp  al,'1'
      je   inpt 
      jmp  mainout

inpt:      call createf
      cmp  errcde,0
      jz   contin
      ret
contin: call inputf
        cmp  namelen,0
        jne  contin
        call clsef
mainout:     ret
begin endp
;------------------------
createf  proc near
    mov ah,16h
    lea dx,fcbrec
    int 21h
    cmp al,0
    jnz err1

    mov fcbrcsz,stureclen
    lea dx,namedta
    mov ah,1ah
    int 21h
    ret

err1: lea dx,opnmsg
      call errm
      ret
createf endp
;------------------------
inputf proc near
namee:    mov  ah,09
    lea  dx,prompt
    int  21h

    mov  ah,0ah
    lea  dx,namepar
    int 21h
    call disp
    cmp  namelen,0
    je  escc
;--------------------------------
numm:    mov  ah,09
    lea  dx,prompt1
    int  21h

    mov  ah,0ah
    lea  dx,namepar+16
    int 21h
    call disp
    cmp  namelen,0
    je   numm
;---------------------------
sexx:    mov  ah,09
    lea  dx,prompt2
    int  21h

    mov  ah,0ah
    lea  dx,namepar+32
    int 21h
    call disp
    cmp  namelen,0
    je  sexx
;---------------------------
shengyuan:  mov  ah,09
    lea  dx,prompt3
    int  21h

    mov  ah,0ah
    lea  dx,namepar+48
    int 21h
    call disp
    cmp  namelen,0
    je  shengyuan
;------------------------------
score:    mov  ah,09
    lea  dx,prompt4
    int  21h

    mov  ah,0ah
    lea  dx,namepar+64
    int 21h
    call disp
    cmp  namelen,0
    je  score
    jmp blank
escc:    ret

blank: mov  bh,0
       mov  bl,stureclen
       mov  namedta[bx],' '
       call writef

       cld
       lea  di,namedta
       mov  cx,reclen/2
       mov  ax,2020h
       rep  stosw
       ret
inputf endp
;--------------------------------
disp proc near
     mov ah,09
     lea  dx,crlf
     int  21h
     cmp  row,18h
     jne pass
     inc row
     ret
pass: mov ah,06
      mov  al,01
      call  scro
      call  curs
      ret
disp endp
;-------------------
writef proc near
    mov  ah,15h
    lea  dx,fcbrec
    int 21h
    cmp  al,0
    jz  valid
    lea  dx,wrtmsg
    call  errm
    mov  namelen,0
valid: ret
writef endp
;---------------------
clsef  proc  near
     mov  namedta,1ah
     call  writef
     mov  ah,10h
     lea  dx,fcbrec
     int  21h
     ret
clsef  endp
;--------------------
scro  proc  near
    mov  bh,1eh
    mov  cx,0606h
    mov  dx,184fh
    int  10h
    ret
scro  endp
;---------------------
curs  proc  near
    mov  ah,02
    mov  bh,0
    mov  dl,0
    mov  dh,row
    int  10h
    ret
curs  endp
;----------------
errm  proc near
   mov  ah,09
   int  21h
   mov  errcde,01
   ret
errm  endp
;--------
cseg  ends
     end  begin


⌨️ 快捷键说明

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