当前位置:首页 » 编程软件 » mm5编译

mm5编译

发布时间: 2022-12-28 17:46:17

① 汇编19行错了,masm 提示constant expected错误,但我不知道哪错了 assum

我看你这个是16位编程,里面不包含比例因素,是32位以后才有的,所以内存寻址不可用*

而且32位的比例因素只能是*1,*2,*4,*8,所以C语言的对齐选项只能是1,2,4,8

x86指令编码问题,16位内存寻址的格式是

【基址寄存器+索引寄存器+位移】

基址寄存器可以是BX,BP

索引寄存器可以是SI,DI

位移是任何参数或计算后为常数。


如楼上所说的16位汇编能用乘号的地方只有字面值计算时才能使用。

详细的可以用C写一段复杂语句,结果反编译时汇编是多条语句。

汇编强大之处就在于每条指令仅执行一个操作。分工详细,有优化的可能性。

而且32位CPU在16位模式下依然能使用32位通用寄存器。


具体对应的代码字节编码是

【保护模式,实地址模式,虚拟-8086模式指令格式】
═══════════════════════════════════════
指令前缀+操作码+ModR/M+SIB+位移+立即数
───────────────────────────────────────
指令前缀:[opt]最多四个前缀,每个前缀1字节
───────────────────────────────────────
操作码:1,2,3个字节
───────────────────────────────────────
ModR/M:1个字节,若需要
───────────────────────────────────────
SIB:1个字节,若需要
───────────────────────────────────────
位移:1,2,4个字节或无
───────────────────────────────────────
立即数:1,2,4个字节或无
═══════════════════════════════════════
【16位ModR/M编码的有效寻址】
═══════════════════════════════════════
r8(/r)ALCLDLBLAHCHDHBH
r16(/r)AXCXDXBXSPBPSIDI
r32(/r)EAXECXEDXEBXESPEBPESIEDI
mm(/r)MM0MM1MM2MM3MM4MM5MM6MM7
xmm(/r)
(十进制)/digit(Opcode)01234567
(二进制)REG=000001010011100101110111
───────────────────────────────────────
[Mod][R/M]ModR/M
───────────────────────────────────────
[BX+SI][00][000]0008101820283038
[BX+DI][001]0109111921293139
[BP+SI][010]020A121A222A323A
[BP+DI][011]030B131B232B333B
[SI][100]040C141C242C343C
[DI][101]050D151D252D353D
disp16[110]060E161E262E363E
[BX][111]070F171F272F373F
───────────────────────────────────────
[BX+SI]+disp8[01][000]4048505860687078
[BX+DI]+disp8[001]4149515961697179
[BP+SI]+disp8[010]424A525A626A727A
[BP+DI]+disp8[011]434B535B636B737B
[SI]+disp8[100]444C545C646C747C
[DI]+disp8[101]454D555D656D757D
[BP]+disp8[110]464E565E666E767E
[BX]+disp8[111]474F575F676F777F
───────────────────────────────────────
[BX+SI]+disp16[10][000]80889098A0A8B0B8
[BX+DI]+disp16[001]81899199A1A9B1B9
[BP+SI]+disp16[010]828A929AA2AAB2BA
[BP+DI]+disp16[011]838B939BA3ABB3BB
[SI]+disp16[100]848C949CA4ACB4BC
[DI]+disp16[101]858D959DA5ADB5BD
[BP]+disp16[110]868E969EA6AEB6BE
[BX][111]878F979FA7AFB7BF
───────────────────────────────────────
EAX/AX/AL/MM0/XMM0[11][000]C0C8D0D8E0E8F0F8
ECX/CX/CL/MM1/XMM1[001]C1C9D1D9E1E9F1F9
EDX/DX/DL/MM2/XMM2[010]C2CAD2DAE2EAF2FA
ECX/BX/BL/MM3/XMM3[011]C3CBD3DBE3EBF3FB
ESP/SP/AH/MM4/XMM4[100]C4CCD4DCE4ECF4FC
EBP/BP/CH/MM5/XMM5[101]C5CDD5DDE5EDF5FD
ESI/SI/DH/MM6/XMM6[110]C6CED6DEE6EEF6FE
EDI/DI/BH/MM7/XMM7[111]C7CFD7DFE7EFF7FF
═══════════════════════════════════════

② 什么叫当前寄存器组

