三个一工程比较有意思的题汇总
Near far 近远指针。*(char far *)
*(int *)0x2000=0xf;
*(char *)0x2000=’a’;
((char *)*(int far *)0x02000000)
malloc(20)是开辟20个字节的内存空间。
以下地址,本意是指内存地址。不然实在要说的话,那什么东西肯定都有地址喽,只要它依赖了硬件,我们看得见摸得着检测得到,没有地址才有鬼喽,现在我是只比较一下最常用法的不同。
1>.变量有名字吗?变量有地址吗?
变量有变量名;变量有地址。
2>.寄存器有名字吗?寄存器有地址吗?
寄存器有寄存器名;寄存器没有地址(此处切记与arm单片机等区分开,现在谈论一下单纯的C语言)。
3>.内存有名字吗?内存有地址吗?
内存没有名字;内存有内存地址。
4>.端口有名字吗?端口有地址吗?
就目前看到的,好像常用的就是地址;名字?有吗?存疑。
1>.用C语言编程可以不用变量吗?
可以,综合研究二得出其中一种额外选择:可以使用寄存器替换变量的使用。
2>.函数名、变量,这些区别于汇编的新生名词,在C语言反汇编为汇编语言的时候又是具体以怎样的熟悉的形式展开的呢?
相对于函数,很容易就想到了子程序,包括子程序的标号、调用、返回等都与函数感觉有某种近亲关系一样。变量的话,存在的形式,还不确定就是唯一的形式。
3>. 用debug怎么查找函数的偏移地址?
参考语句“printf(“%x\n”,main);”,最好能举一反三。
1>.c0s.obj文件的作用
c0s.obj文件的作用:在程序开始运行,进行相关初始化,再调用main函数,返回后进行相关的资源释放,环境恢复等工作,再将程序返回。
2>.可以不用main函数编程吗?
可以。只不过需要修改相应的原来在程序开始运行时,负责进行相关初始化操作、调用main函数、返回后进行相关的资源释放、环境恢复等工作的文件。在本次研究中用到的是c0s.obj文件,同样的道理,以后的话要学会举一反三。
1>.头文件的作用和生成的四个阶段?
1.预处理(include这个库寻找定义头文件的内容插入源程序中生成.i文件)
2.编译(将.i文件翻译成生成.s后缀的汇编语言程序)
3.汇编 (将.s文件翻译成机器语言,生成可重定位的目标程序,打包生成.o文件)
4.连接(将各种代码和数据整合成一个单一可执行文件)
3>.有关于程序的的编译过程?
虽然最终都会编译成机器码,但存在有的程序不必编译成汇编语言,c语言必须转变成汇编语言,因为C语言是汇编编译。之后会讲到“汇编器”相关知识。
4>.Main与Main()的区别?
在用printf()打印main时,打印出的是main()的偏移地址;而在打印main()时,得到的数是main()的返回值。但是这个返回值的选取又涉及到之前函数将返回值保存在哪里的问题,由于原本编写的main()返回值保存在ax寄存器中当我们再编写一个函数,并且该函数并没有在作用过程中修改ax寄存器的值。我们得到的该函数的返回值仍然是上一次保存在ax寄存器中的值。
5>.Sp、bp问题?
作用一:与SP联合使用,SP不能轻易更改,所以赋值给BP,用BP来实现我们的要求;
作用二:栈帧,相当于一个链表,bp,sp代表一个栈帧的序列,为了方便调用其他函数,返回之后恢复调用前状态。
而在这里,再回头看一下在这一过程中指点迷津、至关重要的那条语句“printf(“%x\n”,main);”格式如此,是否可以理解为这里的函数名简直是在当作变量用,但是区别呢?联系呢?函数名、变量,这些区别于汇编的新生名词,在C语言反汇编为汇编语言的时候又是具体以怎样的熟悉的形式展开的呢?
相对于函数,很容易就想到了子程序,包括子程序的标号、调用、返回等都与函数感觉有某种近亲关系一样。
1>.既然大家都是变量都是用来存储的,为啥放的位置还不一样呢?或者全局变量为啥不用栈?局部变量为啥不选数据段?
这个肯定的,首先全局变量,就是要让它从定义起就可以在程序中任意位置使用,如果选择栈了,栈用完就pop了,其他地方还咋用呢?这就是全局变量不选栈;
局部变量呢?如果所有的数据都直接放在数据段中,局部变量也变成了直到整个程序运行完毕才会得到释放的话,那么如果我们定义的变量越来越多。。。。。。一方面增大了内存的开销,另一方面,这个“局部变量”哪里都可以修改,函数的独立性不好保证。
2>.程序1中,全局变量n,是由“unsigned int n”这条语句定义,还是由main函数中的“n=0”这条语句定义?
应该是由前者定义的,函数外定义的变量,不管有没有加static,没有初始化的话,系统默认初始化为0。如果在n=0语句之前打印n,是能够打印出它的值的。
搜到的网上资料:
当启动连接程序时,它会寻找“未定义的外部函数”,也就是说,它将在每一个库文件中查找源代码文件中未定义的函数。当它找到一个未定义的外部函数后,它会引入包含