導航:首頁 > 源碼編譯 > 更改asm解析模式即可正常編譯

更改asm解析模式即可正常編譯

發布時間:2022-04-27 22:59:42

⑴ 如何編譯ASM文件

1. 在DOS命令中轉到要編譯文件所在的目錄.
2.輸入MASM.EXE空格+文件名.三下回車,就生成了OBJ文件,
3.link.exe空格+所生成的OBJ文件,再按三下回車,就生成了exe文件.

⑵ ASM是怎樣訪問及修改編譯了的class文件

ASM是基於ClassVisitor介面方法的調用順序,提供了3個核心組件,用於產生和修改轉換class
ClassReader解析compiled class的byte數組,其accept方法接受classVisitor的實例參數,按順序調用它的各個visitXxx方法。將它作為事件的生產者。
ClassWriter直接構建二進制形式的class,toByteArray返回compiled class的byte數組。將它作為事件的消費者
ClassAdapter內部包裝了一個ClassVisitor實例,代理所有的ClassVisitor介面方法。將它作為事件過濾器。
package org.objectweb.asm;

public abstract interface ClassVisitor
{
public abstract void visit(int paramInt1, int paramInt2, String paramString1, String paramString2, String paramString3, String[] paramArrayOfString);

public abstract void visitSource(String paramString1, String paramString2);

public abstract void visitOuterClass(String paramString1, String paramString2, String paramString3);

public abstract AnnotationVisitor visitAnnotation(String paramString, boolean paramBoolean);

public abstract void visitAttribute(Attribute paramAttribute);

public abstract void visitInnerClass(String paramString1, String paramString2, String paramString3, int paramInt);

public abstract FieldVisitor visitField(int paramInt, String paramString1, String paramString2, String paramString3, Object paramObject);

public abstract MethodVisitor visitMethod(int paramInt, String paramString1, String paramString2, String paramString3, String[] paramArrayOfString);

public abstract void visitEnd();
}

訪問ClassVisitor介面方法的順序:

visit visitSource? visitOuterClass? ( visitAnnotation | visitAttribute )*
( visitInnerClass | visitField | visitMethod )*
visitEnd

首先必須調用visit, 然後最多訪問一次visitSource, 然後最多調用一次visitOuterClass, 然後選出visitAnnotation或者visitAttribute之一,對它訪問若干次,
然後選出visitInnerClass或者visitField或者visitMethod 之一, 對它調用若干次
最後必須調用一下visitEnd

以下例子說明了ClassReader如何使用accept方法, 依次按照所謂的順序,調用 ClassPrinter作為ClassVisitor的實現類的visitXxx方法,訪問java.util.Map的。
查看accept方法內部,可以發現這個所謂的調用順序。

/**
* @{#} ClassPrinter.java Created on Jun 10, 2010 9:37:57 PM
*
* this code example from asm-guide.pdf
* author.
*
*/
package example.me;

import org.objectweb.asm.AnnotationVisitor;
import org.objectweb.asm.Attribute;
import org.objectweb.asm.ClassReader;
import org.objectweb.asm.ClassVisitor;
import org.objectweb.asm.FieldVisitor;
import org.objectweb.asm.MethodVisitor;

