本人有一个汇编语言的加密程序。看不太懂是什么意思,求高手赐教!

p macro buf
lea dx,buf
mov ah,9
int 21h
endm
data segment
pp db 0dh,0ah,' welcome you to run this programme!$'
qq db 0dh,0ah,' when you input number,press enter.$'
qw db 0dh,0ah,'6eh,52h,94h,52h,$'
qa db 0dh,0ah,' $'
info1 db 0dh,0ah,0dh,' input number:$'
info2 db 0dh,0ah,' output number:$'
bufa db 20
db ?
db 20 dup(0)
bufb db 20 dup(0)
buf1 db 20
1. db ?
db 20 dup(0)
buf2 db 20 dup(0)
buf3 db 20
db ?
db 20 dup(0)
buf4 db 20 dup(0)
data ends
stack segment
db 100 dup(0)
stack ends
code segment
assume ds:data,cs:code
s: mov ax,data
mov ds,ax
mov ah,0
mov al,3
int 10h
mov ah,0bh
mov bh,0
mov bl,3
int 10h

p pp
p qq
lea si,qw
mov di,5

mov dx,0405h
mov ah,15
int 10h
lp: mov ah,2
inc dl
int 10h
mov bl,[si]
mov cx,1
mov ah,9
int 10h
inc si
jnz lp
p qa
p qa
p qa
p info1
lea dx,bufa
mov ah,10
int 21h
lea si,bufa+1
mov ch,0
mov cl,[si]
lea di,bufb
n: mov bx,offset bufa
mov al,0
xlat bufa
mov [di],al
inc di
loop n
mov byte ptr [di],'$'
p info2
p bufb

p info1
lea dx,buf1
mov ah,10
int 21h
lea si,buf1+1
mov ch,0
mov cl,[si]
lea di,buf2
n1: mov bx,offset buf1
mov al,2
xlat buf1
mov [di],al
inc di
loop n1
mov byte ptr [di],'$'
p info2
p buf2

p info1
lea dx,buf3
mov ah,10
int 21h
lea si,buf3+1
mov ch,0
mov cl,[si]
lea di,buf4
n2: mov bx,offset buf3
mov al,3
xlat buf3
mov [di],al
inc di
loop n2
mov byte ptr [di],'$'
p info2
p buf4
mov ah,4ch
int 21h
code ends
end s

1、p macro buf
lea dx,buf
mov ah,9
int 21h
endm
定义一个宏,名称为p,以后在程序中出现p的地方时,就相当于将中间的三行插入到了那里,这个宏调用了DOS中断,9号,输出DS:DX指向的内存中的一段字符串,以$为结束符,所以
p pp
p qq
等即表示输出pp qq中的字符串
2、mov ah,0
mov al,3
int 10h
mov ah,0bh
mov bh,0
mov bl,3
int 10h
这是BIOS中断,对CRT即显示器进行初始化(功能号AH=0)和设置屏幕彩色背景(AH=0B),具体入口参数你查一下就知道了
3、mov dx,0405h
mov ah,15
int 10h
mov ah,2
inc dl
int 10h
是15号和2号BIOS中断调用,取当前屏幕状态和设置光标位置到第四行第6列(DX=行 列)
4、mov bl,[si]
mov cx,1
mov ah,9
int 10h
inc si
jnz lp
输出qw的字符串
5、 lea dx,bufa
mov ah,10
int 21h
利用DOS中断从键盘输入一段字符串,存到DS:DX的内存区域,其中第二个字节存放实际输入的字符数,具体格式自查
6、lea si,bufa+1
mov ch,0
mov cl,[si]
lea di,bufb
n: mov bx,offset bufa
mov al,0
xlat bufa
mov [di],al
inc di
loop n
mov byte ptr [di],'$'
是将刚才输入的字符串拷贝到bufb缓冲区中,并在结尾加$结束符
7、p info2
p bufb
p info1
输出info2、bufb\info1中的字符串
8、下面的程序与上面的思路和功能相同,结果是要求用户输入4段不超过20个字符的字符串(以回车结束),并将这些字符串原样输出
温馨提示:内容为网友见解,仅供参考
第1个回答  2011-05-13
好嘛
我也坐等答案吧
相似回答