导航:首页 > 源码编译 > 更改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解析模式即可正常编译相关的资料

热点内容
怎么下我的世界服务器地址 浏览:477
价格便宜的云服务器 浏览:551
宝马n52电脑怎么编程 浏览:350
安卓平板android如何降级 浏览:124
苹果怎么下载整理文字软件app 浏览:130
怎么删除一个app下载任务 浏览:713
python执行bat命令 浏览:471
什么吉他调音器app最好 浏览:33
php程序员招聘试题 浏览:14
程序员升职记第九关最优解 浏览:317
三星安卓11怎么访问data文件夹 浏览:817
华三服务器怎么设置开机自启 浏览:711
钉邮登录服务器地址 浏览:644
起源编译器适配第二款应用 浏览:433
cad弄断线条命令 浏览:463
怎么恢复手机app的安装包 浏览:300
idea重启项目不编译 浏览:495
程序员那么可爱演员表陆漓妈妈 浏览:127
linuxgadget驱动 浏览:594
华三调用acl的命令 浏览:11