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

📄 stu1.asm

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

reclen  equ 32

namepar label byte
maxlen  db  reclen
namelen db ?
namedta  db reclen dup(' ')
namefld  db reclen dup(' '),13,10,'$'
;-----
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  6

opnmsg   db  '*** open  error ***','$'
wrtmsg   db  '*** write error ***','$'

openmsg  db  '*** open  error ***','$'
readmsg  db  '*** read  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,7
      int  21h

      cmp  al,'1'
      je   inpt

      cmp  al,'2'
      je   ssss

      cmp  al,'3'
      je   printt

      jmp  mainout

;---
inpt:      call createf
      cmp  errcde,0
      jz   contin
      ret
contin: call inputf
        cmp  namelen,0
        jne  contin
        call clsef
;-----

printt:    call openf
           cmp  errcde,0
           jnz   mainout

loop1:    call readf
           cmp  errcde,0
           jnz  mainout
           call dispp
           jmp loop1


;----

ssss:  call  openf
         cmp   errcde,0
         jnz   mainout
         call searchf
         cmp  errcde,0
         jnz  mainout
         call dispp
         ret
;------
mainout:     ret
begin endp
;------------------------
createf  proc near
    mov ah,16h
    lea dx,fcbrec
    int 21h
    cmp al,0
    jnz err1

    mov fcbrcsz,reclen
    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 dispi
    cmp  namelen,0
    jne  blank
    ret

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

       cld
       lea  di,namedta
       mov  cx,reclen/2
       mov  ax,2020h
       rep  stosw
       ret
inputf endp
;--------------------------------
readf proc near
   mov   ah,14h
   lea   dx,fcbrec
   int 21h
   cmp   namefld,1ah
   jne   tests
   mov   errcde,01
   jmp rend
tests: cmp   al,0
       jz    rend
       mov   errcde,01
       cmp   al,1
       jz    rend
       lea   dx,readmsg
       call  errm
rend:  ret

readf endp
;--------------------------------
openf proc near

   lea   dx,fcbrec
   mov   ah,0fh
   int   21h
   cmp   al,0
   jnz   error
   mov   fcbrcsz,reclen
   mov   ah,1ah
   lea   dx,namefld
   int   21h


   mov   ah,06
   mov   al,0
   call   scro
   call   curs
   ret
error:   mov errcde,01
         lea dx,openmsg
         call  errm
         ret

openf endp
;--------------------------------
dispi proc near
     mov ah,09
     lea  dx,crlf
     int  21h
     cmp  row,36
     jne pass
     inc row
     ret
pass: mov ah,06
      mov  al,01
      call  scro
      call  curs
      ret
dispi endp
;-------------------
dispp proc near
   mov  ah,09
   lea  dx,namefld
   int  21h

   cmp  row,24
   jae  bottom
   jmp  dend
bottom: mov  ah,06
        mov  al,01
        call  scro
        call  curs
dend: ret

dispp endp
;------------------------
searchf proc  near

searchf  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,0
    mov  dx,364fh
    int  10h
    ret
scro  endp
;---------------------
curs  proc  near
    mov  ah,02
    mov  bh,6
    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 + -