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

📄 ben24.asm

📁 汇编语言的一些源码,全部都运行通过.课程设计的时候搞的,这是另外一份.
💻 ASM
字号:
D_SEG   SEGMENT
        TEL_TAB      DB 50 DUP (20 DUP(?),8 DUP(?)) 	;电话号码,人名记录
        TEL_TABTEMP  DB 50 DUP (20 DUP(?),8 DUP(?)) ;转移实现电话号码,人名记录排序
 STRINTRU     DB 'Welcome to use!',0dh,0ah
              DB	 'Input your telephone number by input "I".',0dh,0ah
              DB 'To find a telephone number, input "Y" .',0dh,0ah
       	      DB 'To exit the program, please input "N".$'

        STRINPUT     DB 0dh,0ah,'Input a name:',0dh,0ah,'$'   
        STRINPHONE   DB 'Input a telephone number:',0dh,0ah,'$'
        STRYN        DB 'Do you want a telephone number?(Y)Or do you want to exit?(N)Or do you want to input? (I)','$'
        STRNAME      DB 0dh,0ah,'name?',0dh,0ah,'$'
        STRPRINT     DB 'name                tel.',0dh,0ah,'$'
        ACPNAME      DB 21,?,21 DUP(?) 				;接收人名
 	NTH1          db 3 dup(?)
        ACPTEL       DB 9,?,9 DUP(?)    			;接收电话号码 
 	NTH2          db 3 dup(?)
        TEMP_TEL     DB 0               		;临时存储TEL_TAB当前的偏移地址
        TEMP_TELTEMP DB 0               		;临时存储TEL_TABTEMP当前的偏移地址
 	FINDNAME     DB 20 DUP(?)       			;要查找的人名
        FINDTEL      DB 8 DUP(?) ,0dh,0ah,'$'       	;查找到的电话号码
D_SEG   ENDS


PROG    SEGMENT
      ASSUME  CS:PROG ,DS:D_SEG,ES:D_SEG
     START:
        MAIN  PROC  FAR

          PUSH      DS
          XOR      AX,AX
          PUSH      AX

          MOV       AX,D_SEG
          MOV       DS,AX
   	  MOV       ES,AX

          ;显示初始信息
          LEA     DX,STRINTRU
          MOV       Ah,09H
          INT       21H
          CALL      INPUT_NAME  			;调用子程序INPUT_NAME接收人名
          RET
       MAIN ENDP

       ;接收人名子程序
       INPUT_NAME  PROC  NEAR 
     AGAIN:
          ;显示输入人名的提示信息
          LEA     DX,STRINPUT
          MOV       Ah,09H
          INT       21H

          ;接收人名
          LEA       DX,ACPNAME
          MOV       Ah,0AH
          INT       21H
 
          SUB       CH,CH      				        ;清零
          MOV       CL,ACPNAME+1 				;实际字符数
   	  LEA       SI,ACPNAME+2 				;赋给人名字符首地址

          SUB       BH,BH
          MOV       Bx,OFFSET TEL_TAB
          ADD       Bx,word ptr TEMP_TEL

          MOV       DI,BX        				;当前TEL_TAB中的人名首地址
          REP       MOVSB
          
	  ;每输入一个名字,偏移地址往后移20
          MOV       AX,WORD PTR TEMP_TEL
          ADD       AX,20
          MOV       WORD PTR TEMP_TEL, AX
         
	  ;显示输入电话号码的提示信息
          LEA       DX,STRINPHONE
          MOV       AH,09H
          INT       21H
          
	  ;接收电话号码
          LEA       DX,ACPTEL
          MOV       AH,0AH
          INT       21H
          
          SUB       CH,CH
          MOV       CL,ACPTEL+1  				;实际字符数
          lea       SI,ACPTEL+2  				;接收的电话号码的首地址
 
          SUB       BH,BH
          MOV       BX,OFFSET TEL_TAB  				;TEL_TAB的首地址
          ADD       BX,WORD PTR TEMP_TEL        		;当前的偏移地址

          MOV       DI,BX              				;目标串的首地址
          REP       MOVSB
          
	  ;每输入一个电话号码,偏移地址往后移8
          MOV       AX,WORD PTR TEMP_TEL
          ADD       AX,8
          MOV       WORD PTR TEMP_TEL, AX

  FIND_AGAIN:        
          ;显示提示是否查找信息
          LEA       DX,STRYN
          MOV       AH,09H
          INT       21H

  GET_KEY:
          MOV       AH,01H
          INT       21H
          CMP       AL,'Y'
          JE        YES      			;如果输入的是'Y',就跳转到YES
          CMP       AL,'N'
          JE        NO      			;如果输入的是'N',就跳转到NO
   	  CMP       AL,'I'   			;如果输入的是'I',就继续输入电话号码
   	  JE        AGAIN
          JNE       GET_KEY  			;如果输入的都不是,等到输入了Y或者N为止
      YES:

          ;调用查找程序
          CALL      NAME_SEARCH 
          JMP       FIND_AGAIN  ;继续查找下一个号码 

          ;输出输入NAME信息
          ;LEA       DX,STRNAME  
          ;MOV       AH,09H
          ;INT       21H
          ;调用INPUT_NAME子程序接收人名
          ;JMP      AGAIN    ;继续输入
      NO: 
          RET
       INPUT_NAME  ENDP
       ;保存人名子程序
       STORE_NAME   PROC  NEAR
          
       STORE_NAME   ENDP
       ;接收电话号码并保存电话号码子程序
       INPHONE     PROC  NEAR
       INPHONE     ENDP

       ;电话号码表按人名排序子程序
       NAME_SORT   PROC  NEAR
       NAME_SORT   ENDP

       ;电话号码查找子程序
       NAME_SEARCH PROC  NEAR
          ;输出输入NAME信息
          MOV       BX,0
          LEA       DX,STRNAME  
          MOV       AH,09H
          INT       21H
          ;接收人名
          LEA       DX,ACPNAME
          MOV       AH,0AH
          INT       21H

          SUB       CH,CH       					;清零
          MOV       CL,ACPNAME+1 					;实际字符数
   	  LEA       SI,ACPNAME+2 					;赋给人名字符首地址

          LEA       DI,FINDNAME        
          REP       MOVSB
     NEXT:  
          MOV       CX,19

          SUB       AH,AH
          MOV       AX,OFFSET TEL_TAB
          ADD       AX,BX

          LEA       SI,FINDNAME
          MOV       dI,AX
   	  CLD
          REPZ      CMPSB
   	  JE        a10
          ADD       BX,28
          CMP       BX,1400
          JGE       EXIT
          JMP       NEXT
       a10:
          MOV       CX,8
          ADD       BX,20                 ;当前找到人的电话号码的首地址

          SUB       AH,AH
          MOV       AX,OFFSET TEL_TAB
          ADD       AX,BX

          LEA       DI,FINDTEL
          MOV       SI,AX
          REP       MOVSB 
          ;调用格式打印查找到的
          CALL      PRINTLINE
     EXIT: 
          RET       
       NAME_SEARCH ENDP

       ;显示人名及电话号码子程序
       PRINTLINE   PROC  NEAR
          ;显示打印格式
          LEA       DX,STRPRINT
          MOV       AH,09H
          INT       21H
          ;输出人名, 输出电话号码
          LEA       DX,FINDNAME
          MOV       AH,09H
          INT       21H
          RET
       PRINTLINE   ENDP

         PROG ENDS
                END START

⌨️ 快捷键说明

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