c语言程序如何调用标准库函数,如何调用C标准库的exit函数详解
编译大于运算符
原定的计划中这一篇应当是要讲如何编译if表达式的,但是我发现没什么东西可以作为if的test-form的部分的表达式,所以觉得,要不还是先实现一下比较两个数字这样子的功能吧。说干就干,我决定用大于运算符来作为例子——大于运算符就是指>啦。所以,我的目标是要编译下面这样的代码
(> 1 2)
并且比较之后的结果要放在EAX寄存器中。鉴于现在这门语言还非常地简陋,没有布尔类型这样子的东西,所以在此仿照C语言的处置方式,以数值0表示逻辑假,其它的值表示逻辑真。所以上面的表达式在编译成汇编代码并最终运行后,应当可以看到EAX寄存器中的值为0。
为了编译大于运算符,并且将结果放入到EAX寄存器中,需要用到新的指令CMP、JG,以及JMP了。我的想法是,先将第一个操作数放入到EAX寄存器,将第二个操作数放入到EBX寄存器。然后,使用CMP指令比较这两个寄存器。如果EAX中的数值大于EBX,那么就使用JG指令跳到一个MOV指令上,这道MOV会将寄存器EAX的值修改为1;否则,JG不被执行,执行后续的一道MOV指令,将数值0写入到EAX寄存器,然后使用JMP跳走,避免又执行到了刚才的第一道MOV指令。思路还是挺简单的。
在修改jjcc2之前,还需要在inside-out/aux中对>予以支持,但没什么特别的,就是往member的参数中加入>这个符号而已。之后,将jjcc2改为如下的形式
(defun jjcc2 (expr globals)
"支持两个数的四则运算的编译器"
(check-type globals hash-tabl
c语言程序如何调用标准库函数,如何调用C标准库的exit函数详解相关推荐
- bind() c语言,c/c++ 标准库 bind 函数详解
bind函数定义在头文件 functional 中.可以将 bind 函数看作一个通用的函数适配器,它接受一个可调用对象,生成一个新的可调用对象来"适应"原对象的参数列表. bin ...
- c语言stl模板,c/c++开发分享C++ 标准模板库 STL 顺序容器详解
c++ 标准模板库 stl 顺序容器 容器 顺序性 重复性 支持迭代器 vector 动态数组 无序 可重复 随机访问迭代器 deque 双向队列 无序 可重复 随机访问迭代器 list 双向链表 无 ...
- Python|线程和进程|阻塞|非阻塞|同步|异步|生成器和协程|资源竞争|进程间通信|aiohttp库|daemon属性值详解|语言基础50课:学习(11)
文章目录 系列目录 原项目地址 第34课:Python中的并发编程-1 线程和进程 多线程编程 使用 Thread 类创建线程对象 继承 Thread 类自定义线程 使用线程池 守护线程 资源竞争 G ...
- puts和fputs函数及其区别,C语言puts和fputs函数详解
puts和fputs函数及其区别,C语言puts和fputs函数详解 与 gets 函数一样,对于 puts 函数,同样建议使用 fputs 函数来代替 puts 函数.如下面的示例代码所示: int ...
- c语言中用来指示文件缓冲区中具体读写位置,C语言文件读写操作中缓冲区问题和setbuf函数详解...
清除和设置文件缓冲区 (1).清除文件缓冲区函数: int fflush(FILE *stream); int flushall(); fflush()函数将清除由stream指向的文件缓冲区里的内容 ...
- Python 标准库之 sys 模块详解
Python sys 模块详解 1. 简介 "sys"即"system","系统"之意.该模块提供了一些接口,用于访问 Python 解释器 ...
- gets和fgets函数及其区别,C语言gets和fgets函数详解
gets和fgets函数及其区别,C语言gets和fgets函数详解 每当讨论 gets 函数时,大家不由自主地就会想起 1988 年的"互联网蠕虫",它在 UNIX 操作系统的 ...
- Java调用SMSLib用单口短信猫发送短信详解
技术园地 当前位置:短信猫网站主页 > 技术园地 > [转载]Java调用SMSLib用单口短信猫发送短信详解 发布时间:2017/02/09 点击量:620 SMSLib是Apache的 ...
- C语言-入门级别函数详解
C语言-入门级别函数详解 写在开始 关于函数 1. 函数的定义形式 2.函数的声明 3. 返回语句 4.函数参数 4.1 形式参数(传值调用) 4.2 实际参数(传址调用) 4.3无参数 5.函数的调 ...
最新文章
- element elcolumn 使用本地图片_年末了,教你如何使用Python实现上班摸鱼
- Swift UIAlertView 的使用
- 上海Uber优步司机奖励政策(1月18日~1月24日)
- 百度地图API(二)
- php限定时间内同一ip只能访问一次
- python框架Flask学习笔记之get和post请求
- ubuntu16.04修改xfce下的gedit的背景颜色
- Mybatis快速入门的代码实现及报错处理解决org.apache.ibatis.exceptions.PersistenceException
- linux accept过程,Linux协议栈accept和syn队列问题
- 关闭VS警告#pragma warning(disable:4996)
- 迪士尼自研算法突破百万高清像素用AI换脸来拍电影
- linux系统用户登陆时脚本执行顺序
- mysql 查看密码_Ubuntu安装和配置MySQL数据库
- RSA的JavaScript程序
- ztree异步加载数据amp;amp;amp;amp;amp;amp;amp;amp;给父节点动态追加子节点
- 项目分析-纷享车链AutoChain的数据保险柜解读
- 工业照明节能减碳难?致远ZWS云平台有妙招
- C#视频采集方法对比
- html需要背的标签,html的header标签需要怎么使用
- VS2019 配色_新手设计师如何做好设计配色
热门文章
- soft nproc 与 soft nofile
- MFC 基于多文档的打印和打印预览功能的实现
- Python中类的定义与实例化
- 【shell】shell标准输出与错误输出重定向
- 网络安全通识全解|第14期 那些常见的网络安全“黑话”
- linux更换桌面图,桌面应用|在 Linux 上安装必应桌面墙纸更换器
- window 版 Charles 抓包 手机 app (以抓取 “华图在线” App为例)
- 【已解决】如何使用Intel® oneAPI HPC Toolkit中的Fortran编译器ifort?
- 【COMSOL要点整体概述】
- 大学生计算机专业四年应该做的(资源推荐、练习网站、论文写作、考试经验、求职方法、出国计划)