实验三汇编语言猜数字游戏
搞笑表情包下载-孟子说
猜数字游戏的设计与实现
石家庄铁道大学信息科学与技术学院,张英强
一,
问题描述
程序运行后自动产生一个随机整数,游戏开始,游戏者根据提示输入数字,
系统判断
是否为数字,如果是,与随机数进行比较,并给出提示(大,小,正
确),如果不是则提示错误,游戏者
根据提示再猜数字,直到正确为止。
二,流程图:
开始
产生随机整数
键盘输入十进制数
n
y
Al=0dh ?
Y
N
进位运算
Al=0~9 ?
提示错误
大于
提示大于
Cmp bx,a
小于
提示小与
等于
提示正确
结束
三,
实现分析
1,随机数的产生
调用dos 中断2C号命令
mov ah,2ch 取系统时间,CH:CL=时间:分钟;DH=秒
int 21h
2输入数据的结束进位位计算以及判断
指令:mov
ah,01h
int 21h ;调用dos中断
如果只用这个命令,只能输入一位十进制数,不能满足需求。
指令: and al,0fh
mov ah,0
xchg ax,bx
mov cx,10
mul cx
add bx,ax
jmp input
;进位运算指令
运用这些指令键输入的数字进行进位运算。如第一次输入1,再依次循环输
入
2,则bx=1*10+2,即实现了可以多为输入。但这样就不能停止。
指令:cmp
al,0dh
jz cmper ;与回车进行比较
运用此指令,若输入为回车则跳转至比较程序段。
指令:cmp al,48
jb wrong
cmp al,57
ja wrong ;判断是否为数字
运用此段指令判断键盘输入是否为数字,若不是,则输出提示wrong , input
again:,并跳转到键盘输入数据指令。
3,比较
指令:cmp bx,a
;输入值与随机数比较
jb smaller 小于
cmp bx,a 大于
ja larger
cmp bx,a 等于
jz ok
用输入的数据(存放于bx中)与随机数(存放于a中:mov
a,dx)比较;
如果大于,则输出提示larger , input
again:,并跳转到键盘输入数据指令;
如果小于,则输出提示smaller , input
again:,并跳转到键盘输入数据指令;
如果等于,则提示正确,并结束。
4
源程序
data segment
mess1 db
mess2 db
mess3 db
mess4
db
mess5 db
a dw ?
data ends
stack segment stack
db 20h
dup(0)
stack ends
code segment
assume cs:code,ds:data,ss:stack
begin: mov ax,data
mov ds,ax
mov
ah,9
mov dx,offset mess1
int 21h
call print
mov ah,2ch 取当前时间的秒为随机数
int 21h
mov al,dh
mov ah,0
mov
a,ax
mov bx,0
call zhang
mov ah,4ch
int 21h
zhang proc
push ax
push
bx
push cx
push dx
input: mov ah,1 输入十进制数
int 21h
cmp al,0dh
jz cmper
cmp al,48
jb wrong
cmp al,57
ja
wrong
and al,0fh
mov ah,0
xchg ax,bx
mov cx,10
mul cx
add
bx,ax
jmp input
cmper: call
print
cmp bx,a 输入值与随机数比较
jb
smaller 小于
cmp bx,a
;大于
ja larger
cmp bx,a
;等于
jz ok
smaller:mov ah,9
mov dx,offset mess3
int 21h
call print
mov ax,0
mov bx,0
jmp input
larger: mov
ah,9
mov dx,offset mess2
int 21h
call print
mov ax,0
mov bx,0
jmp input
wrong: mov ah,9
mov
dx,offset mess5
int 21h
call print
mov ax,0
mov bx,0
jmp input
ok: mov ah,9
mov
dx,offset mess4
int 21h
pop dx
pop cx
pop bx
pop ax
ret
print proc near
mov ah,02h
mov dl,0ah
int 21h
mov
dl,0dh
int 21h
ret
print
endp
zhang endp
code ends
end begin
五,运行结果