EXTRN在汇编语言中是什么意思

如题所述

EXTRN在汇编语言:
一定要清楚这是伪指令
说明:在当前模块所使用的标识符中,哪些标识符是已在其它模块中被定义为指定类型的标识符。如果当前模块使用了其它模块的标识符,而对它又不加以说明的话,那么,在汇编时,汇编程序将会给出下列出错信息: error nnnnn: undefined symbol : XXXXXX 其中:“nnnnn”是错误号,“XXXXXX”是当前模块中没有定义的标识符。
最应注意的是伪指令EXTRN中所说明的标识符必须在其定义的模块中被PUBLIC伪指令说明为公共标识符,并且其说明的标识符类型要与该标识符在定义是的类型相一致,否则,要么不能生成其可执行文件,要么其执行文件不能正确运行。

汇编语言的科学定义,其实就是介于机器码(各种01)和高级语言(如C)之间的一种语言。你用C语言写一段程序,其实要在机器上运行的话,机器是不懂的,要经过编译器、汇编器编译,变成汇编,最终再变成机器码,机器根据这些机器码的01可以控制硬件电路完成你程序想执行的操作。
温馨提示:内容为网友见解,仅供参考
第1个回答  2012-07-04
一定要清楚这是伪指令
说明:在当前模块所使用的标识符中,哪些标识符是已在其它模块中被定义为指定类型的标识符。如果当前模块使用了其它模块的标识符,而对它又不加以说明的话,那么,在汇编时,汇编程序将会给出下列出错信息: error nnnnn: undefined symbol : XXXXXX 其中:“nnnnn”是错误号,“XXXXXX”是当前模块中没有定义的标识符。
我认为最应注意的是伪指令EXTRN中所说明的标识符必须在其定义的模块中被PUBLIC伪指令说明为公共标识符,并且其说明的标识符类型要与该标识符在定义是的类型相一致,否则,要么不能生成其可执行文件,要么其执行文件不能正确运行。追问

请问一下,我现在有两段程序,分别独立的有两个功能,一个是液晶显示,一个是万年历,不知道怎么让他们合起来,就是说在一个程序里同时实现。当然前提是汇编语言。

追答

我想应该用子程序调用 call 再ret
具体指令得看你的硬件和接口实现了

本回答被网友采纳
第2个回答  2022-02-25

通常,EXTRN 要和 PUBLIC 联用。

一个大型的程序,可能,由许多人合作完成,这就可能有多个源程序文件。

那么,在一个程序中,调用另一个文件的变量,就需要用 EXTRN 加以说明。

而在另一个文件中的该变量,必须用 PUBLIC 说明为公共变量。

第3个回答  2012-07-05
EXTRN语句(可能出现在汇编源文件的任何地方)声明在其他对象模块中用PUBLIC声明的符号。
第4个回答  2012-07-05
call 再ret

51单片机汇编语言后缀
51单片机汇编语言后缀为c语言中指令功能。51单片机汇编语言后缀为c语言中指令功能。51汇编语言extrndata,51单片机汇编伪指令功能:这一伪指令用来自定义名字,以替换源程序中原来的保留字,替换的保留字均可等效地用于子程序中。

汇编语言复习题求答案
主累加器。运算结果低8位中1的个数 立即数 10000 段属性、偏移量属性、类型属性 EXTRN 位 初始化、循环体部分、控制部分 10000001 -120 编译程序 BP 0 64K BX、BP、SI、DI CL MACRO、ENDM 逢二进一 SS STD 简答题 1-2) SUB AX,BX 3-5) ADD DL,[BX][SI]6) MOV CL,5 SHL ...

汇编程序,错误在哪?
,表示汇编语言程序出错;接着有一个数字指明出错类别:'2'为严重错误,'4'为严肃警告,'5'为建议性警告,最后三位为错误编号.错误编号错误描述0Block nesting error嵌套出错.嵌套的过程,段,结构,宏指令或重复块等非正常结束.例如在嵌套语句中有外层的结束语句,而无内层的结束语局1Extra characters on line一语句行...

在C++ 程序中调用被 C 编译器编译后的函数,为什么要加 extern “C...
(使用术语就是,extern 'C'意思是这个函数有C链接,但这个意思表达实在不怎么清晰。不管如何,它总意味着一件事:名变换被禁止了。)例如,如果不幸到必须要用汇编写一个函数,你也可以申明它为extern 'C':\/\/ this function is in assembler - don't mangle its nameextern "C" void twiddleBits(unsigned char bi...

求大神帮忙说一下这个电子钟的程序详细说明解释(汇编语言的)
外部显示子程序(跟硬件设计有关,原文未列出)ORG0000H ;LJMPSTAR ;转主程序ORG000BH ;LJMPINT_Timer0 ;转50ms定时器中断处理程序ORG0100H ;STAR:MOVSP,#60H ;主程序MOVms50,A ;50ms计数器初始化到0MOVhour,#12 ;小时初始化为12MOVmin,#59 ...

输出为什么是 44 300
}接下来让我们看看编译器把代码翻译成汇编之后的样子 _DATA SEGMENT$SG2940 DB '%d', 0aH, '%d', 0aH, 00H_DATA ENDSPUBLIC _mainEXTRN _printf:PROC_TEXT SEGMENT_f$ = -5 ; size = 1_e$ = -4 ; size = 1_b$ = -3 ; size = 1_c$ = -2 ...

如何用汇编语言实现15+10并以16进制输出?
masm:.686P.XMMinclude listing.inc.modelflatINCLUDELIB LIBCMTINCLUDELIB OLDNAMESCONSTSEGMENT$SG3849DB'%x', 00HCONSTENDSPUBLIC_mainEXTRN_printf:PROC_TEXTSEGMENT_mainPROCpushebpmovebp, esppush25pushOFFSET $SG3849call_printfaddesp, 8xoreax, eaxpopebpret0_mainENDP_TEXTENDSEND ...

汇编语言中 MOV AX,[0100H]+2 和 MOV AX, [0100H+2]两种写法效果一样吗...
汇编语言中 MOV AX,[0100H]+2 和 MOV AX, [0100H+2]两种写法效果一样吗汇编语言2005—2006学年第二学期期末考试复习题及参考答案一、填空1.十进制数369转换成二进制数为()2,转换成十六进制数为()16.2.计算机中

...以小组为单位进行开发,乐谱参考《IBM-PC汇编语言程序设计实验教程...
在delay.asm里实现:;--- public delay code segment assume cs:code delay proc far push ax ms250: mov cx,16666 us015: in al,61h and al,10h cmp al,ah je us015 mov ah,al loop us015 dec bl jnz ms250 pop ax ret

汇编语言高手进,急用,在线等答案!请确保答案的正确性!
;还这里IMP L1,IMP指令我没看过,只看过JMP ;如果IMP是JMP的话,那会不会出现死循环的,2.;这里由题中JB知应该是无符号数相比,;所以不用考虑符号了 CMP DX,BX JA L2 JB L1 CMP AX,CX JA L2 3.(1).XOR AL,00010101B (2).TEST AL,00000010B JZ EXIT TEST AL,00001000B JZ EXIT ...

相似回答