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

;以下是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

时间: 2024-10-23 16:11:19

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

bmp文件格式中rgb555与rgb888之间的转换,24位与16位位图的转换

今日,有同事问我,rgb555模式下的位图文件的格式问题,于是花了一下午的时间通过猜测与测试,分析出了如下bmp文件在rgb555模式下的文件存储规律: 1:bmp文件的文件信息头中的biBitCount数据应该为16 在rgb555模式下,一个像素占用2字节,rgb分别占用5位,另外有一位是填充位. 2:16位数据的组成如下 第一个字节:g5g4g3b7b6b5b4b3 第二个字节:0r7r6r5r4r3g7g6 其中第二个字节的左边第一位为填充位,我在实验中用0填充. 3:该16位bmp图像

链接(extern、static关键词\头文件\静态库\共享库)

原文链接:http://www.orlion.ga/781/ 一. 多目标文件的链接 假设有两个文件:stack.c: /* stack.c */ char stack[512]; int top = -1; void push(char c) {         stack[++top] = c; } char pop(void) {         return stack[top--]; } int is_empty(void) {         return top == -1; }

Linux编译多个不同目录下的文件以及静态库、动态库的使用

先看两篇博文,作为基础知识.如果对C/C++编译链接过程都了解的话,可以跳过不看. http://www.firedragonpzy.com.cn/index.php/archives/2556 http://www.cppblog.com/shifan3/archive/2007/01/05/17325.html 一.  编译不同目录下的多个文件 各个文件的布局如下: head.h文件的代码: [cpp] view plaincopy #ifndef  HEAD_H #define  HEAD

iOS 创建静态库文件时去掉其中的Symbols

在工程中创建静态库文件时,默认会将一些Symbols加到静态库文件中,这样做有两个缺点: 1.如果引用静态库文件的工程中发生了bug,就会直接跳转到静态库的源码. 2.静态库文件的大小会因此翻几番.本人最近做的这个静态库文件中,去掉symbols前大小为7.8MB左右,去掉以后大小为2.8MB. 要去掉Symbols,首先打开Build Settings并选中静态库的Target,然后设置下列选项: 如果有错误或遗漏,欢迎批评指正. iOS 创建静态库文件时去掉其中的Symbols,布布扣,bu

静态库文件和动态库文件的制作

1. 静态库文件1) 新建项目->win32->win32控制台应用程序->输入库文件名称->确定->选择静态库.2) 创建要调取的内容,比如一下:Person.h:#pragma onceclass Person{public: Person(void); ~Person(void);}; Person.cpp: #include "StdAfx.h"#include "Person.h"#include<iostream>

plist文件无法打包进.a静态库中

问题: 之前一直在做静态库的编写与维护,也一直知道静态库的图片资源是没办法打进.a中的.可是突然有个想法.由于有非常多參数的配置是在一个plist文件里的.尽管也知道这是一个plist文件,可是想想和图片资源还是有一定差别的.所以就尝试着是否能把plist打进静态库中. 分析: 1. 创建了一个简单的生成静态库的功能,然后公开了一个接口.用来输出读取plist文件的结果. 2. 创建一个简单的project,来使用上一步生成的.a文件,然后调用那个公开的接口. 3. 结果是无法读取,输出为nul

iOS项目引用静态库文件.a

由于开发的项目中使用了静态库文件(.a文件),因此专门对它进行了简单的学习.静态库文件包装的是经常使用的公共代码,便于代码的复用. 1.生成静态库文件(static library file).主要包括以下几个主要步骤: (1)创建静态库项目 命名为Stone,并在生成的Stone类里面添加一个类方法+printInfo,如图: 未编译前,Products文件夹下的libStone.a是红色的,编译之后变为黑色,如图: 注意顶部选择"iOS device"生成用于真机的静态库文件,选择

16位汇编中的伪指令

汇编中的伪指令(基于汇编编译器MASM讲解) 一丶什么是伪指令,以及作用 首先我们用汇编开发效率低,如何才能开发效率高,甚至开发速度比C语言或这个高级语言快 答案: 伪指令 什么是伪指令 伪指令是汇编编译器提供的,比如昨天我们写的汇编代码,假设调用一个Call我们每次都要手工处理 保存栈底,开辟就变量空间,保存寄存器环境....每次都要做,特别麻烦,所以编译器帮我们提供了伪指令,只要我们 按照汇编编译器的语法去写,那么这些汇编编译器则会自动帮我们补全 比如昨天的代码: ;调用开始,把参数压栈 m

16位汇编第三讲 分段存储管理思想

内存分段 一丶分段(汇编指令分段) 1.为什么分段? 因为分段是为了更好的管理数据和代码,就好比C语言为什么会有内存4区一样,否则汇编代码都写在一起了,执行的话虽然能执行,但是代码多了,数据多了,搞不清什么是代码 什么是数据了. 汇编分段代码 1 e 1000:0 "Hello$" 首先给1000:0的物理地址写入Hello字符串 2 d 1000:0 显示一下是否显示成功 3 4 mov ax,1000 给ax赋值数据,下面要分段了,所以需要给ax赋值 5 mov ds,ax 开始分