原始代码:这是一个对数据进行加密的程序。
;宏定义
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
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 ;所置彩色调色板的ID
mov bl,3 ;和ID配套使用的颜色值
int 10h
p pp
p qq
lea si,qw ;把彩色显示偏移地址给si
mov di,5
mov dx,0405h
mov ah,15 ;
int 10h
lp: mov ah,2 ;把光标置到BH=页号,DH、DL=行、列
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 ;把bufa的偏移地址给dx
mov ah,10 ;键盘输入到缓冲区,首地址为dx,即输入到bufa中
int 21h
lea si,bufa+1
mov ch,0
mov cl,[si]
lea di,bufb
n: mov bx,offset bufa ;把bufa的偏移地址给bx
mov al,0
xlat bufa ;加密,待查表格首地址为bufa
mov [di],al ;加密后数字存入bufb
inc di
loop n ;循环加密
mov byte ptr [di],'$'
p info2
p bufb ;输出加密后数字
p info1 ;输出提示信息
lea dx,buf1 ;关闭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 ;加密,待查表格首地址为buf1
mov [di],al ;把加密结果数字存入buf2
inc di
loop n1 ;循环加密
mov byte ptr [di],'$'
p info2
p buf2 ;输出加密后信息
p info1
lea dx,buf3 ;关闭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 ;加密,待查表格首地址为buf1
mov [di],al ;加密后数字存入buf4
inc di ;循环向前加密
loop n2
mov byte ptr [di],'$'
p info2
p buf4 ;输出加密后数字
mov ah,4ch
int 21h
code ends
end s
拆分代码为:宏定义一部分(6.asm),代码一部分(main.asm)
;宏定义
p macro buf
lea dx,buf
mov ah,9
int 21h
endm
end
INCLUDE mylib.lib
;数据段
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
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 ;所置彩色调色板的ID
mov bl,3 ;和ID配套使用的颜色值
int 10h
p pp
p qq
lea si,qw ;把彩色显示偏移地址给si
mov di,5
mov dx,0405h
mov ah,15 ;
int 10h
lp: mov ah,2 ;把光标置到BH=页号,DH、DL=行、列
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 ;把bufa的偏移地址给dx
mov ah,10 ;键盘输入到缓冲区,首地址为dx,即输入到bufa中
int 21h
lea si,bufa+1
mov ch,0
mov cl,[si]
lea di,bufb
n: mov bx,offset bufa ;把bufa的偏移地址给bx
mov al,0
xlat bufa ;加密,待查表格首地址为bufa
mov [di],al ;加密后数字存入bufb
inc di
loop n ;循环加密
mov byte ptr [di],'$'
p info2
p bufb ;输出加密后数字
p info1 ;输出提示信息
lea dx,buf1 ;关闭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 ;加密,待查表格首地址为buf1
mov [di],al ;把加密结果数字存入buf2
inc di
loop n1 ;循环加密
mov byte ptr [di],'$'
p info2
p buf2 ;输出加密后信息
p info1
lea dx,buf3 ;关闭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 ;加密,待查表格首地址为buf1
mov [di],al ;加密后数字存入buf4
inc di ;循环向前加密
loop n2
mov byte ptr [di],'$'
p info2
p buf4 ;输出加密后数字
mov ah,4ch
int 21h
code ends
end s
利用lib.exe生成宏函数库,然后编译运行main即可。