汇编写函数:关于PUBLIC和EXTRN的区别
PUBLIC伪指令的格式:PUBLIC 标识符,标识符...
该伪指令告诉汇编程序放在PUBLIC之后的标识符(本模块的定义的)可为其他模块使用,这些标识符可以是变量、标号或者过程名。言外之意,它不仅可以使本模块对其进行调用,而且其他模块也可以调用。
EXTRN伪指令格式:EXTRN 类型 (标识符)
该伪指令告诉汇编程序:EXTRN后面括号中的标识符是由外部程序调用,本程序不调用。
在开发一个功能较弱的应用程序时,其执行文件通常可由一个目标文件连接而成。当开发一个功能较强、关系较复杂的应用程序时,其执行文件很难由一个目标文件连接而成,常常是由多个目标文件(模块)连接而成的。各模块之间无疑会存在着相互调用、相互访问数据单元等内在联系,各模块之间的相互联系就产生了这样的问题:程序员如何在源程序中来表达这种联系?为了解决描述各模块之间的联系,汇编语言提供了二条伪指令PUBLIC和EXTRN,它们的作用有点象C/C++语言说明变量、过程和函数是“全局的”或“外部的”。
这二条伪指令的具体用法和含义如下:
1、伪指令PUBLIC
伪指令PUBLIC是用来说明:当前模块中哪些标识符是能被其它模块引用的公共标识符。其说明的一般格式如下: PUBLIC 标识符1, 标识符2, ……
其中:“标识符”可以是变量名、过程名和程序标号,各标识符之间要用逗号分开。 上面说明语句说明了标识符1、标识符2等是公共标识符,可以被其它模块引用。在一个模块中,可用多条PUBLIC伪指令来说明公共标识符。
2、伪指令EXTRN
伪指令EXTRN是用来说明:在当前模块所使用的标识符中,哪些标识符是已在其它模块中被定义为指定类型的标识符。如果当前模块使用了其它模块的标识符,而对它又不加以说明的话,那么,在汇编时,汇编程序将会给出下列出错信息: error nnnnn: undefined symbol : XXXXXX 其中:“nnnnn”是错误号,“XXXXXX”是当前模块中没有定义的标识符。
伪指令EXTRN的一般说明格式如下: EXTRN 标识符1:类型1, 标识符2:类型2, ……
其中:“标识符”和“类型”之间要用冒号“:”连接。
上面语句说明了标识符1、标识符2等是外部标识符,它们在其它模块中已被分别定义为类型1、类型2等,该类型说明符可以是:NEAR、FAR、BYTE、WORD、DWORD等之一。如果在一条说明伪指令中说明了多个标识符,那么,各标识符之间要用逗号分开。
在一个模块中,可用多条EXTRN伪指令来说明本模块所引用的外部标识符。
注意:伪指令EXTRN中所说明的标识符,必须在其定义的模块中被PUBLIC伪指令说明为公共标识符,并且其说明的标识符类型要与该标识符在定义是的类型相一致,否则,要么不能生成其可执行文件,要么其执行文件不能正确运行。
汇编写函数:关于PUBLIC和EXTRN的区别的更多相关文章
- 自写函数VB6 STUFF函数 和 VB.net 2010 STUFF函数 详解
'*************************************************************************'**模 块 名:自写函数VB6 STUFF函数 和 ...
- JS调用函数时候加括号与只写函数名字的区别 fn与fn()的区别
经常见插件里面函数调用的时候只写个函数名字,不写函数参数,甚至连括号也不写,比如说: <!DOCTYPE html> <html> <head> <meta ...
- 油猴Tampermonkey 全局函数 它的注入函数都在 onload里面,直接写函数 都是内部函数,外部要是调用,就要挂靠到window上
油猴Tampermonkey 全局函数 它的注入函数都在 onload里面,直接写函数 都是内部函数,外部要是调用,就要挂靠到window上 window.like111 = function (){ ...
- 写函数,输入n个数字输出最大值和最小值
# ,写函数,传入n个数,返回字典{‘max’:最大值,’min’:最小值}# 例如:min_max(2,5,7,8,4) 返回:{‘max’:8,’min’:2}(此题用到max(),min()内置 ...
- JS函数 函数调用 函数定义好后,是不能自动执行的,需要调用它,直接在需要的位置写函数名。
函数调用 函数定义好后,是不能自动执行的,需要调用它,直接在需要的位置写函数名. 第一种情况:在<script>标签内调用. <script type="text/java ...
- 常见的JS手写函数汇总(代码注释、持续更新)
最近在复习面试中常见的JS手写函数,顺便进行代码注释和总结,方便自己回顾也加深记,内容也会陆陆续续进行补充和改善. 一.手写深拷贝 <script> const obj1 = { name ...
- JQuery的ready函数与JS的onload的区别详解
JQuery的ready函数与JS的onload的区别:1.执行时间window.onload必须等到页面内包括图片的所有元素加载完毕后才能执行.$(document).ready()是DOM结构绘制 ...
- php class中public,private,protected的区别,以及实例
一,public,private,protected的区别 public:权限是最大的,可以内部调用,实例调用等. protected: 受保护类型,用于本类和继承类调用. private: 私有类型 ...
- 关于T-SQL重编译那点事,内联函数和表值函数在编译生成执行计划的区别
本文出处:http://www.cnblogs.com/wy123/p/6266724.html 最近在学习 WITH RECOMPILE和OPTION(RECOMPILE)在重编译上的区别的时候,无 ...
随机推荐
- rsyslog VS syslog-ng,日志记录哪家强?
还有慢慢摸索,NG的MYSQL配置,我始终没搞好. RSYSLOG则比较容易. 另外,也可以每个RSYSLOG直接入库,不需要经过LOG SERVER..如果有一个大内网的话... 配合LOGANAL ...
- Qt修改文件内容
在用Qt进行嵌入式开发的时候,有时需要通过界面永久的改变ip地址等网卡信息.此时只能修改系统中包含网卡信息的文件,下图红框中所示就是文件中的网卡信息. 那么如何修改这四行呢,我的做法是先打开该文本文件 ...
- Android模仿微信语音聊天功能
项目效果如下: 项目目录结构如下: 代码如下: AudioManager.java import java.io.File; import java.io.IOException; import ja ...
- c# 编程添加控件
Button b = new Button();//创建一个新的按钮 b.Text = "test"; //添加到panel1中 panel1.Controls.Add(b);
- UVa133.The Dole Queue
题目链接:http://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem& ...
- mysql基本介绍
RDBMS:1.数据库创建.删除除2.创建表.删除表.修改表3.索引的创建.删除4.用户和权限5.数据增.删.改6.查询 DML:Data Manapulate Language: 数据操作语言 ...
- hdu 5427 A problem of sorting(字符排序)
Problem Description There are many people's name and birth in a list.Your task is to print the name ...
- 表单javascript checkbox全选 反选 全不选
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <meta http ...
- javascript 继承机制设计思想
作者: 阮一峰 原文链接:http://www.ruanyifeng.com/blog/2011/06/designing_ideas_of_inheritance_mechanism_in_java ...
- 面试前的准备---C#知识点回顾----03
经过一天的奔波,喜忧参半,不细表 再回看下标题,C#知识点回顾 再看下内容,数据库3NF 原谅我这个标题党 今天继续回忆 1.HTTP中Post和Get区别 这忒简单了吧,大家是不是感觉到兴奋了,长舒 ...