寄存器是CPU内部重要的数据存储资源,是汇编程序员能直接使用的硬件资源之一。由于寄存器的存取速度比内存快,所以,在用汇编语言编写程序时,要尽可能充分利用寄存器的存储功能。
寄存器一般用来保存程序的中间结果,为随后的指令快速提供操作数,从而避免把中间结果存入内存,再读取内存的操作。在高级语言(如:C/C++语言)中,也有定义变量为寄存器类型的,这就是提高寄存器利用率的一种可行的方法。
另外,由于寄存器的个数和容量都有限,不可能把所有中间结果都存储在寄存器中,所以,要对寄存器进行适当的调度。根据指令的要求,如何安排适当的寄存器,避免操作数过多的传送操作是一项细致而又周密的工作。有关“寄存器的分配策略”在后续课程《编译原理》中会有详细的介绍。
由于16位/32位CPU是微机CPU的两个重要代表,所以,在此只介绍它们内部寄存器的名称及其主要功能。
1、 16位寄存器组
16位CPU所含有的寄存器有
4个数据寄存器(AX、BX、CX和DX)
2个变址和指针寄存器(SI和DI) 2个指针寄存器(SP和BP)
4个段寄存器(ES、CS、SS和DS)
1个指令指针寄存器(IP) 1个标志寄存器(Flags)
2、 32位寄存器组
32位CPU除了包含了先前CPU的所有寄存器,并把通用寄存器、指令指针和标志寄存器从16位扩充成32位之外,还增加了2个16位的段寄存器:FS和GS。
32位CPU所含有的寄存器有
4个数据寄存器(EAX、EBX、ECX和EDX)
2个变址和指针寄存器(ESI和EDI) 2个指针寄存器(ESP和EBP)
6个段寄存器(ES、CS、SS、DS、FS和GS)
1个指令指针寄存器(EIP) 1个标志寄存器(EFlags)
具有一个输入端口和两个输出端口。

③ 运行WRF气象模拟软件需要什么配置

要利用气象模式进行分析,首先第一步自然是要安装分析模式。

目前来说在我们这一行(咳咳,引自本实验室某师妹话说),主要就是用MM5(第五代中尺度模式)和WRF(天气预报研究模式)两种。而不管是哪种,一般都是在大型机(传说中的高性能计算平台)上并行运行计算的。

因此我的师妹们(嗯,是的,NUM>3,同时却只有一个师弟...我为以前同在污水系的师弟们流泪...)劝我还是放弃安装直接开跑算了...可是!身为一个死理性派&钻牛角尖党&为国家节省能源不占用其他人资源的好同学,我还是决定在实验室分我的电脑上尝试安装WRF并练习各路test...(我是不会说我用这些理由捞了一台4核8G内存的电脑的)

正如@volley兄所言,气象界一般是用Fortran语言,在WRF安装的时候一般用到的编译器包括PGI、ifort、gFortran等。在AMD处理器上,用PGI会好些,因为它有带一个优化包,而ifort就是Intel家的,所以你懂的...至于gFortran,虽然它是开源的,但在64位系统上的性能稍差些...

在安装WRF前,还需要安装读取气象通用格式*.nc的netCDF,在安装WRF主程序包之后,还可以安装各种模组如WPS、WRF-Chem、WRFDA等...

因此可怜的我的安装顺序是:

1.先把电脑硬件组装起来;

2.安装某一64位版本的linux(我是不会告诉你我既安装了CentOS又安装了Fedora还安装了ubuntu...大硬盘不能拿来装毛片只能拿来装了,55555);

3.安装对应版本的PGI编译器(我要吐槽:鬼知道差一点版本就出各种各样的稀奇古怪的问题,幸好这个世界上有各种WRF论坛各种教程和各种达人...”版本“是在广州这个地方我既讨厌的”空心菜“后讨厌第二个东西...);

4.安装相应版本(”版本“,你又出现了!!!)的netCDF;其实在此之后也可以安装MM5...

5.安装WRF——WPS——WRF-Chem等,前面编译器等如果没问题,在此就会很顺畅...不由得感叹果然第一次最辛苦,以后越**越顺畅...请不要掉节操啊喂...

6.跑test...这里呢就是在设定各种各样的天气条件了,借用某师兄边喝咖啡边神神叨叨的话说,这一步骤就是在感受成为上帝的感觉...喔不,是雷公电母风神雨神....

热点内容
linux查看selinux状态 发布:2025-07-20 13:36:35 浏览:914
福利资源解压密码 发布:2025-07-20 13:34:10 浏览:269
我的世界怎么在手机搞服务器 发布:2025-07-20 13:26:07 浏览:905
android系统键盘 发布:2025-07-20 13:19:38 浏览:500
程序化交易算法 发布:2025-07-20 13:09:58 浏览:973
已关闭服务器是什么意思 发布:2025-07-20 13:06:49 浏览:709
三星s5密码多少钱 发布:2025-07-20 12:55:14 浏览:961
密码忘记了怎么找回 发布:2025-07-20 12:46:18 浏览:534
华为的密码锁为什么开不了 发布:2025-07-20 12:45:35 浏览:133
app登录密码在哪里 发布:2025-07-20 12:22:31 浏览:693