public class ClassPrinter implements ClassVisitor {

public void visit(int version, int access, String name, String signature,
String superName, String[] interfaces) {
System.out.println(name + " extends " + superName + " {");
}

public AnnotationVisitor visitAnnotation(String desc, boolean visible) {
return null;
}

public void visitAttribute(Attribute attr) {}

public void visitEnd() {

System.out.println("}");
}

public FieldVisitor visitField(int access, String name, String desc,
String signature, Object value) {
System.out.println(" " + desc + " " + name);
return null;
}

public void visitInnerClass(String name, String outerName,
String innerName, int access) {}

public MethodVisitor visitMethod(int access, String name, String desc,
String signature, String[] exceptions) {
System.out.println(" " + name + desc);
return null;
}

public void visitOuterClass(String owner, String name, String desc) {}

public void visitSource(String source, String debug) {}
public static void main(String[] args) throws Exception {
ClassPrinter cp = new ClassPrinter();
ClassReader cr = new ClassReader("java.util.Map");
/*
* InputStream input = Thread.currentThread().getContextClassLoader()
* .getResourceAsStream( "java.lang.Runnable".replace('.', '/') +
* ".class"); ClassReader cr = new ClassReader(input);
*/
cr.accept(cp, 0); //cp是ClassVisitor的實現類,在accept方法的內部,以既定的順序調用cp.visitXxx(...)方法,最終輸出java.util.Map的編譯後class結構
}

}
輸出結果:java/util/Map extends java/lang/Object {
size()I
isEmpty()Z
containsKey(Ljava/lang/Object;)Z
containsValue(Ljava/lang/Object;)Z
get(Ljava/lang/Object;)Ljava/lang/Object;
put(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
remove(Ljava/lang/Object;)Ljava/lang/Object;
putAll(Ljava/util/Map;)V
clear()V
keySet()Ljava/util/Set;
values()Ljava/util/Collection;
entrySet()Ljava/util/Set;
equals(Ljava/lang/Object;)Z
hashCode()I
}

⑶ 怎麼運行匯編asm

首先需要編譯程序masm.exe和連接程序link.exe,把他們放到C盤masm文件夾
點擊開始,運行,輸入cmd。進入c\masm。
輸入cd c:\masm即可。
然後masm 文件名.asm
沒錯的話,再link 文件名.
沒錯的話就會生成.exe文件。
直接輸入文件名.exe即可。

⑷ 使用ASM 實例的情況下,需要修改哪些資料庫

ASM 實例由參數文件控制,其方式與常規資料庫實例相同。通常設置的參數包括:
? INSTANCE_TYPE應該設置且必須為ASM,表示ASM 實例,標識要啟動的實例是ASM,而不是資料庫實例。這是唯一一個必須定義的參數。對於資料庫實例,該參數值設置為RDBMS。
? ASM_POWER_LIMIT:控制重新平衡操作的速度即指定磁碟rebalance的程度。值的范圍從1 到11,11 表示最快。如果省略,該值默認為1。指定的級別越高,則rebalance的操作就會越快被完成,當然這也意味著這個時間段內將佔用更多的資源,指定級別較低的話,隨人rebalance操作會耗時更久,但對當前系統的IO及負載影響會更少,這需要根據實際情況衡量。另外,這個參數指定的只是一個默認值,在操作過程中,即可以隨時動態更改,也可以在語句級命令行時指定power,覆蓋該默認值。
修改ASM實例初始化參數文件的命令規則與資料庫初始化參數完全相同,比如說:
SQL> alter system set asm_power_limit=5;
System altered.
? ASM_DISKSTRING是一個與操作系統相關的值,ASM 使用它來限制搜索時考慮的磁碟集即是設置ASM啟動時檢查的磁碟,該選項可以同時指定多個值,並且支持通配符。比如只檢查/DEV/SD*。默認值為空字元串,為空的話,表示ASM將查找系統中所有ASM擁有讀寫許可權的設備。這在大多數情況下就足夠了。如上所示的約束性更強的值可以減少ASM 執行搜索所需的時間,從而提高磁碟組裝載次數。
? ASM_DISKGROUPS:是ASM 實例啟動時或使用ALTER DISKGROUP ALL MOUNT命令時,ASM 實例要裝載的磁碟組的名稱列表。如果為空的話,那麼實際就僅僅啟動到nomount狀態。如果使用SPFILE的話,該參數一般不需要手動修改,ASM能夠自動更新該初始化參數中的值。
Oracle Restart 會裝載列為相關磁碟組的磁碟組,即使這些磁碟組未與ASM_DISKGROUPS參數列在一起也是如此。該參數沒有默認值。

⑸ asm 文件編譯出錯error :org_2 can not fit absolute secti

你的錯誤代碼是errorc129:這是一個C語言方面的語法錯誤,說明你的文件被保存為C文件(文件名為.c後綴)。我用你這段程序放在keil編譯器中試驗過,當程序保存為c文件並編譯時,會出現如你所示的errorc129的錯誤且指向程序的第一句代碼處;若將文件另存為匯編文件(文件名為.asm後綴)再進行編譯,則不會出現c129的報錯。 現在將這段程序保存為.asm文件,並將程序整理為以下形式: ORG 0000H LJMP START ORG 000BH ; LJMP INTT0; START: MOV R0,#70H MOV R7,#0CH INIT: MOV @R0,#00H INC R0 DJNZ R7,INIT MOV 72H,#10 MOV 75H,#10 MOV TMOD,#01H MOV TL0,#0B0H MOV TH0,#03CH SETB EA SETB ET0 SETB TR0 START1: LCALL SCAN LCALL KEYSCAN SJMP START1; DL1MS: MOV R6,#14H DL1: MOV R7,#19H DL2: DJNZ R7,DL2 DJNZ R6,DL1 RET; DL20MS:對於以上程序段,不知道整理出來之後是否與你的原代碼相同,但其中有一點需要說明,匯編文件中的分號「;」的作用與C文件中的「 //」作用類似,它後面緊跟的是注釋內容。 你這段程序,若按以上整理,那麼所有命令後面的分號「 ;」都可以不要的。不過,也有可能你確實使用了分號的作用,將後面一些命令作了屏蔽處理,則此處不另作說明。下面將整理後的程序進行編譯,會出現以下報錯情況:錯誤、警告的解釋: 第4行的錯誤原因是:標志符號「INTT0」沒有定義; 第18行的錯誤原因是:標志符號「SCAN」沒有定義; 第19行的錯誤原因是:標志符號「KEYSCAN」沒有定義; 第27行的警告原因是:代碼結束處沒有「END」命令;(註:所有匯編文件結尾處都應有一句「END」命令表示結束) 可以看得出,你這段程序應該不是完整的,另有一部份你沒有復制出來。你可以根據以上說明,再結合你的實際情況處理你的程序。祝你成功!

⑹ asm編譯的問題

是這樣的:
ASM匯編連接後是.EXE程序,在.EXE程序的前部都有一個「重定位表」,裡面保存了你的程序中所有類似你說的mov ax,code這樣的指令中code部分(注意不是變數,是立即數)的偏移地址。而指令中code部分的值則匯編成「段的相對段值」,從第1個段算起。
舉例來說,假設堆棧段在前面(長度=1000h位元組),數據段居中(長度=2000h位元組),代碼段最後,那麼,堆棧段的「相對段值」=0,數據段的「相對段值」=100h(1000h/16),代碼段的「相對段值」=300h((1000h+2000h)/16)。也就是ASM程序將mov ax,code這條指令匯編成mov ax,300h(注意是立即定址方式)
然後,OS執行該程序時,假設分配的內存地址是12340h(段地址=1234h),然後OS將程序調入1234h段中,然後讀入重定位表,根據重定位表中的地址,就可以找到每一個類似mov ax,code指令中code(剛才說了,是立即數)的存放地址(在實際的code段中,OS肯定知道該段地址),然後將1234h「加入」該單元,於是該立即數就變成了1534h(1234h+300h),這正是從12340h開始,給堆棧段留1000h位元組,然後再給數據段留2000h位元組後的「代碼段」的段地址(12340h+1000h+2000h=15340h,段地址=1534h)
現在,mov ax,code指令變成了mov ax,1534h,正確地指向了「代碼段」。

⑺ 匯編文本文檔改後綴名直接是ASM文件怎樣回事

你的文件名字首先要能看到後綴名,這樣改了的話才有用,你可以看1下其他文件有無後綴名如果有後綴改成1.asm應當不會有問題了,但是改成了asm文件只是讓編譯器編譯,你在裡面寫代碼也要用文本格式打開的

⑻ 請問在keil中怎麼編譯asm文件呢

沒有問題啊!

能通過啊。

不就是在地址為30H開頭連續的16個地址賦值1到16么.

編譯執行都通過。

不知道你具體問題是什麼?

是不是出現警告:WARNINGL5:CODESPACEMEMORYOVERLAP什麼的?

吧STARTUP.A51文件移除就可以了。

⑼ vs2005 編譯 匯編文件時(asm) 找不到windows.inc文件

在vs的設置中,找到「包含文件路徑」,把這個路徑加上去即可。
或著設置編譯選項,-Id:即可。

⑽ c語言中asm怎麼用使其在TC2.0中編譯通過。

Turbo C 2.0 中,可以用asm關鍵字實現在源程序中嵌入匯編語句。
在TC2中,使用asm關鍵字的格式為:
asm {
編程序語句塊
}
注意這個是在一個段以內的程序,就是總程序在64K以內

閱讀全文

與更改asm解析模式即可正常編譯相關的資料

熱點內容
php自動列印 瀏覽:469
哪個app多年輕人 瀏覽:902
租的伺服器如何重裝 瀏覽:937
乾眼症程序員 瀏覽:239
樂動達人安卓版有什麼游戲 瀏覽:484
c523壓縮比 瀏覽:543
命令語氣的人什麼心態 瀏覽:435
程序員喜歡留指甲嗎 瀏覽:516
七牛雲伺服器收費標准 瀏覽:627
時光相冊加密空間密碼忘記 瀏覽:474
華為雲為用戶提供的服務雲伺服器 瀏覽:634
minecraftlinux伺服器搭建 瀏覽:376
linux命令新建文件 瀏覽:709
長線pdf 瀏覽:607
程序員電腦支持手寫 瀏覽:414
解壓頭戴式耳機推薦 瀏覽:344
紙條app上怎麼樣看對方主頁 瀏覽:883
編譯英語單詞怎麼寫 瀏覽:249
編譯原理和匯編原理的區別 瀏覽:864
如何給加密的pdf解密 瀏覽:770