當前位置:首頁 » 編程軟體 » 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...這里呢就是在設定各種各樣的天氣條件了,借用某師兄邊喝咖啡邊神神叨叨的話說,這一步驟就是在感受成為上帝的感覺...喔不,是雷公電母風神雨神....

熱點內容
原神電腦配置怎麼玩不卡 發布:2025-07-20 18:07:06 瀏覽:955
反編譯獲取原代碼 發布:2025-07-20 17:49:43 瀏覽:492
plc編譯怎麼找 發布:2025-07-20 17:48:56 瀏覽:162
無效的宏名稱將編譯啞宏 發布:2025-07-20 17:48:16 瀏覽:155
250萬解壓 發布:2025-07-20 17:44:52 瀏覽:620
騰訊視頻上傳廣告 發布:2025-07-20 17:35:55 瀏覽:406
掘地求升免費腳本 發布:2025-07-20 17:32:06 瀏覽:962
linux設置python環境變數 發布:2025-07-20 17:22:49 瀏覽:242
柱底層加密區 發布:2025-07-20 17:16:20 瀏覽:913
安卓ids是什麼文件 發布:2025-07-20 17:16:14 瀏覽:668