文章目录

  • 一、先使用c语言编写
  • 二、翻译为汇编语言

1.编写一个汇编程序,完成如下要求:
(1)程序包含必要的数据定义语句,保存中间运算结果。
(2)程序通过键盘炮弹的初速度与炮弹与地平线的夹角,输入值的类型为浮点数。
(3)程序输出炮弹能够达到的最高高度和最远记录,格式为:
The maximum height is 高度 meters and the farthest record is 距离 meters
(4)由于正弦与余弦函数的计算是会被重复使用的代码,因此需要用过程来实现,实验要求用汇编语言实现
下载汇编INCLUDE floatio.inc包
https://blog.csdn.net/Cyy246/article/details/117716936

一、先使用c语言编写

#include<stdio.h>
#include<math.h>
//最高高度和最远记录
float getsin(float x){float  sum,a,b;           //sum代表和,a为分子,b为分母char s;s=1;sum=0;a=x;                     //分子赋初值b=1;                    //分母赋初值for(int i=1;a/b>=1e-6;i++)           //精确到0.000001{sum=sum+s*a/b;               //累加一项a=a*x*x;                     //求下一项分子   x的3,        5,          7次方b=b*2*i*(2*i+1);            //求下一项分母     1*2*3,1*2*3*4*5,1*2*3*4*5*6*7s*=-1;}printf("sin%f=%f\n",x,sum);return sum;
}
float getcos(float x){float  sum,a,b;           //sum代表和,a为分子,b为分母char s;s=1;sum=0;a=1;                     //分子赋初值b=1;                    //分母赋初值for(int i=1;a/b>=1e-6;i++)           //精确到0.000001{sum=sum+s*a/b;               //累加一项a=a*x*x;                     //求下一项分子   x的2,        4,          6次方b=b*i*2*(2*i-1);             //求下一项分母     1*2,1*2*3*4,1*2*3*4*5*6s*=-1;}printf("cos%f=%f\n",x,sum);return sum;
}
float getT(float v,float x){float t,g=9.8;t=v*x/g;printf("t:%f",t);return t;
}float getH(float t){float H,g=9.8;H=g*t*t/2;return H;
}
float getC(float t,float x,float v){return t*x*2*v;
}
void main()
{float x,t,v,h,c;printf("发射角度\nx取0-π/2(约等于1.5707963)\nX=");scanf("%f",&x);//角度printf("发射速度\V=");scanf("%f",&v);//速度float sumsin=getsin(x);//sinfloat sumcos=getcos(x);//cost=getT(v,sumsin);//上升到最高所要时间h=getH(t);         //最高c=getC(t,sumcos,v);//最远printf("高%f",h);printf("远%f",c);}

二、翻译为汇编语言

INCLUDE Irvine32.inc
INCLUDE macros.inc
INCLUDE floatio.inc
.data
cyy118  real8   ?       ;输入角度                                输入0.523599
cyy1182 real8   ?       ;输入初速度                           输入10.0
jiaodu  real8   1.5707963       ;通过 cos角度= sin(π/2-角度)  ,带入求sin函数中求cos
jiao    real8   180.0
fenzi   real8   0.0     ;分子
fenmu   real8   1.0     ;分母   初始化分母
sum     real8   0.0     ;和
fan1    real8   1.0     ;乘-1
fan2    real8   -1.0    ;乘-1                        ;cyy118
jie     real8   1.0     ;阶乘 变量
guding1 real8   1.0     ;固定为1,为阶乘变量增加服务
guding2 real8   2.0     ;固定为2,为分母变量服务
sin     real8   0.0     ;正弦值                                        0.5
cos     real8   0.0     ;余弦值                                        0.866025
tt      real8   0.0     ;到达最高所需时间                           0.510204
gg      real8   9.8     ;重力加速度
cc      real8   0.0     ;最远距离                                   8.836995
hh      real8   0.0     ;最高距离                                   1.275511
.codegetfenmu   procfld jie         fld guding2fmul             ;st0 = jie * 2fld guding1fadd              ;st0 = st0 + 1fld jie fmul                ;st0 = st0 * jiefld guding2                                    ;cyy118fmul             ;st0 = st0 * 2fld fenmufmul                ;st0 = fenmu * st0fstp fenmu                       ;fenmu = st0ret
getfenmu    endpsinandcos procmov ecx,8L1:          ;求sinfld fan1                   ;-1*分子   fld fenzi                  ;st0,st1fmul            ;st0 = fan1 * fenzifld fenmufdiv           ;st0 = st0  /  fenmufld    sumfadd         ;st0 = st0 + sumfstp sum  ;去浮点数ST(0)到sum,执行出栈操作  sum = st0    Nullfld fenzifld cyy118fmul                 ;st0 = fenzi * cyy118fld cyy118fmul                ;st0 = st0 * cyy118fstp fenzi                      ;fenzi = st0   Nullcall getfenmu   ;获得分母fld jie                                                ;cyy118fld guding1fadd          ;st0 = jie + guding1fstp jie                  ;jie = st0                 NUllfld fan1fld fan2fmul                ;fan1 = fan1 * -1 fstp fan1loop L1 ret                     ;cyy118
sinandcos endpmain PROCmWrite "angle x=(0-90): "call    ReadFloatfstp cyy118mWrite "speed  V= "call    ReadFloatfstp cyy1182fld cyy118fld jiaofdivfldpifmulfstp cyy118fld cyy118fstp fenzi            ;初始化分子  去浮点数ST(0)到dst,执行出栈操作call sinandcos           ;获得sinfld summWrite "sinx="                      ;cyy118call WriteFloatfstp sincall ShowFPUStack                     ;cyy118fld jiaodufld    cyy118fsubfstp cyy118fld    guding1fst fenmufst jie                     ;cyy118fstp fan1fld cosfstp sumfld cyy118fstp fenzicall sinandcos           ;获得cosfld summWrite "cosx="call WriteFloatfstp coscall ShowFPUStackfld sinfld cyy1182fmul                        ;cyy118fld ggfdiv           ;st0 = st0  /  ggmWrite "T="call WriteFloatfstp ttcall ShowFPUStack                     ;cyy118fld ggfld ttfmul             ;st0 = gg * ttfld ttfmul               ;st0 = st0 * ttfld guding2fdiv             ;st0 = st0  /  2mWrite "The maximum height is"call WriteFloatfstp hhcall ShowFPUStack                        ;cyy118fld ttfld cosfmulfld guding2fmulfld cyy1182fmulmWrite "the farthest record is:"                        ;cyy118call WriteFloatfstp cccall ShowFPUStack
main endp                               ;cyy118
END main

汇编炮弹弹道计算实验相关推荐

  1. Linux之ARM(IMX6U)裸机汇编LED驱动实验--烧写bin文件到SD卡中并运行

    Linux之ARM(IMX6U)裸机汇编LED驱动实验--烧写bin文件到SD卡中并运行 代码烧写 2.烧写的工具 2.把生成的将 imxdownload 放在工程目录下(led.bin同一个文件夹下 ...

  2. 驱动开发指南 第八章 汇编LED灯实验

    <I.MX6U 嵌入式 x Linux 驱动开发指南 V1.6 6>第八章 汇编LED灯实验 正点原子[第二期]手把手教你学Linux之ARM(MX6U)裸机篇 视频 选集 时间 P6 第 ...

  3. Linux之ARM(IMX6U)裸机汇编LED驱动实验--编译驱动

    Linux之ARM(IMX6U)裸机汇编LED驱动实验--编译驱动 前言 编译代码 1.把 .s 文件编译成 .o文件 2.把 .o文件编译成连接文件 .elf 3.arm-linux-gnueabi ...

  4. Alientek I.MX6UL Linux-第八章 汇编LED灯实验

    第八章 汇编LED灯实验 GPIO功能图 IO控制初始化所需要用到的寄存器 1. SW_MUX_CTL Register   Address:20E_0000h base+5Ch offset=20E ...

  5. ARM(IMX6U)裸机汇编LED驱动实验——驱动编写、编译链接起始地址、烧写bin文件到SD卡中并运行

    参考:Linux之ARM(IMX6U)裸机汇编LED驱动实验–驱动编写 作者:一只青木呀 发布时间: 2020-08-07 09:13:48 网址:https://blog.csdn.net/weix ...

  6. 嵌入式Linux(二)汇编LED驱动实验

    目的: 并不是系统的学习汇编,而是在linux开发中有时候需要使用汇编置零进行一些初始化的工作. 1. I.MX6ULL的IO初始化流程: 6ULL的IO命名:IOMUXC_SW_MUC_CTL_PA ...

  7. 单片机实验汇编案例---计数器实验

    一.实验要求 8031内部定时计数器,按计数器模式和方式1工作,对P3.4(T0)引脚进行计数.使用8031的T1作定时器,50ms中断一次,看T0内每0.50ms来了多少脉冲,将其数值按二进制数在7 ...

  8. ARM(IMX6U)裸机C语言版本LED驱动实验(汇编进入处理器SVC模式、SP堆内存、跳转main函数、链接起始地址)

    参考:Linux之ARM(IMX6U)裸机C语言LED驱动实验–驱动编写,编译 作者:一只青木呀 发布时间: 2020-08-11 11:20:17 网址:https://blog.csdn.net/ ...

  9. 汇编学习笔记:对抗反汇编实验2019092801

    汇编学习笔记:对抗反汇编实验2019092801 实验描述 实验环境 实验过程 实验结论 实验描述 使用相连的jz和jnz指令跳转到紧接着jnz指令的call指令的第二个字节.call指令实际上无效. ...

最新文章

  1. 【Cmake】执行cmake命令时报错:No XSLT processor found
  2. MMDetection V2.0:更快更强的通用目标检测平台
  3. 局域网防雷电***实用解决方案
  4. Quartus16.1布线优化选择,重编译可能会满足时序
  5. mysql为什么表大了要重建_为什么MySQL分库分表后总存储大小变大了?
  6. win linux 远程桌面连接,Windows 连接 Ubuntu 16.04 远程桌面
  7. MongoDB- 简单操作命令
  8. 什么是javax.ws.rs.core.context? [第5部分]
  9. qt sizePolicy属性
  10. android 接收SDCcard插拔的广播
  11. 2008年6月6日今天终于调回公司本部啦,记录历史的一天。
  12. html 图片查看 ie8,本地图片预览(支持IE6/IE7/IE8/Firefox3)经验总结
  13. linux grep 如何搜索出包含某个字符串的所有文件 find
  14. 基于Vue和Spring Boot的在线视频播放系统 (模仿咪咕视频)
  15. c语言铺地板,【北理乐学】铺地板
  16. Could not connect to appstore: cURL error 28: Operation timed out after 60000 milliseconds with
  17. python寻找所有三位数素数_寻找所有的素数的python实现
  18. 家电售后APP软件开发作用特点
  19. 基于STM32的多功能MP3设计 毕业设计(论文)开题报告
  20. Image captioning评价方法之ROUGE-L

热门文章

  1. 楼宇节能改造?这套楼宇节能减排方案你得看看
  2. c语言do while什么意思,c语言中while与do while循环的主要区别是什么_后端开发
  3. CUDA 半浮点数运算
  4. 官方正版授权 MAXQDA 标准版、专业质、专业增强版性数据分析工具软件
  5. Windows系统SVN SERVER迁移。从服务器A迁移到服务器B
  6. Ubuntu 下 kazam 录屏 没声音解决方案
  7. kettle教程---kettle作业调度,根据更新时间增量更新
  8. 学习笔记19--定位系统之惯性导航定位
  9. puttygen 命令行 id_rsa.pub 转 ppk
  10. ADAS-CIS相机关键参数综述