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运行程序


打印了如下的结果


目录
相关文章
|
5月前
|
人工智能 搜索推荐 API
🚀 2小时极速开发!基于DeepSeek+智体OS的AI社交「头榜」震撼上线!
基于DeepSeek大模型与DTNS协议的革命性AI社交平台「头榜」震撼上线!仅需2小时极速开发,即可构建完整社交功能模块。平台具备智能社交网络、AI Agent生态、Prompt市场、AIGC创作等六大核心优势,支持低代码部署与个性化定制。开发者可快速接入DeepSeek API,体验去中心化架构与数据自主权。官网:[dtns.top](https://dtns.top),立即开启你的AI社交帝国!#AI社交 #DeepSeek #DTNS协议
153 4
|
8月前
|
存储 人工智能 JavaScript
Harmony OS开发-ArkTS三
本文介绍了ArkTS的基础语法,包括常量、命名规则、数组及其常用函数,以及函数的定义与使用,涵盖匿名函数和箭头函数的区别。通过具体示例,帮助读者快速掌握ArkTS编程技巧,踏上Harmony OS开发之旅。君志所向,一往无前!
341 1
Harmony OS开发-ArkTS三
|
6月前
|
Dart 开发工具 Android开发
在macOS系统上配置Flutter环境的步骤
在macOS系统上配置Flutter环境的步骤
687 62
|
5月前
|
负载均衡 安全 API
A10 ACOS 5 - 专为现代应用程序设计的开放式云就绪操作系统
A10 ACOS 5 - 专为现代应用程序设计的开放式云就绪操作系统
72 4
|
5月前
|
Kubernetes Cloud Native 区块链
Arista cEOS 4.30.10M - 针对云原生环境设计的容器化网络操作系统
Arista cEOS 4.30.10M - 针对云原生环境设计的容器化网络操作系统
148 0
|
8月前
|
存储 人工智能 编译器
【03】鸿蒙实战应用开发-华为鸿蒙纯血操作系统Harmony OS NEXT-测试hello word效果-虚拟华为手机真机环境调试-为DevEco Studio编译器安装中文插件-测试写一个滑动块效果-介绍诸如ohos.ui等依赖库-全过程实战项目分享-从零开发到上线-优雅草卓伊凡
【03】鸿蒙实战应用开发-华为鸿蒙纯血操作系统Harmony OS NEXT-测试hello word效果-虚拟华为手机真机环境调试-为DevEco Studio编译器安装中文插件-测试写一个滑动块效果-介绍诸如ohos.ui等依赖库-全过程实战项目分享-从零开发到上线-优雅草卓伊凡
319 10
【03】鸿蒙实战应用开发-华为鸿蒙纯血操作系统Harmony OS NEXT-测试hello word效果-虚拟华为手机真机环境调试-为DevEco Studio编译器安装中文插件-测试写一个滑动块效果-介绍诸如ohos.ui等依赖库-全过程实战项目分享-从零开发到上线-优雅草卓伊凡
|
8月前
|
前端开发 JavaScript 开发工具
【04】鸿蒙实战应用开发-华为鸿蒙纯血操作系统Harmony OS NEXT-正确安装鸿蒙SDK-结构目录介绍-路由介绍-帧动画(ohos.animator)书写介绍-能够正常使用依赖库等-ArkUI基础组件介绍-全过程实战项目分享-从零开发到上线-优雅草卓伊凡
【04】鸿蒙实战应用开发-华为鸿蒙纯血操作系统Harmony OS NEXT-正确安装鸿蒙SDK-结构目录介绍-路由介绍-帧动画(ohos.animator)书写介绍-能够正常使用依赖库等-ArkUI基础组件介绍-全过程实战项目分享-从零开发到上线-优雅草卓伊凡
450 5
【04】鸿蒙实战应用开发-华为鸿蒙纯血操作系统Harmony OS NEXT-正确安装鸿蒙SDK-结构目录介绍-路由介绍-帧动画(ohos.animator)书写介绍-能够正常使用依赖库等-ArkUI基础组件介绍-全过程实战项目分享-从零开发到上线-优雅草卓伊凡
|
9月前
|
存储 人工智能 JavaScript
Harmony OS开发-ArkTS语言速成二
本文介绍了ArkTS基础语法,包括三种基本数据类型(string、number、boolean)和变量的使用。重点讲解了let、const和var的区别,涵盖作用域、变量提升、重新赋值及初始化等方面。期待与你共同进步!
395 47
Harmony OS开发-ArkTS语言速成二
|
8月前
|
安全 前端开发 开发工具
【01】鸿蒙实战应用开发-华为鸿蒙纯血操作系统Harmony OS NEXT-项目开发实战-优雅草卓伊凡拟开发一个一站式家政服务平台-前期筹备-暂定取名斑马家政软件系统-本项目前端开源-服务端采用优雅草蜻蜓Z系统-搭配ruoyi框架admin后台-全过程实战项目分享-从零开发到上线
【01】鸿蒙实战应用开发-华为鸿蒙纯血操作系统Harmony OS NEXT-项目开发实战-优雅草卓伊凡拟开发一个一站式家政服务平台-前期筹备-暂定取名斑马家政软件系统-本项目前端开源-服务端采用优雅草蜻蜓Z系统-搭配ruoyi框架admin后台-全过程实战项目分享-从零开发到上线
352 5
【01】鸿蒙实战应用开发-华为鸿蒙纯血操作系统Harmony OS NEXT-项目开发实战-优雅草卓伊凡拟开发一个一站式家政服务平台-前期筹备-暂定取名斑马家政软件系统-本项目前端开源-服务端采用优雅草蜻蜓Z系统-搭配ruoyi框架admin后台-全过程实战项目分享-从零开发到上线
|
8月前
|
JavaScript 编译器 开发工具
【02】鸿蒙实战应用开发-华为鸿蒙纯血操作系统Harmony OS NEXT-项目开发实战-准备工具安装-编译器DevEco Studio安装-arkts编程语言认识-编译器devco-鸿蒙SDK安装-模拟器环境调试-hyper虚拟化开启-全过程实战项目分享-从零开发到上线-优雅草卓伊凡
【02】鸿蒙实战应用开发-华为鸿蒙纯血操作系统Harmony OS NEXT-项目开发实战-准备工具安装-编译器DevEco Studio安装-arkts编程语言认识-编译器devco-鸿蒙SDK安装-模拟器环境调试-hyper虚拟化开启-全过程实战项目分享-从零开发到上线-优雅草卓伊凡
357 2
【02】鸿蒙实战应用开发-华为鸿蒙纯血操作系统Harmony OS NEXT-项目开发实战-准备工具安装-编译器DevEco Studio安装-arkts编程语言认识-编译器devco-鸿蒙SDK安装-模拟器环境调试-hyper虚拟化开启-全过程实战项目分享-从零开发到上线-优雅草卓伊凡

热门文章

最新文章

推荐镜像

更多