汇编程序设计:lib库的使用以及建立宏库

原始代码:这是一个对数据进行加密的程序。

;宏定义
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即可。
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/hairi1234/article/details/85569881