16位汇编 多文件 intel汇编 编译器masm5.0 调用子程序库即静态库的自定义函数 W

时间:2022-01-08 03:18:29

;以下是16位汇编 创建静态库,并调用静态库中的函数

;多文件汇编格式

;编译方法(此处用的是masm 5.0,如果是其他的编译器,,有可能不能编译)

;第一种,编译方法

;1、masm main.asm  生成.obj文件

;2、masm lib.asm  生成.obj文件

;3、link main.obj lib.obj 生成.exe文件

;第二种,编译方法

;1、masm main.asm  生成.obj文件

;2、masm 16lib.asm  生成.obj文件

;3、lib 16lib.lib 16lib.obj  由.obj文件生成.lib文件,即静态库文件,可以做为函数库使用

;4、link main.obj  16lib.lib  由.obj .lib两个文件生成.exe文件

;=======================================

;(main.asm)

.model small

.stack 100h

.386

.data  

  Msg db "in my world! you know?",0  

.code

  extrn int21h_40h:far  ;引用外部函数,注意:masm5.0用的是extrn ,少一个e字符

main PROC  

  mov ax,@data  

  mov ds,ax    

  push di

  mov di,offset Msg  

  call int21h_40h     

  pop di  

  mov ax,4c00h

  int 21h main

  ENDP

END main

;==================================

;(16lib.asm)

.model small

.stack .data

.code   

  public int21h_40h ;定义外部函数

;********MS-DOS 中断 int 21h功能调用***********************

;--------int 21h 功能号 40h事例-------------

;说明:在标准输出上显示字符串

;输入参数:di = 字符串地址

;输出参数:无

int21h_40h proc far    

  xor cx,cx  

  mov dx,di ;在循环前保存参数,由于后面循环会改变di     

        ;此处也是功能 40h 的参数

L1: 

  ;计算字符串长度   

  cmp byte ptr[di],0  

  je L2  

   inc cx  

  inc di   

  jmp L1     

L2: 

  ;显示字符串到标准输出设备上  

  mov ah,40h     

  mov bx,1     

   int 21h

   ret

int21h_40h endp

end

16位汇编 多文件 intel汇编 编译器masm5.0 调用子程序库即静态库的自定义函数 WINDOWS