计算机系统第三章——控制

控制:条件码
当前运行程序的相关信息
临时数据(%eax,…)
运行栈桢的地址(%ebp,%esp)
即将要执行的指令地址(%eip,…)
标志位
CF:是否有进位,无符号数加减法
ZF:结果是否为零
SF:第一位是否为1(有符号数),结果为负数
OF:结果是否溢出,有符号数有了溢出

条件码设置:cmpl Src,Dest Dest-Src影响标志位
比如比较两个有符号数的大小
使用cmpl l1,l2
如果l2<l1 SF^OF=1
l2>l1 SF^OF=0

testl b,a 等价于a&b设置条件码
判断该寄存器是否为0
ZF set 如果a&b==0
SF set 如果a&b<0 也就是有符号数自己与自己与,首位为1

SF^OF=1表示小于,后小于前
~(SF^OF)表示大于等于,后大于等于前
ZF表示相等,SF表示为负数
~SF表示非负数
(SF^OF)|ZF表示小于或者等于
CF&ZF表示无符号数大于,因为不需要借位,够减
CF就表示小于,要借位,不够减

movl 12(%ebp),%eax //eax=y
cmpl %eax,8(%ebp)//x-y,改变标志位
setg %al //al=x>y,就是如果x>y,al为1 //如果(SF^OF)&ZF
movzbl %al,%eax //因为al是eax低8位,我们将高24位置0

返回值一定要放在eax中
setg 只设置一个字节

条件分支
jmp无条件跳转
je/jz 当ZF=1时跳转,也就是相等或者等于0 cmpl %eax,%ebx //ebx和eax相等, text %eax,%eax//eax为0
jne/jnz 当ZF=0时跳转,就是不相等或者不等于0
js 当SF为1时跳转,就是为负数
jns 当SF为0时跳转,就是非负数
jg 当(SF^OF)&ZF就是大于
jge 当~(SF^OF)就是大于等于
jl 当(SF^OF)就是小于
jle 当(SF^OF)|ZF就是小于或者等于
ja 当CF&ZF无符号数大于above
jb 当C无符号小于below

条件跳转
先跳转再执行

分支跳转
val=x>y?x-y:y-x
先有分支,再跳转

条件传送:满足条件做传送
先计算一个条件操作的两种结果,然后根据条件选择某一个
int tval=y-x;
int rval=x-y;
int test=x<y;
if(test) rval=tval;
return rval;

cmpl %edx,%ecx
cmovl %ebx,%eax
当ecx小于edx,就将ebx传给eax
这样CPU就无需做分支预测,避免预测错误的代价,流水线效率更高

条件传送:要提前先算好
并且算的时候可能会有非法操作
两个表达式都进行了计算,对同一个变量进行计算,那么第二个引用的变量就是第一个计算完的了

循环:
do-while:先执行一遍循环体,再判断
while:先判断,再执行
for循环:先赋初值,再判断,再做循环体,再更新循环变量

switch语句:跳转表
long switch(long x)
{
long w=1;
switch(x)
{。。。
}
return w;
}
movl 8(%ebp),%eax//eax=x
cmpl $6,%eax //eax-6,更新标志位
ja .L8 如果大于就goto default
jmp *.L4(,%eax,4)//goto *JTab[x]每个跳转地址需要4字节
跳转表基地址:.L4

假如基地址为0x8048680
jmp *0x8048680(,%eax,4)
我们就可以用gdb查看跳转表的地址
x/7xw 0x8048680

