从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