; 本程序通过编译,运行正确
Code Segment
Assume CS:Code,DS:Code
; -----------------------------------------
; 功能:显示指定地址(Str_Addr)的字符串
; 入口:
; Str_Addr=字符串地址(要求在数据段)
; 用法: Output Str_Addr
; 用法举例:Output PromptStr
Output MACRO Str_Addr
lea dx,Str_Addr
mov ah,9
int 21h
EndM
; -----------------------------------------
Encode db '7846302951'
Prompt_Str1 db 'Please input the orical code: $'
Prompt_Str2 db 7,13,10,13,10,'The encode: $'
Prompt_Str3 db 13,10,13,10,'Please record the encode and than press any key to continue...$'
String db 20,?,20 dup(?) ;明码输入缓冲区
; 功能:把用户输入的最多20个数字的明码按位加密后,显示密码
; 入口参数:无
; 出口:显示加密后的密码
New_Int65H Proc Far
cli
push es
push ds
push si
push di
push dx
push cx
push bx
push ax
push cs
pop ds
push cs
pop es
Output Prompt_Str1 ;提示输入明码
cld
lea di,String ;明码字符串地址
mov cx,20 ;明码数字个数,可以不到20个数字,回车键结束明码输入
Read_Encode:mov ah,1
int 21h
cmp al,13 ;回车?
jz Disp_Encode
cmp al,'0'
jb Read_Encode
cmp al,'9'
ja Read_Encode
stosb
loop Read_Encode
Disp_Encode:mov cx,di
sub cx,offset String ;实际输入的明码数字个数
lea si,String ;明码字符串地址
lea bx,Encode ;密码地址
Encoding: lodsb ;读入1位明码
and al,0fh
xlat ;查表,取得对应的密码
mov [si-1],al ;写密码
loop Encoding
mov byte ptr [si],'$' ;显示字符串采用DOS调用,9号功能,要求字符串以“$”结尾
Output Prompt_Str2 ;提示显示密码
Output String ;显示密码
Output Prompt_Str3 ;提示用户记录密码
mov ah,1
int 21h
pop ax
pop bx
pop cx
pop dx
pop di
pop si
pop ds
pop es
iret
New_Int65H EndP
; -----------------------------------------
Start: push cs
pop ds
lea dx,New_Int65H
mov ax,2565h ;设置65H中断向量
int 21h
int 65h ;调用65H中号断向量
Exit_Proc: mov ah,4ch ;结束程序
int 21h
Code ENDS
END Start ;编译到此结束
温馨提示:内容为网友见解,仅供参考