汇编猜字游戏

 out_code macro op1,op2 ;输出’*‘
     push cx
       xor bx,bx
       mov cl,op1
  op2:
   mov ah, 02h
   mov dl,'*'
   int 21h
   inc bl
   cmp bl,cl
   jb op2
 mov dx,offset CR
    mov ah,09h
    int 21h
    pop cx  
endm
        
clear_screen macro op1,op2,op3,op4 ;清屏宏定义
    push cx  
    mov ah,06h         
    mov al,00h
    mov bh,07h
    mov ch,op1
    mov cl,op2
    mov dh,op3
    mov dl,op4
    int 10h
    mov ah,02h
    mov bh,00h
    mov dh,00h
    mov dl,00h
    int 10h
    pop cx
endm 
   
DATAS SEGMENT
 num dw ?
    string db ' you just have seven times!$'
    string1 db 'please enter your numble:$'
    string2 db 'play the game again?(Y/N)$'
    string3 db 'You have times of  $'
    string4 db 'You are right!$'
    string5 db 'Sorry,fault!$'
    CR db 0AH,0DH,'$'
DATAS ENDS

STACKS SEGMENT stack
      db 256 dup(?)
STACKS ENDS

CODES SEGMENT
    ASSUME CS:CODES,DS:DATAS,SS:STACKS
START:
    MOV AX,DATAS
    MOV DS,AX
began:
    clear_screen 00d,00d,25d,80d
    mov dx,offset string ;输出string
    mov ah,09h
    int 21h
    mov dx,offset CR
    mov ah,09h
    int 21h
    call RAND
    mov num,bx
    xor cx,cx
    xor bx,bx  
GO:
    mov dx,offset string1 ;输出string1
    mov ah,09h
    int 21h 
    mov ah,07h   ;输入十进制高位
    int 21h
    mov ah,02
    mov dl,al
    int 21h
    sub al,30h
    mov bh,al
    mov ah,07h   ;输入十进制低位
    int 21h
    mov ah,02
    mov dl,al
    int 21h
    sub al,30h
    mov bl,al
    mov dl,bh   
    push cx
    mov cl,3
    shl bh,cl    
    add bh,dl
    add bh,dl
    add bh,bl
    mov al,bh      ;通过bh*10+bl将二位十进制ASCII码转换成十进制数
    cbw
    push ax
    mov bx,num
    mov dx,offset CR
    mov ah,09h
    int 21h
    pop ax
    xor bx,bx
    cmp ax,0h  ;输入的数要大于0,小于100
    jb GO
    cmp ax,100d
    ja GO
    mov bx,num
    cmp ax,bx
    je right    ;如果AX等于BX
    jb lower    ;如果AX小于BX
    sub ax,bx
   
return:
    xor dx,dx
    mov bl,05h
    div bl
    out_code al,next3 ;输出*
    pop cx
    inc cx
   
    mov dx,offset string3 ;输出string3
    mov ah,09h
    int 21h
    mov bx,cx
    add bx,30h
    mov ah,02h
    mov dl,bl
    int 21h
    mov dx,offset CR
    mov ah,09h
    int 21h
    cmp cx,06h
    jb GO
    jmp wrong
lower:                 
    sub bx,ax
    mov ax,bx
    jmp return
 
again:  
    mov dx,offset string2 ;输出string2
    mov ah,09h
    int 21h
    mov dx,offset CR
    mov ah,09h
    int 21h
    mov ah,07h       ;是否继续游戏
    int 21h
    cmp al,'y'
    je began
    jmp EXIT
right:                          ;猜对后跳转
    mov dx,offset string4
    mov ah,09h
    int 21h
    mov dx,offset CR
    mov ah,09h
    int 21h
    jmp again
wrong:                             ;七次失败后跳转
    mov dx,offset string5
    mov ah,09h
    int 21h
    mov dx,offset CR
    mov ah,09h
    int 21h
    jmp again
EXIT:
    MOV AH,4CH
    INT 21H
RAND  PROC
      PUSH CX
      PUSH DX
      PUSH AX
      STI
      MOV AH,0             ;读时钟计数器值
      INT 1AH
      MOV AX,DX            ;清高6位
      AND AH,3
      MOV DL,101           ;除101,产生0~100余数
      DIV DL
      MOV BL,AH            ;余数存BX,作随机数
      POP AX
      POP DX
      POP CX
      RET
RAND  ENDP
CODES ENDS
    END START

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值