高分求一个高手做一简单的汇编程序

开发一个软中断处理程序,将输入的数字密码置换加密后从显示屏幕上输出(当输入回车键后,认为输入的数字密码结束)。要求利用空闲中断号65H实现软中断设置,密码不超过20位,以$符结尾。采用以下密码表:
原数字:0、1、2、3、4、5、6、7、8、9
密码字:7、8、4、6、3、0、2、9、5、1
要求1:从键盘输入一个字符采用DOS调用,1号功能
要求2:显示字符串采用DOS调用,9号功能
例: 输入的明码861903
显示的密码528176

; 本程序通过编译,运行正确
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 ;编译到此结束
温馨提示:内容为网友见解,仅供参考
第1个回答  2009-06-02
楼下汤旺河边是大神,分给他吧
////////////////////

DATA SEGMENT
TABLE DB 39H,30H,38H,32H,37H,34H,36H,33H,31H,35H
RESULT DB 4 DUP(?)
DATA ENDS
CODE SEGMENT
ASSUME DS:DATA,CS:CODE
MAIN PROC FAR
MOV AX,DATA
MOV DS,AX
MOV ES,AX
LEA BX,TABLE
LEA DI,RESULT
MOV AX,1234
MOV SI,1000
CALL NUMBER
MOV SI,100
CALL NUMBER
MOV SI,10
CALL NUMBER
MOV SI,1
CALL NUMBER
LEA DI,RESULT
MOV CX,4
NEXT:
MOV DL,[DI]
MOV AH,2H
INT 21H
INC DI
LOOP NEXT

mov ah,1
int 21h
MOV AX,4C00H
INT 21H
MAIN ENDP
NUMBER PROC NEAR
MOV DX,0
DIV SI
MOV SI,DX
XLAT
STOSB
MOV AX,SI
RET
NUMBER ENDP
CODE ENDS
END MAIN
第2个回答  2009-06-03
恩 我也可以高分求一个银行密码破解程序
相似回答
大家正在搜