汇编实验二

(1)从BUF单元开始存有一字符串(长度<255),编程实现统计该字符串中的ASCII在42H~45H之间的字符个数,并将统计结果以二进制形式显示在屏幕。

<strong>.486  
DATA SEGMENT USE16  
BUF DB 'ABCD'  

COUNT EQU $-BUF  
DATA ENDS  
  
CODE SEGMENT USE16  
ASSUME CS:CODE,DS:DATA  
  
BEG:  
    MOV AX,DATA  
    MOV DS,AX  
      
    MOV BL,0    ;计数  
    MOV SI,0  
    MOV CX,COUNT  
AGA:  
    CMP BUF[SI],42H  
    JB LAST    ;低于转移  
    CMP BUF[SI],45H  
    JA LAST    ;高于转移  
    INC BL  
LAST:  
    INC SI  
    LOOP AGA  
    MOV CX,8  
M2:  
      
    TEST BL,80H  
    JNZ M3  
    MOV DL,'0'  
    MOV AH,02H  
    INT 21H  
    JMP M4  
M3:  
    MOV DL,'1'  
    MOV AH,02H  
    INT 21H  
M4:  
    SHL BL,1  
    LOOP M2  
      
    MOV AH,4CH  
    INT 21H  
CODE ENDS  
    END BEG  </strong>

 


(2)用户登录验证程序的实现

程序执行后,给出提示操作,请用户键入用户名和密码;用户在键入密码时,程序不回显键入字符;只有当用户键入的用户名,密码字符串和程序内定的字符串相同时,显示欢迎界面并返回DOS;否则给出提示信息,用户名或密码错误,再次输入。界面颜色自定(彩色或黑白)

 

  

.486

        DATA  SEGMENT   USE16

       _NAME  DB        NAME - 1, '1511','$'

   _PASSWORD  DB       PASSWORD - 1, '1212', '$'

    BUF_NAME  DB        30

              DB        ?

              DB        30 DUP(?)

            BUF_PASSWORD  DB        30

              DB        ?

              DB        30 DUP(?)

       MESG1  DB        'PLEASE INPUTE YOUR NAME: ', '$'

       MESG2  DB        'PLEASE INPUTE YOUR PASSWORD: ', '$'

 

          OK  DB        0DH, 0AH, '----  WELLCOME  ---- ', 0DH, 0AH, '$'

          NO  DB        0DH, 0AH, 'USERNAME OR PASSWORD ERROR!', 0DH, 0AH, '$'

        DATA  ENDS

 

        CODE  SEGMENT   USE16

              ASSUME    CS:CODE, DS:DATA

        BEG:  MOV       AX, DATA

              MOV       DS, AX

              MOV       SS, AX

              MOV       SP, 0

 

;GET NAME

      AGAIN:  MOV       AH, 9

              MOV       DX, OFFSET MESG1

              INT       21H

              MOV       AH, 0AH

              MOV       DX, OFFSET BUF_NAME

              INT       21H

              MOV       BL, BUF_NAME+1

              MOV       BH, 0

              INC       BYTE PTR BUF_NAME+1

              MOV       SI, OFFSET BUF_NAME + 2

              MOV       BYTE PTR [BX+SI], '$'

 

; LINE BREAK

              MOV       AH, 02H

              MOV       DL, 0AH

              INT       21H

 

;GET PASSWORD

              MOV       AH, 9

              MOV       DX, OFFSET MESG2

              INT       21H

 

              MOV       DI, 0

              MOV       BX, OFFSET BUF_PASSWORD + 2

          S:  MOV       AH,08H

              INT       21H

      

 

              MOV       BYTE PTR [BX + DI], AL

              INC       DI

              CMP       AL, 0DH

              JNZ       S

               

              MOV       AX, DI

              MOV       BYTE PTR BUF_PASSWORD + 1, AL

              MOV       BYTE PTR [BX +DI], '$'

 

    

 

 

              CALL      CHECK

              CMP       AX, 0

              JZ        AGAIN

              MOV       AH, 4CH

              INT       21H

 

       CHECK  PROC

              MOV       SI, OFFSET _NAME

              MOV       DI, OFFSET BUF_NAME + 1

              MOV       CX, [SI]

              MOV       CH, 00H

 

         S0:  MOV       AL, [SI]

              CMP       AL, [DI]

              JNZ       ERROR

              INC       SI

              INC       DI

              LOOP      S0

 

              MOV       SI, OFFSET _PASSWORD

              MOV       DI, OFFSET BUF_PASSWORD + 1

              MOV       CX, [SI]

              MOV       CH, 00H

 

         S1:  MOV       AL, [SI]

              CMP       AL, [DI]

              JNZ       ERROR

              INC       SI

              INC       DI

              LOOP      S1

              MOV       AH, 9

              MOV       DX, OFFSET OK

              INT       21H

              MOV       AX, 1

              JMP       OVER

 

      ERROR:  MOV       AH, 9

              MOV       DX, OFFSET NO

              INT       21H

              MOV       AX, 0

       OVER:  RET

       CHECK  ENDP

        CODE  ENDS

              END       BEG

 

 

  • 4
    点赞
  • 55
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

const

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值