深入了解C语言-函数的使用[2]

软考 jerryxf 浏览 1077 来源:希赛网

最开始的第一句CALL0003是我们用nasm编译的start.asm所生成的代码。我们主要目标是研究蓝色的C语言的代码,第一句start.asm所生成的代码太简单,就是调用e_main函数。而我们的e_main函数就是蓝色代码部分。从C源程序中我们看到,我们在e_main做的就是一件事情:调用e_putchar(ch);其中ch是传给出e_putchar的参数。MOVAX,000

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

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

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

MOV AX,000B

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

PUSH AX

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

CALL 0020

而0020就是e_putchar代码的地址。通过这跳语句,计算机就跳到e_putchar的代码部分去执行了.我在这里并不给出e_putchar的代码,因为我们这个案例只是研究C语言中如何传递参数给其它函数的,并不管e_putchar如何取参数。下在一个案例中,我们将研究函数如何取参数。

在这里我得把CALL指令解释清楚,因为在下个研究函数如何取参数的部分中大家可能会迷惑.CALL XXXX 指令简单地或就是

PUSH IP

JMP XXXX

它首先把当前的执行地址IP压入堆栈,然后跳转到要CALL的地址去。CALL和RET指令是配套的。RET指令等同于

POP IP

也就是回复CALL前的执行地址IP。

正因为这样,所以你一旦使用了CALL指令,你的堆栈指针SP就会自动减2。

POP CX

是每个函数调用完毕后都有的常用操作。在这里它不起任何作用。可能作用就是与CALL 0020前的PUSH AX像对应.这样堆栈指针SP才能回原。

好了,简单的第一个案例研究结束了。虽然就这4跳指令,但是我们已经可以看出C语言传递参数方法了。总结起来就是通过"MOV AX,参数地址"把参数的地址传到AX,然后"PUSH AX"把参数的地址压入堆栈。最后"CALL 函数地址"转向执行要调用的函数。最后调用完后,"POP CX",恢复堆栈指针SP。

研究案例二

工具: Turboc C v2.0,Debug,MASM v5.0,NASM,TASM

实例C程序:

/* example1.c */

char ch;

extern void e_putchar(char c);

int e_main()

{

ch=0x44;

e_putchar(ch);

}

[1]  [2]  [3]  

责任编辑:jerryxf|希赛教研中心

希赛教研中心拥有一支规模200余人的专职教研团队,深耕项目管理、软考、通信工程师、金融财会、厂商认证、考博英语等方向,形成“讲师+助教+班主任+智能学习平台”协同联动的完整教学服务体系:讲师讲透方法、助教盯住进度和答疑、班主任守住节奏、智能平台记录每一步成长——环环相扣,让学员的备考全程有人陪、有反馈、有结果。 师资力量雄厚。主要讲师毕业于 985/211 等知名高校,并拥有海外留学归国人才;职称梯队完善,高、中级职称讲师结构合理,讲师持有软考高级资格证书、PMI系列认证、CSPM高级项目管理培训师证、PeopleCert认证、DAMA认证、英语专八(TEM-8)、PETS-5、华为HCIE、经济师、一级建造师等行业权威资质,兼具深厚理论功底与丰富实战经验。 教研成果卓越。教研团队成员深度参与多项国家标准的研制工作,是 GB/T 47282-2026《项目重大节点评审规范》、GB/T 47285-2026《项目商业分析指南》、GB/T 30339-2026《项目和项目群后评价指南》、GB/T 46210-2025《项目成本管理指南》等国家标准的主要起草人,并担任《中国项目管理知识体系指南》总体编写专家组成员。团队累计主编出版专业图书与教材一百多种,覆盖软考、通信工程师、PMP、CSPM、NPDP等多个认证方向。 教学成效显著。 依托希赛自主研发的开放式智能互动学习平台,团队累计服务学员超百万人,帮助众多学员顺利通过软考、 PMP、CSPM、NPDP、华为认证、通信工程师、管理类联考、考博英语等考试,大批学员考入 985、211 等知名高校深造,以专业与口碑赢得学员和行业的广泛认可。

📅 本文最后更新于 2026-04-03

温馨提示:因考试政策、内容不断变化与调整,本网站提供的以上信息仅供参考,如有异议,请考生以权威部门公布的内容为准!
新人礼包 新人礼包 课程咨询 课程咨询 企业团报 企业团报 电话咨询 电话咨询

客服热线:400-111-9811

售后投诉:156-1612-8671

公众号 公众号
希赛网公众号二维码
扫二维码 关注希赛网
APP下载 APP下载
希赛网APP下载二维码
扫二维码 下载APP
二维码
二维码
第1步:扫码添加老师微信  第2步:领取备考资料
!
咨询在线老师!