1. 汇编就连Hello World都没有输出结果
肯定两点:1.你的程序代码没有错误
2.RadASM、MASM、MASMPlus这些编译工具也没有错误
所以得出结论,错误在你。你对工具的用法不对。建议你到dos操作系统下去调试,用masm 5.0版。如果你没有,可以向我要。
2. C语言中函数的地址在编译时就分配好了,为什么不会产生地址冲突运行时刚好那个地址有别的程序在用
函数的具体武理地址不是编译的时候分配的,是运行的时候由系统分配的!如果你看一下生成的汇编代码你就会发现进入函数时的操作是将返回地址压栈后通过CALL跳转到函数开头处执行,压栈的函数地址都是偏移量,实际地址在运行时通过基址加减偏移量得出。另外通常程序的内存空间是专用的,两个程序的空间互不冲突,普通用户程序不可以访问其他程序的内存空间!
3. 我在KEIL用汇编写的,编译成功了,但是在子文件显示的是打叉的,为什么
#include<reg51.h> 类似这样的子文件的名字写错,编译软件内搜闭根本没有这个文件,所以打错号。世庆裂但是你的主程序是跑的通差高的,所以依然可以编译。
4. 为什么汇编语言编出来的程序要比高级语言编出来的执行效率高
这个没有一定的说法,取决于编译器的聪明程度。
一般的语言,如C语言是首先将C语言编译为汇编,然后汇编转为机器码。而用汇编的写则是直接由汇编到机器码。那么这两者的速度差异取决于编译器在编译的时候产生的汇编码是否比程序员手写的更为高效和快速了。
早期的时候编译器很差,产生的汇编码没有程序员手工写的高效,而现在编译器大大的聪明了,所以这两者的速度是很难讲的。
不过大部分情况下,编译器翻译的都要差,所以速度没有手工写的汇编码快。加上JAVA、c#语言等先要转成一个中间语言,再翻译成汇编码,这个就更差了。