MacOS环境-手写操作系统-45-C语言开发应用程序

简介: MacOS环境-手写操作系统-45-C语言开发应用程序

C语言开发应用程序

1.简介

前边跳了几节 一个是内容比较细碎 另一个是原老师的文章链接挂掉了


我也不太好做笔记 所以就跳过去啦 中间修复了一些bug和加了一些功能


也不是那么重要 所以就忽略啦


我们的操作系统通过增添内核接口导出机制后


已经可以作为平台 运行应用程序了


但目前应用程序的开发有一个不足就是


我们只能使用汇编语言开发应用程序 用汇编语言开发程序实在太累了


如果能使用C语言就好了

例如当我们想要开发一个在控制台上输出一个字符的应用程序


如果代码能用C语言这么写就好了(app.c):


void api_putchar(int c);
void main() {
    api_putchar('C');
    return;
}


如果上面的代码能编译成二进制文件 并能通过系统加载执行


那么在我们的操作系统上开发应用程序就不必要像以前那么痛苦


我们这一节要做的是 研究如何使用C语言开发运行在我们系统之上的应用程序


2.代码

实际上 我们用C语言开发内核的步骤 可以平移到开发应用程序上


我们开发内核时 实际上遵循着的基本逻辑是这样的


用汇编开发底层接口 然后用C语言调用汇编语言导出的接口 实现业务逻辑


然后把C代码编译成二进制文件


接着使用objconv 工具把C语言反编译成汇编语言


下一步就是把原来的用汇编开发的代码跟反编译后得到的汇编代码合二为一


最后用汇编编译器把整合起来的汇编代码编译成一个统一的二进制可执行文件


我们用C语言开发应用程序也遵循上面的逻辑


首先我们用汇编语言导出内核API接口


用C语言调用汇编语言导出的接口完成业务逻辑的编写


接着把C语言代码编译成二进制 再使用objconv反汇编


最后把两个汇编语言代码合二为一 统一编译成一个可执行的二进制文件


基于上面的逻辑步骤


我们第一步要做的就是用汇编语言导出api_putchar函数调用的接口


实现代码如下api_call.asm


[SECTION .s32]
BITS 32
call main
retf
api_putchar:
  mov edx, 1
  mov al, [esp + 4]
  int 02Dh
  ret
%include "app.asm"


我们先看api_putchar部分


前面我们讲过 内核所有api都对应一个编号 向控制台输出一个字符的api编号就是1


要调用对应api时 只要把对应编号放入寄存器edx


同时把参数提交给指定寄存器 最后调用2D号中断就可以了


在代码的前面


我们首先执行语句call main


也就直接调用main函数 这意味着用C语言开发程序时 主入口函数必须是main


所有C语言开发的程序代码编译成二进制文件后 然后反汇编成汇编程序


反汇编后的程序文件就是app.asm


通过include指令把app.asm的代码整合到api_call.asm中来


最后使用汇编编译器nasm 编译 api_call.asm 所得到的二进制文件就是用C语言开发的应用程序


3.编译和运行

编译运行后(注意makefile更新了)


运行后


切换焦点 输入hlt运行程序


打印了如下的结果


