在网上找了下,有很多种办法,结合自己试验,总结如下:(仅仅针对部分环境试验了)
总体来说方法有如下几种:
1. gettim
2. system_clock
3. cpu_time
下面分别介绍
1. gettim
需要使用 DFLIB
模块
使用如下:
CALL GETTIM
(
ihr, imin, isec, i100th
)
! Program to demonstrate GETDAT and GETTIM
USE DFLIB
INTEGER(2) tmphour, tmpminute, tmpsecond, tmphund
CALL GETDAT(tmpyear, tmpmonth, tmpday)
CALL GETTIM(tmphour, tmpminute, tmpsecond, tmphund)
WRITE (*, 901) tmphour,tmpminute,tmpsecond,tmphund
901 FORMAT(I2, ':', I2.2, ':', I2.2, ':', I2.2)
在compaq visual fortran下可以运行,但是在Ubuntu g77下无法编译通过。
2. system_clock
CALL SYSTEM_CLOCK ([count] [, count_rate] [,
count_max])
count
(Optional; output) Must be scalar and of type default
integer. It is set to a value based on the current value of the processor clock.
The value is increased by one for each clock count until the value
count_max is reached, and is reset to zero at the next count.
(count lies in the range 0 to count_max.)
count_rate
(Optional; output) Must be scalar and of type default
integer. It is set to the number of processor clock counts per second.
If default integer is INTEGER(2), count_rate is
1000. If default integer is INTEGER(4), count_rate is 10000. If default
integer is INTEGER(8), count_rate is 1000000.
count_max
(Optional; output) Must be scalar and of type default
integer. It is set to the maximum value that count can have, HUGE(0).
这个的返回值的单位和integer的位数有关系,也就是和系统有关系。在使用时要注意这一点。
integer :: time(0:1),timediff
call system_clock(time(0))
C YOUR PROGRAM HERE
call system_clock(time(1))
timediff = time(1)-time(0)
在compaq 和 g77下都可以编译通过
3. cpu_time
CALL CPU_TIME (time) 返回值的单位为秒
Must be scalar and of type real. It is an INTENT(OUT)
argument. 必须是实数或者标量
If a meaningful time cannot be returned, a processor-dependent negative value
is returned. 返回值为负的时候要注意了。
REAL time_begin, time_end
CALL CPU_TIME ( time_begin )
!task to be timed
CALL CPU_TIME ( time_end )
PRINT *, 'Time of operation was ', time_end - time_begin, ' seconds'
compaq和g77均编译通过。
以上3者在compaq下都能编译通过。 三者得到的时间差不多。推荐使用cpu_time。system_clock由于
单位不确定,不是很好用。gettim的变量太多。
在g77下,后两者通过编译。同样推荐使用cpu_time。cpu_time是g95加入的语法,不知道为什么g77
也可以编译通过,求解释。
初步结果就是这样了,以后有新发现再更新。欢迎转载,转载请注明出处。
http://hi.baidu.com/zhaolegend/blog/item/9117dfcef8d43b8bc9176852.html
在网上找了下,有很多种办法,结合自己试验,总结如下:(仅仅针对部分环境试验了)总体来说方法有如下几种:1. gettim2. system_clock3. cpu_time下面分别介绍1. gettim需要使用 DFLIB 模块使用如下:CALL GETTIM (ihr, imin, isec, i100th)ihr (Output)
从
Windows
出现开始,汇编语言似乎在慢慢地销声匿迹,但本书可以让人放弃这个观点,其实在Win32环境下,汇编语言依然强大。
Why——为什么选择Win32汇编
选择Win32汇编的理由是什么呢?
在DOS时代,学习汇编就是学习系统底层编程的代名词,仅要成为一名入门级的汇编
程序
员,就需要学习从CPU结构、CPU工作方式、各种硬件的编程方法到DOS工作方式等范围很广的知识。随着
Windows
时代的到来,
Windows
像一堵巨大的墙,把我们和
计算
机的硬件隔离开。对于DOS的汇编
程序
员来说,就像在一夜之间,我们发现自己曾经学过的几乎所有的东西都被
Windows
封装到内核中去了,由于保护模式的存在,我们又无法像在DOS下那样闯入系统内核为所欲为。在
Windows
下用任何语言编程都必须遵循
Windows
的规范,汇编也不例外,也就是说,汇编不再是一种“有特权”的语言。面对汹涌而来的Visual C++,Visual Basic,PowerBuilder和Java等各个领域的猛将,从DOS时代“为所欲为”的“系统警察”岗位下岗,在其他领域又没有一技之长,汇编语言似乎失去了生存的意义,有很多人在DOS转向
Windows
的时候放弃了汇编语言。
但是经过短暂的失落,摆正了自己在系统中的位置,我们发现从“系统警察”转换到遵循
Windows
规范的“好市民”后,汇编语言又慢慢地在这个世界流行起来了。毕竟,不能为所欲为也可以有好的一面,我们可以不必再考虑一些老大难的问题,如
程序
运行
时会面对什么样的显示卡,如何驱动不同的打印机,内存不够了如何用磁盘交换,等等。我们也可以在了解更少硬件知识的情况下就可以掌握Win32的汇编编程。而且,我们惊喜地发现,做了“好市民”以后,我们反而拥有了和其他语言同样的权利——为了做图形和界面等方面的功能,汇编
程序
员在DOS时代连做梦都在羡慕C语言庞大的函数库,而现在,
Windows
为我们提供了比这还要多得多的函数,以至于其他大部分语言可以做出来的功能,汇编都可以做,而其他语言做不到的功能,汇编照样可以做!所以这就是理由之一:Win32汇编可以当做一种功能强大的开发语言使用,使用它完全可以开发出大型的软件来。
正因为Win32汇编看上去不再那样低级,于是有读者曾经提出:Win32汇编讲的都是用API来写
程序
,和高级语言差不多,以前在DOS下使用的中断什么的都不能用,所以没有什么新奇的了。还有读者认为本书只不过是MSDN的汇编版本而已。言下之意就是:学汇编就是为了了解高级语言底下一层的功能,但现在Win32汇编却使用和C++等语言相同的API接口,既然和高级语言处于同一个级别,我们为什么还要去和机器指令打交道呢,还不如去学Visual C++方便。
但是我们可以这样问一问自己:
问:在DOS汇编中我们为什么用中断功能?
答:为了使用DOS内核提供的功能。
问:在DOS中我们常常自己用操作I/O端口的方法读写硬盘或操作显卡吗?
答:不,我们用系统提供的int 13h和int 10h。
同样,在Win32汇编里使用API也是为了使用
Windows
内核提供的功能。只不过使用的方式不再是中断方式而已,这不是Win32汇编语言“高级化”了,而是高级语言因为使用
Windows
的API接口而“低级化”了,其代价就是无法移植到其他系统,用Visual C++写的
程序
是无法移植到其他操作系统
平台
上的,只有和
平台
无关的ANSI C++等才能算是真正意义上的高级语言。
其实,任何汇编语言都是和操作系统密切相关的,不管是DOS汇编、Win32汇编,还是
Linux
汇编,都是基于特定的操作系统的,如果一定要绕过操作系统,那么就不会有DOS汇编和Win32汇编的区别了,但是这样的话我们不是在学汇编,而是在自己开发操作系统。高级语言在不同的操作系统上看起来都差不多,但作为一种低级语言,不同操作系统上的汇编就是不同的世界。所以,既然
Windows
和DOS是两个完全不同的操作系统,我们就必须抛弃DOS汇编中的大部分概念从头开始学习Win32汇编。这就是理由之二:Win32汇编是
Windows
环境下一种全新的编程语言。
Win32环境下的很多高级语言,如Visual C++和Visual Basic等,一如既往地对实现的细节进行了或深或浅的封装,就连最能表现
Windows
特征的部分,如消息循环和多线程的处理等内容也都被隐藏封装,使我们在使用它们进行可视化编程的同时,无法全面了解Win32
程序
运行
的具体方式。在学习Win32汇编以后,这些隐藏在高级语言后面的细节就暴露出来了。
由于封装的关系,各种高级语言或多或少存在某种“缺陷”,比如VB不支持指针,结果很多需要使用指针的API用起来就很不方便,像多线程一类的特征在VB中就无法实现,PowerBuilder也是如此;C语言已经是最灵活的高级语言了,但还是无法在代码级别处理某些需求;而汇编语言见到的是一个最真实的操作系统,它可以用最灵活的方式使用各种系统功能,第13章中有关进程隐藏的内容就是最好的写照。所以理由之三就是:使用Win32汇编语言是了解操作系统
运行
细节的最佳方式。
最后的理由根本不是理由,而是必然的选择,当我们在
Windows
环境下进行加密解密、逆向工程,还有病毒、木马等有害代码的分析和防治工作时,Win32汇编是唯一的选择。在任何讨论这方面内容的书籍中,汇编代码的篇幅总是很大的。因此,要想深入了解这些内容的前提就是深入汇编编程。
How——如何学习Win32汇编
以往的汇编书籍往往把重点放在硬件结构和指令上,讲述了一大堆电路框图和指令列表,把大家搞得晕晕乎乎后,再举出一些重量级的例子,不是一些像数组、矩阵
计算
一类的复杂运算,就是开始图形模式画图,以至于大家看完以后就再也找不到北了!实际上,这些例子不是太难了,而是太枯燥了。有人说,学汇编就像考大学,千军万马过独木桥,太多的人中途放弃了,只有少数人坚持到最后。
笔者认为:学习汇编应该在轻松的环境下进行,在学习中使用的例子不一定太复杂,但一定要有吸引力。用汇编写复杂的运算
程序
固然会比C更有效率,但同样的事在C中用一个表达式就全部搞定了,从这里开始学汇编,给人的感觉就像从复杂的公式开始学算术,要知道,加法还没有学会呢!而对于高级语言封装起来的系统功能,用汇编解释起来就非常直接,非常自然,也更容易懂。以笔者自己学汇编的过程来说,那时候是1990年,刚好是中国第一次病毒大流行,大家的
计算
机上都是那个病毒的开山鼻祖——乒乓病毒,在流行DOS的时期,看着在屏幕上蹦的小球,心中就有一个问题:如何编出这样一个玩意来呢?要知道DOS是单任务的,而那个球在别的
程序
运行
的时候照样蹦!这用当时流行的
FORTRAN
、C等课程中学到的任何知识都无法解释,因为这些课程中不可能有TSR、中断、引导区等内容。带着这样一个疑问学习汇编,在分析乒乓病毒的过程中啃一条条不懂的指令,病毒分析完了,汇编课也学完了,而且反过来看那些复杂的
计算
程序
都是那么顺理成章,不攻自破了。实际上,从一些实用的系统功能开始学习汇编远比学矩阵
计算
容易理解。
正如最经典的C
程序
就是那个“Hello,World!”一样,这个
程序
的有名并不是因为它用高深复杂的语句放倒了一大批人,而是它以最简单易懂的方式让人们走入C语言的大门。对于Win32汇编也是如此,从最简单的例子开始总是没错的,笔者建议读者跟随本书中从简到繁的例子,努力做到理解并灵活引用这些例子中的各种功能,正如“熟读唐诗三百首,不会写诗也会吟”,最后能够熟练地使用Win32汇编来解决各种编程需求就是最大的胜利。
另外,正如前面讲到的,汇编语言的学习必须和操作系统紧密结合。经过简单的调查,笔者发现很多高校使用的汇编教程还是停留在清华91版《IBM-PC汇编语言
程序
设计》之类的教材上,虽然这些教材中基础知识部分永远不会过时,但涉及操作系统的部分还是停留在DOS阶段。随着DOS操作系统的悄然引退,继续把精力花在上面是一种浪费,因为任何语言都必须有应用的
平台
,否则课程学完之后会尴尬地发现没有地方可以应用。笔者认为,在《IBM-PC汇编语言
程序
设计》之类传统教材中的基础部分学习完毕以后,重点就应该转向Win32汇编,以及保护模式方面的知识。
关于本书的内容
本书尝试从编写应用
程序
的角度,从“Hello,World”这个简单的例子开始到编写多线程、注册表和网络通信等复杂的
程序
,通过70多个从简单到复杂的例子,逐步深入Win32汇编编程的方方面面。笔者从事汇编编程已经有十几年的历史了,从8086时代的DOS汇编编程开始到当前的Win32汇编编程,从一个初学者到现在能利用Win32汇编来解决大部分编程需求,中间也经过了很长
时间
的摸索和大量的挫折,所以笔者很清楚初学者在哪些地方会遇到问题,但是涉及Win32汇编的书籍却实在太少了。正是因为如此,笔者决心把本书的目标定为:能让读者入门并在最后能熟练掌握Win32汇编编程,而不是那种深入系统奥秘一类的书籍。
从这个目标出发,本书的选材中尽量去掉已经有其他书籍详细讨论的部分,因为要一本书涉及全部方面是不现实的。内容全面就必然不精,内容深刻就必须围绕一个中心点,所以本书的内容并不详细讨论一般汇编教材的基础部分,如处理器结构和保护模式等,也不准备涉及
Windows
驱动
程序
、COM编程或者其他能够冠以“密技”头衔的内容。本书主要的内容将放在32位宏汇编对比DOS汇编所不同的部分,以及Win32应用
程序
的汇编实现上。不求全面,只求精也!(说句老实话,也不敢对自己不精通的地方妄加评论,以免破坏自己的良好形象。
在
fortran
中利用cpu_time子
程序
来测试代码
运行
时间
# 在
fortran
中利用cpu_time子
程序
来测试代码
运行
时间
program test_cpu_time
real :: start, finish
call cpu_time(start)
! put code to test here
call cpu_time(finish)
print '("Time = ",f6
FORTRAN
语言是Formula Translation的缩写,意为“公式翻译”。它是为科学、工程问题或企事业管理中的那些能够用数学公式表达的问题而设计的,其数值
计算
的功能较强。
FORTRAN
语言是世界上第一个被正式推广使用的高级语言。它是1954年被提出来的,1956年开始正式使用,直到2022年已有六十六年的历史,但仍历久不衰,它始终是数值
计算
领域所使用的主要语言。
在
Linux
环境下编译
Fortran
代码_活力信息的博客-CSDN博客_
linux
编译
fortran
date_and_time
返回实时时钟和日期的相关数据。返回数据包括本地
时间
以及本地
时间
与通用协调
时间
(Universal Coordinated Time,
UTC) 之间的时差,通用协调
时间
也称为格林威治标准
时间
(Greenwich Mean Time,
GMT)。
### 回答1:
在
Linux
下编译和
运行
Fortran
程序
,需要先安装
Fortran
编译器,比如g
fortran
。安装完成后,可以使用命令行工具进入
Fortran
程序
所在的目录,然后使用以下命令进行编译:
g
fortran
-o program_name program_name.f90
其中,program_name是
程序
的名称,program_name.f90是
程序
的源代码文件。编译完成后,可以使用以下命令
运行
程序
:
./program_name
程序
将会在终端中输出结果。
### 回答2:
Fortran
是一种高级
程序
设计语言,通常用于科学
计算
和工程领域。
Linux
系统是一个常用的操作系统,具有开源、稳定、灵活等优点,因此在
Linux
上编译
运行
Fortran
是非常常见的需求。
在
Linux
环境下,
Fortran
编译器有多种选择,如g
fortran
、ifort等,其中g
fortran
是一个开源的编译器,可在终端命令行直接安装,具有使用方便、易学易用等特点。以下是在
Linux
上编译
运行
Fortran
的基本方法:
1.安装g
fortran
在终端命令行输入以下命令:
sudo apt-get install g
fortran
2.编写
Fortran
程序
使用文本编辑器编写
Fortran
程序
,保存为.f90文件格式。例如:
program hello
print *, 'Hello, World!'
end program hello
3.编译
Fortran
程序
在终端命令行中进入保存
程序
文件的目录,输入以下命令:
g
fortran
-o hello hello.f90
其中,-o选项指定编译生成的可执行文件名为hello,hello.f90为源
程序
文件名。
4.
运行
程序
在终端命令行中输入以下命令:
./hello
即可
运行
编译生成的可执行文件。
以上是在
Linux
下编译
运行
Fortran
的基本方法,但实际使用中需要根据具体情况进行调整,例如设置编译选项、调试
程序
等。对于复杂的
Fortran
程序
,还需要实现模块化、性能优化等进一步的处理。需要注意的是,在不同的
Linux
发行版中,可能需要下载安装不同的
Fortran
编译器或库文件,具体操作方法可以查看官方文档或社区讨论。
### 回答3:
Fortran
是一种高级编程语言,特别适用于科学
计算
和工程
计算
。
Linux
是一种自由和开源的操作系统,它提供了很多方便的工具和环境来编译和
运行
Fortran
程序
。下面是一些基本的步骤:
1. 安装
Fortran
编译器。
Linux
一般自带GNU
Fortran
编译器(g
fortran
),如果没有安装可以通过以下命令进行安装:sudo apt-get install g
fortran
。这个命令会自动安装最新版本的g
fortran
和相应的库文件。
2. 编写
Fortran
程序
。可以用任何文本编辑器编写
Fortran
程序
,比如vim、nano、gedit等等。在编辑器里编写好后,将文件保存到一个方便的位置,比如~/
fortran
/中。
3. 编译
Fortran
程序
。在终端中使用以下命令进行编译:g
fortran
-o <可执行文件名> <源代码文件名>。比如,如果源代码文件为hello.f90,可执行文件名为hello,那么编译的命令为:g
fortran
-o hello hello.f90。如果编译成功,会生成一个可执行文件hello。
4.
运行
Fortran
程序
。在终端中使用以下命令
运行
:./<可执行文件名>。比如,如果可执行文件名为hello,那么
运行
的命令为:./hello。
总之,编译和
运行
Fortran
程序
在
Linux
操作系统下非常方便,只需要安装好编译器,编写好
程序
,然后使用简单的命令即可。
Fortran
在科学
计算
和工程
计算
中有着广泛的应用,掌握好在
Linux
下编译和
运行
Fortran
程序
对于学习和工作都非常有帮助。