这段代码我将用nasm来进行编译

从c源程序中我们看到,我们在e_main做的就是一件事情:调用e_putchar(ch);其中ch是传给出e_putchar的参数

2014年上半年软考考试真题及答案 考后免费估分系统

而0020就是e_putchar代码的地址通过这跳语句,计算机就跳到e_putchar的代码部分去执行了.我在这里并不给出e_putchar的代码,因为我们这个案例只是研究c语言中如何传递参数给其它函数的,并不管e_putchar如何取参数下在一个案例中,我们将研究函数如何取参数 来源:教育联展网-软件水平考试

000b就是我们的全局变量ch所在内存的地址c语言会把所有的全局变量在另一块内存区.c代码先把ch的地址传给ax,然后通过

xxxx:c++的基本概念0003 mov ax,000b

exe2bin example1.exe

-u 0

这段代码我将用nasm来进行编译.生成start.obj

xxxx:000a pop cx

这样,我们就得到了这段c代码编译出来的机器代码文件(example1.bin)了

下面我们用debug这个老dos的工具来对example1.bin进行反汇编

link start.obj example1.obj,example1.exe,,,

xxxx:0007 call 0020

nasmw -f obj -o start.obj start.asm

call 0020

这里看到蓝色的代码就是我们整个c程序的所生成的代码了

按照c语言的习惯,所以c总的名词都要自动在前面加一个"_"下划线.所以,我c++是什么们在c中的e_main函数,如果要在汇编中调用,就变成了_e_main函数.这段汇编代码只有一句:call _e_main,就是调用我们在c中的e_main函数

我们主要目标是研究蓝色的c语言的代码,第一句start.asm所生成的代码太简单,就是调用e_main函数而我们的e_main函数就是蓝色代码部分

xxxx:0006 push ax

-n example1.bin

tcc -mt -oexample1.obj -c example1.c

最开始的第一句call 0003是我们用nasm编译的start.asm所生成的代码

下面我们用turboc c来编译这段c代码:

push ax

各地2014软考报名入口 各省考试官网 2014年c++主要优点下半年软考成绩查询

debug

[本文共有 4 页,当前是第 2 页] <<上一页 下一页>>

mov ax,000b

把ax的值,也就是ch的地址压入堆栈然后再

-l 0

xxxx:0000 call 0003

















































































白癜风最先进治疗方法















































































北京中科白癜风医院专家讲解女性白癜风的症状


转载请注明:http://www.nydjfy.com/jyqj/182.html

  • 上一篇文章:
  •   
  • 下一篇文章: