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

📄 lm2.asm

📁 这是汇编课程设计的题目,内含有五个程序:图书管理系统,字符统计等.
💻 ASM
字号:
        STACK SEGMENT PARA STACK 'STACK'
        DW 128 DUP(?)
        STACK ENDS
        ;**************************************************************
        
        EXTRA SEGMENT PARA 'EXTRA'
        
        EXTRA ENDS
        ;**************************************************************
        
        DATA SEGMENT PARA 'DATA'
        string1 db '* * * Input a string : ',0dh,0ah,'$'
        a db 100 dup(?)
        string2 db 0dh,0ah,'* * * The number of the word computer is: ',0dh,0ah,'$'
        DATA ENDS
        ;**************************************************************
        
        CODE SEGMENT PARA 'CODE'
        ASSUME CS:CODE,DS:DATA,SS:STACK,ES:EXTRA
        MAIN PROC FAR
        START:
        Push ds
        Sub ax,ax
        Push ax
        MOV AX,DATA
        MOV DS,AX  ;Let DS register have data segment address
        MOV AX,EXTRA
        MOV ES,AX  ;Let ES register have extra segment address
        ;**************************************************************
                  lea   dx,string1                    ;字符提示输入字符串
                  mov   ah,09h
                  int   21h

                  mov   si ,0
                  mov   di,0
                  mov   bx,0
        input:    mov   ah,01h                        ;从键盘接收字符,并将输入的字符逐个输入定义的缓冲区a中 
                  int   21h
                  mov   a[bx],al
                  cmp   al,24h                        ;当输入的字符为$时,结束输入,进入字符串的比较 
                  je    compare
                  inc   bx
                  inc   si                            ;记录下输入的字符串的长度 
                  jmp   input
        
        compare: 
                  mov   cx,si                          ;用字符串的长度当循环控制条件,并对记录含"computer"的个数进行初始化
                  mov   si, 0
                  jmp   compareC                       ;从字符串的第一个字符开始逐个进行比较当中含有"computer"
        l1:       inc   si                              ;的个数,当不匹配则跳回从c开始比较
                  cmp   si,cx
                  jg    output
        compareC: cmp   a[si],63h
                  jne   l1
                  inc   si
        compareO: cmp   a[si],6fh
                  jne   l1
                  inc   si
        compareM: cmp   a[si],6dh
                  jne   l1
                  inc   si
        compareP: cmp   a[si],70h
                  jne   l1
                  inc   si
        compareU: cmp   a[si],75h
                  jne   l1
                  inc   si
        compareT: cmp   a[si],74h
                  jne   l1
                  inc   si
        compareE: cmp   a[si],65h
                  jne   l1
                  inc   si
        compareR: cmp   a[si],72h
                  jne   l1
                  inc   di
                  jmp   l1
        
        output:   
                  lea   dx,string2                     ;提示字符串中含有"computer"的字符个数是i
                  mov   ah,09h
                  int   21h
                  mov   bx,di                          ;将记录的个数赋给bx,并将其转化为十进制输出 
                  mov   cx,10d                          ;因考虑字符长度中做多不会超过100个"computer"  
                  call  dec_div                        ;故只用两位十进制数表示
                  mov   cx,1d
                  call  dec_div
                  ret
         MAIN ENDP
        ;**************************************************************
        dec_div proc near
                  mov   ax,bx                           ;对数据除权,加ascII,即进行二进制到十进制的转换
                  mov   dx,0
                  div   cx
                  mov   bx,dx
                  mov   dl,al
                  add   dl,30h
                  mov   ah,02h
                  int   21h
                  ret
        dec_div endp
        ;**************************************************************
                  mov ah,4ch
                  int 21h
        CODE ENDS
                  END START
        





⌨️ 快捷键说明

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