目录
相关文章
|
1月前
|
安全 搜索推荐 Android开发
移动应用与系统:探索开发趋势与操作系统优化策略####
当今数字化时代,移动应用已成为日常生活不可或缺的一部分,而移动操作系统则是支撑这些应用运行的基石。本文旨在探讨当前移动应用开发的最新趋势,分析主流移动操作系统的特点及优化策略,为开发者提供有价值的参考。通过深入剖析技术创新、市场动态与用户需求变化,本文力求揭示移动应用与系统协同发展的内在逻辑,助力行业持续进步。 ####
47 9
|
1天前
|
开发框架 JavaScript 前端开发
Harmony OS开发-ArkT语言速成一
本文介绍ArkTS语言,它是鸿蒙生态的应用开发语言,基于TypeScript,具有静态类型检查、声明式UI、组件化架构、响应式编程等特性,支持跨平台开发和高效性能优化。ArkTS通过强化静态检查和分析,提升代码健壮性和运行性能,适用于Web、移动端和桌面端应用开发。关注我,带你轻松掌握HarmonyOS开发。
20 5
Harmony OS开发-ArkT语言速成一
|
25天前
|
安全 前端开发 Android开发
探索移动应用与系统:从开发到操作系统的深度解析
在数字化时代的浪潮中,移动应用和操作系统成为了我们日常生活的重要组成部分。本文将深入探讨移动应用的开发流程、关键技术和最佳实践,同时分析移动操作系统的核心功能、架构和安全性。通过实际案例和代码示例,我们将揭示如何构建高效、安全且用户友好的移动应用,并理解不同操作系统之间的差异及其对应用开发的影响。无论你是开发者还是对移动技术感兴趣的读者,这篇文章都将为你提供宝贵的见解和知识。
|
26天前
|
人工智能 搜索推荐 Android开发
移动应用与系统:探索开发趋势与操作系统演进####
本文深入剖析了移动应用开发的最新趋势与移动操作系统的演进历程,揭示了技术创新如何不断推动移动互联网生态的变革。通过对比分析不同操作系统的特性及其对应用开发的影响,本文旨在为开发者提供洞察未来技术方向的视角,同时探讨在多样化操作系统环境中实现高效开发的策略。 ####
21 0
|
1月前
|
人工智能 Android开发 数据安全/隐私保护
移动应用与系统:探索开发趋势与操作系统的协同进化####
当今时代,移动应用不再仅仅是简单的软件工具,它们已成为扩展智能手机及平板等设备功能的关键。本文旨在深入分析当前移动应用的开发趋势,探讨移动操作系统的最新进展及其对应用开发的影响,并阐述两者如何相互促进、协同进化,共同推动移动互联网技术向前发展。 ####
|
1月前
|
人工智能 物联网 Android开发
移动应用与系统:探索开发趋势与操作系统的协同进化####
本文深入探讨了移动应用开发的当前趋势,以及这些趋势如何与移动操作系统的发展相互影响、协同进化。通过分析最新的技术动态、市场数据及用户行为变化,本文旨在为开发者提供关于未来移动应用开发方向的洞察,并讨论操作系统层面的创新如何促进或制约应用的发展。 ####
|
25天前
|
5G 数据安全/隐私保护 Android开发
移动应用与系统:探索开发趋势与操作系统革新####
本文深入剖析当前移动应用开发的最新趋势,涵盖跨平台开发框架的兴起、人工智能技术的融合、5G技术对移动应用的影响,以及即时应用的发展现状。随后,文章将探讨主流移动操作系统的最新特性及其对开发者社区的影响,包括Android的持续进化、iOS的创新举措及华为鸿蒙OS的崛起。最后,还将讨论移动应用开发中面临的挑战与未来的发展机遇,为读者提供全面而深入的行业洞察。 ####
|
1月前
|
安全 物联网 Android开发
移动应用与系统:探索开发趋势与操作系统的演进####
【10月更文挑战第29天】 本文深入探讨了移动应用开发的最新趋势与挑战,并分析了主流移动操作系统(如Android、iOS)的发展动态。通过对比不同系统的技术特点和市场表现,揭示了移动应用生态系统的复杂性及其对开发者的影响。此外,还讨论了跨平台开发工具的兴起如何改变应用开发流程,以及这些变化对未来移动计算领域的潜在影响。 ####
43 4
|
1月前
|
人工智能 5G 开发工具
移动应用与系统的未来趋势:开发、操作系统创新及挑战###
本文探讨了移动应用开发和移动操作系统的最新发展趋势,包括人工智能的集成、跨平台开发工具的兴起以及5G技术对移动生态的影响。同时,还分析了开发者面临的主要挑战,如安全性问题、性能优化和用户体验提升等。通过具体案例和技术解析,本文旨在为开发者提供前瞻性指导,帮助他们在快速变化的移动科技领域保持竞争力。 ###
|
1月前
|
前端开发 测试技术 调度
移动应用与系统:探索开发与操作系统的奥秘####
【10月更文挑战第22天】 本文深入剖析了移动应用的开发流程与移动操作系统的核心原理,揭示了两者如何相互依存、共同推动移动互联网的发展。从应用架构设计到操作系统性能优化,全方位解读移动生态的技术细节,为开发者和用户提供有价值的参考。 ####
38 5