![]() |
#2
zaixuexi2010-12-12 22:13
|

DATAS SEGMENT
table dw prog4,prog1,prog2,prog3,prog4
lat1 db 0ah,0dh,'(1) GUESS NUMBER GAME $'
lat2 db 0ah,0dh,'(2) CHAR SELECTION PROGRAM $'
lat3 db 0ah,0dh,'(3) PASSWORD PROGRAM $'
lat4 db 0ah,0dh,'(4) PRESS "ESC" TO QUIT $'
mess1 db 0ah,0dh,'input 1-4:$'
mess2 db 0ah,0dh,'Your selection is 1,the program will execute GUESS NUMBER GAME!$'
mess3 db 0ah,0dh,'Your selection is 2,the program will execute CHAR SELECTION PROGRAM!$'
mess4 db 0ah,0dh,'Your selection is 3,the program will execute PASSWORD PROGRAM!$'
mess5 db 0ah,0dh,'Your selection is 4,the program will execute PRESS "ESC" TO QUIT!$'
mess6 db 0ah,0dh,'will you continue program really?(Y:N)$'
mess7 db 0ah,0dh,'Please press ESC key to exit!$'
M db '5'
N db ?
str11 db 0ah,0dh,'now please input a number: ','$'
str12 db 'TOO BIG','$'
str13 db 'TOO SMALL','$'
str14 db 'YOUR ARE RIGHT','$'
str21 db 0ah,0dh,'you can input "<CR>" to go out,if you want go on ,please input others besides "<CR>" $'
str22 db 0ah,0dh,'you input:','$'
str23 db 0ah,0dh,'IT IS A DIGITAL','$'
str24 db 0ah,0dh,'IT IS A LOWCASE LETTER','$'
str31 db '123'
str32 db 0ah,0dh,'please input a string:','$'
len equ str32-str31
str_d db 50,?,50 dup(?)
mess31 db 0ah,0dh,'MATCH!$'
mess32 db 0ah,0dh,'NOMATCH!,PROGRAM TERMINATED!$'
DATAS ENDS
CODES SEGMENT
ASSUME CS:CODES,DS:DATAS
START:
MOV AX,DATAS
MOV DS,AX
push ax
mas:
lea dx,lat1
mov ah,09h
int 21h
lea dx,lat2
mov ah,09h
int 21h
lea dx,lat3
mov ah,09h
int 21h
lea dx,lat4
mov ah,09h
int 21h
mov dx,offset mess1
mov ah,09h
int 21h
mov ah,1
int 21h
and al,03h
mov ah,0
shl ax,1
mov bx,ax
push bx
to: jmp table[bx]
prog1:
mov dx,offset mess2
mov ah,09h
int 21h
mov bl,M
mov dx,offset str11
mov ah,09h
int 21h
mov ah,01h
int 21h
mov N,al
cmp bl,al
jb a
cmp bl,al
ja b
mov dl,0ah
mov ah,02h
int 21h
mov dl,0dh
int 21h
mov dx,offset str14
mov ah,09h
int 21h
jmp let1
a: mov dl,0ah
mov ah,02h
int 21h
mov dl,0dh
int 21h
mov dx,offset str13
mov ah,09h
int 21h
jmp let1
b: mov dl,0ah
mov ah,02h
int 21h
mov dl,0dh
int 21h
mov dx,offset str12
mov ah,09h
int 21h
jmp let1
prog2:
lea dx,mess3
mov ah,09h
int 21h
mov dx,offset str21
mov ah,09h
int 21h
mov dx,offset str22
mov ah,09h
int 21h
mov ah,01h
int 21h
cmp al,0dh
jz exit
cmp al,'1'
jb another
cmp al,'9'
ja another
mov dx,offset str23
mov ah,09h
int 21h
jmp let1
another:
cmp al,'A'
jb another2
cmp al,'Z'
ja another2
mov dx,offset str24
mov ah,09h
int 21h
jmp let1
another2:
cmp al,'a'
jb another3
cmp al,'z'
ja another3
mov dx,offset str24
mov ah,09h
int 21h
jmp let1
another3:
jmp let1
prog3:
lea dx,mess4
mov ah,09h
int 21h
mov dx,offset str32
mov ah,09h
int 21h
pop ax
mov es,ax
lea dx,str_d
mov ah,0ah
int 21h
xor cx,cx
mov cl,str_d+1
cmp cl,len
jne ms
lea si,str31
lea di,str_d+2
mad:mov al,ds:[si]
mov bl,es:[di]
cmp al,bl
jne ms
inc si
inc di
loop mad
lea dx,mess31
mov ah,09h
int 21h
jmp let1
ms:
lea dx,mess32
mov ah,09h
int 21h
let1:
pop bx
lea dx,mess6
mov ah,09h
int 21h
mov ah,01h
int 21h
cmp al,'Y'
jz to
cmp al,'N'
jz mas
prog4:
lea dx,mess5
mov ah,09h
int 21h
lea dx,mess7
mov ah,09h
int 21h
mov ah,01h
int 21h
cmp al,27
jZ exit
jmp mas
exit: MOV AH,4CH
INT 21H
CODES ENDS
END START
在做第三个程序时,假设我输入‘123’,仍然得到的是nomatch table dw prog4,prog1,prog2,prog3,prog4
lat1 db 0ah,0dh,'(1) GUESS NUMBER GAME $'
lat2 db 0ah,0dh,'(2) CHAR SELECTION PROGRAM $'
lat3 db 0ah,0dh,'(3) PASSWORD PROGRAM $'
lat4 db 0ah,0dh,'(4) PRESS "ESC" TO QUIT $'
mess1 db 0ah,0dh,'input 1-4:$'
mess2 db 0ah,0dh,'Your selection is 1,the program will execute GUESS NUMBER GAME!$'
mess3 db 0ah,0dh,'Your selection is 2,the program will execute CHAR SELECTION PROGRAM!$'
mess4 db 0ah,0dh,'Your selection is 3,the program will execute PASSWORD PROGRAM!$'
mess5 db 0ah,0dh,'Your selection is 4,the program will execute PRESS "ESC" TO QUIT!$'
mess6 db 0ah,0dh,'will you continue program really?(Y:N)$'
mess7 db 0ah,0dh,'Please press ESC key to exit!$'
M db '5'
N db ?
str11 db 0ah,0dh,'now please input a number: ','$'
str12 db 'TOO BIG','$'
str13 db 'TOO SMALL','$'
str14 db 'YOUR ARE RIGHT','$'
str21 db 0ah,0dh,'you can input "<CR>" to go out,if you want go on ,please input others besides "<CR>" $'
str22 db 0ah,0dh,'you input:','$'
str23 db 0ah,0dh,'IT IS A DIGITAL','$'
str24 db 0ah,0dh,'IT IS A LOWCASE LETTER','$'
str31 db '123'
str32 db 0ah,0dh,'please input a string:','$'
len equ str32-str31
str_d db 50,?,50 dup(?)
mess31 db 0ah,0dh,'MATCH!$'
mess32 db 0ah,0dh,'NOMATCH!,PROGRAM TERMINATED!$'
DATAS ENDS
CODES SEGMENT
ASSUME CS:CODES,DS:DATAS
START:
MOV AX,DATAS
MOV DS,AX
push ax
mas:
lea dx,lat1
mov ah,09h
int 21h
lea dx,lat2
mov ah,09h
int 21h
lea dx,lat3
mov ah,09h
int 21h
lea dx,lat4
mov ah,09h
int 21h
mov dx,offset mess1
mov ah,09h
int 21h
mov ah,1
int 21h
and al,03h
mov ah,0
shl ax,1
mov bx,ax
push bx
to: jmp table[bx]
prog1:
mov dx,offset mess2
mov ah,09h
int 21h
mov bl,M
mov dx,offset str11
mov ah,09h
int 21h
mov ah,01h
int 21h
mov N,al
cmp bl,al
jb a
cmp bl,al
ja b
mov dl,0ah
mov ah,02h
int 21h
mov dl,0dh
int 21h
mov dx,offset str14
mov ah,09h
int 21h
jmp let1
a: mov dl,0ah
mov ah,02h
int 21h
mov dl,0dh
int 21h
mov dx,offset str13
mov ah,09h
int 21h
jmp let1
b: mov dl,0ah
mov ah,02h
int 21h
mov dl,0dh
int 21h
mov dx,offset str12
mov ah,09h
int 21h
jmp let1
prog2:
lea dx,mess3
mov ah,09h
int 21h
mov dx,offset str21
mov ah,09h
int 21h
mov dx,offset str22
mov ah,09h
int 21h
mov ah,01h
int 21h
cmp al,0dh
jz exit
cmp al,'1'
jb another
cmp al,'9'
ja another
mov dx,offset str23
mov ah,09h
int 21h
jmp let1
another:
cmp al,'A'
jb another2
cmp al,'Z'
ja another2
mov dx,offset str24
mov ah,09h
int 21h
jmp let1
another2:
cmp al,'a'
jb another3
cmp al,'z'
ja another3
mov dx,offset str24
mov ah,09h
int 21h
jmp let1
another3:
jmp let1
prog3:
lea dx,mess4
mov ah,09h
int 21h
mov dx,offset str32
mov ah,09h
int 21h
pop ax
mov es,ax
lea dx,str_d
mov ah,0ah
int 21h
xor cx,cx
mov cl,str_d+1
cmp cl,len
jne ms
lea si,str31
lea di,str_d+2
mad:mov al,ds:[si]
mov bl,es:[di]
cmp al,bl
jne ms
inc si
inc di
loop mad
lea dx,mess31
mov ah,09h
int 21h
jmp let1
ms:
lea dx,mess32
mov ah,09h
int 21h
let1:
pop bx
lea dx,mess6
mov ah,09h
int 21h
mov ah,01h
int 21h
cmp al,'Y'
jz to
cmp al,'N'
jz mas
prog4:
lea dx,mess5
mov ah,09h
int 21h
lea dx,mess7
mov ah,09h
int 21h
mov ah,01h
int 21h
cmp al,27
jZ exit
jmp mas
exit: MOV AH,4CH
INT 21H
CODES ENDS
END START