在这里插入图片描述在这里插入图片描述

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 蓝桥杯是全国性的计算机大赛,旨在提高大学生的计算机技术水平和创新能力。嵌入式STM32G431是一款嵌入式芯片,具有高性能和低功耗的特点。第十二届第一场省赛停车计费系统是蓝桥杯的一道工程题目,要求参赛选手设计一个停车场计费系统。 停车计费系统是指通过嵌入式技术实现对车辆进入和离开停车场的自动检测、计时和计费的系统。对于这个题目,参赛选手可以根据题目要求,使用STM32G431芯片设计一个具有以下功能的系统: 1. 车辆进入检测:使用车辆传感器检测车辆的进入,触发计时。 2. 车辆离开检测:使用车辆传感器检测车辆的离开,停止计时。 3. 计时功能:使用内部时钟模块获取进入和离开的时间,并计算停车时间。 4. 计费功能:根据停车时间,按照一定的计费规则进行计费。 5. 显示功能:使用液晶显示屏显示当前的停车信息,如车牌号、停车时间、费用等。 6. 数据存储功能:使用闪存等储存介质将停车数据进行存储,以便后续的数据分析和查询。 设计一个停车计费系统涉及到硬件设计和软件编程两个方面。硬件方面,参赛选手需要选择合适的传感器、显示屏、存储介质等,以及设计电路和接口进行连接。软件方面,需要使用C语言或者汇编语言编写程序,对芯片进行编程,实现各项功能。 通过此次比赛,选手们可以锻炼嵌入式系统的设计能力和编程能力,了解实际应用中嵌入式系统的工作原理和应用场景。同时,也能提升对STM32G431芯片的理解和运用能力。这对于培养嵌入式技术人才,推动物联网技术的发展都具有积极意义。 ### 回答2: 蓝桥杯是面向计算机爱好者的智力竞赛,而嵌入式STM32G431是一款嵌入式系统开发板。第十二届第一场省赛的停车计费系统真题工程,则是要求参赛选手设计并实现一个能够进行停车计费的系统。 停车计费系统是一种用于自动计费和管理停车场的系统。这个系统可以通过识别车辆的进出以及停车的时间,自动计算并收费。在这个工程中,选手需要使用嵌入式STM32G431开发板以及相关的硬件和软件,来设计一个能够实现停车计费功能的系统。 首先,选手需要使用传感器或摄像头来实现车辆进出的检测。当车辆进入或离开停车场时,传感器会发出信号并通过STM32G431进行检测。接着,选手需要编程实现识别车辆的算法,以便能够识别不同的车辆。当车辆停放时,系统会通过计时器记录停车的时间。 然后,选手需要编写计费算法,根据停车的时间来计算费用。这个算法可以根据停车场的规则来确定费用的计算方式,例如按小时计费或按照不同的时间段采用不同的费率。 最后,选手还需要设计一个界面,使得系统能够与用户进行交互。用户可以通过该界面查询停车费用,并进行付款。同时,选手还需要保证系统的稳定性和安全性,确保数据的准确性和保密性。 总而言之,蓝桥杯嵌入式STM32G431第十二届第一场省赛停车计费系统真题工程要求选手使用硬件和软件开发能力,设计并实现一个完整的停车计费系统。这需要选手具备嵌入式系统开发、传感器技术、算法设计和界面设计等多方面的知识和技能。 ### 回答3: 蓝桥杯嵌入式stm32g431——第十二届第一场省赛停车计费系统真题工程是一个基于STM32G431开发板的停车计费系统设计题目。该系统的主要功能是实现停车场的车辆进入、出场的计费管理。 首先,该系统需要实现一个车辆进入检测的功能。当车辆进入停车场时,系统会通过传感器检测到车辆的到达,并记录下进入的时间。 然后,系统需要实现一个车辆出场的功能。当车辆准备离开停车场时,系统会通过传感器检测到车辆的离开,并记录下离开的时间。 接下来,系统需要计算车辆停留的时间。通过进入时间和离开时间的差值计算得出车辆停留的时长。 最后,系统需要计算停车费用。根据停车场的计费规则,根据车辆停留的时长计算出停车费用,并将费用显示在屏幕上。 在实现上述功能的过程中,需要运用STM32G431开发板的各种功能和模块,包括GPIO口、定时器、中断、串口通信等。通过编写相应的代码,实现按钮的控制、传感器检测、时间的计算以及屏幕的显示等功能。 该项目的设计需要考虑多种情况,比如车辆重复进入出场、车辆进入出场顺序错乱等,要充分考虑这些异常情况并进行相应的处理。在代码编写过程中,还需注意代码的优化和资源的合理利用,以提高系统的性能和效率。 通过完成这个项目的设计与实现,可以加深对STM32G431嵌入式系统的了解和应用,并提升嵌入式系统开发的能力。同时,也能锻炼自己的逻辑思维、问题解决能力和团队合作精神。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值