Writing a C logic for moving MDH register contents after MUL instruction   http://www.keil.com/forum/5231/

unnecessary code generation    http://www.keil.com/forum/3528/

Hi Heinz,

I made a similar observation. Consider this example:

int a, b, c, d;

void main(void)
{
a = c / d;
b = c % d;
} 0000 F2F70000 R MOV R7,d
0004 F2F60200 R MOV R6,c
0008 F6F60EFE MOV MDL,R6
000C 4B77 DIV R7
000E F6070600 R MOV a,MDL
0012 F6F60EFE MOV MDL,R6
0016 4B77 DIV R7
0018 F2F40CFE MOV R4,MDH
001C F2F50EFE MOV R5,MDL
0020 F6F40400 R MOV b,R4
0024 CB00 RET

Whereas the more optimal code would be

MOV     R6,d
MOV MDL,c
DIV R6
MOV a,MDL
MOV b,MDH
RET

Quite a difference, isn't it? Oh well, maybe we are spoilt by modern compilers like gcc or msvc?

RE: Writing a C logic for moving MDH register contents after MUL instruction

Are you trying to do a 32-bit multiplication? You may have forgotten to use a type cast to long. Remember that in C the product of two ints is int. Compile this and see the difference:

int a, b, c, d;
c = ( a * b ) >> 16;
d = ( (long)a * (long)b ) >> 16;

u16 u_16;
u32 u_32;

void main ()
{

int a,b,c;
short d,e;
long f;

f = (long)a*b ;
u_16 = ((u16)(f >> 16)<<1) | ((u16)f>>15);

上述代码可以实现 32位整体移位15并赋值到 16位变量;中间代码会有 MDH,MDL参与移位操作;

C166 -MDH的更多相关文章

  1. C166 Interfacing C to Assembler

    Interfacing C to Assembler You can easily interface your C programs to routines written in XC16x/C16 ...

  2. c166 -div

    unsigned short a=10; unsigned short b; unsigned short c;unsigned long d; b = (unsigned short)(d/2400 ...

  3. Fixed-point multiplication (C166 A*B/B)

    I want to multiply two fixed point numbers. After the multiplication I have to shift the result so t ...

  4. C166 结构按字节访问的设置

    PACK Compiler Directive Home » Compiling Programs » Directives » Reference » PACK Abbreviation None. ...

  5. 标准6轴机器人正反解(1)-坐标系和MDH参数表

    刚来新公司不久,部门给安排了新人作业,我被分到的任务是求标准6轴机器人的正反解,以及利用就近原则选择最优解.从今天开始,逐步将这部分内容总结出来: 本文以及后续文章均使用改进DH法: 连杆坐标系: 坐 ...

  6. C166 8位字节位运算赋值-代码优化

    8位字节位运算赋值优化特记录下: unsigned short func1(){ unsigned short a; return a;} unsigned char func2(){ unsigne ...

  7. [转]keil使用详解

    第一节 系统概述 Keil C51是美国Keil Software公司出品的51系列兼容单片机C语言软件开发系统,与汇编相比,C语言在功能上.结构性.可读性.可维护性上有明显的优势,因而易学易用.用过 ...

  8. JAVA WEB WITH IDEA

    本文主要介绍使用IDEA开发环境,创建JAVA WEB 工程,并介绍war包的制作过程. 1 创建MAVEN工程

  9. TPC-H生成.tbl文件导入postgresql数据库的坑

    数据库project好好的不用主流的MySQL和Microsoft server而要求用听都没听过的postgresql (当然,可能你三个都没听过) 这里的坑主要是把生成的那八张.tbl的表导入pg ...

随机推荐

  1. Web版记账本开发记录(七)

    经过不懈的努力,虽然开发出来的还有瑕疵,但今后我会继续努力的.

  2. 【Mybatis】【1】generate批量生成实体类,数据库接口类和mapper

    前言: 1,实体类之类如果自己写的话,比较繁琐,还容易出错,所以用generate自动生成 2,int类型可能会生成为short类型,建议不要手动改回int类.因为下次生成又是short类型了,可能会 ...

  3. struct放入list中按照某字段排序

    //管线字段信息 public struct FieldInfo { public int iID; //编号 public string sFieldName; //字段名 public strin ...

  4. 如何设置IntelliJ IDEA智能感知支持Jsp内置对象

    一.问题: 在IntelliJ IDEA 新建jsp页面,想通过内置对象获取查询参数,比如:request.getParameter("id"),虽然手动输入后能够运行成功,但是智 ...

  5. Mysql 监控脚本

    cat mysql_status_output.py #coding=utf-8import jaydebeapiimport sysimport pymysqlimport osfrom prome ...

  6. 配置阿里云docker镜像地址

    { "registry-mirrors": [ "https://kfwkfulq.mirror.aliyuncs.com", "https://2l ...

  7. 201671010142 <java程序设计>初次学习心得与感悟

    从开始对JDK的配置就遇到了问题,从这点就可以知道自己知识的薄弱.又知道了在控制台下一些常用命令的掌握.对知识的理解挺艰难,比如遇到一个新的问题就不知道该从哪里入手,有时候还不知道到底问题是啥.接受能 ...

  8. ipone 5s上,字体rem遇到的问题

    webapp中,12px的字体,利用rem实现自适应布局, 发现只有在ipone 5s中字体超大, 这两个class元素中字体一样大小,发现上面元素字体在ipone 5s中很大, 后来验证问题在哪里, ...

  9. cornerstone 使用-图标含义-分支-合并

    http://www.jianshu.com/p/7f5c019c528b http://www.cnblogs.com/fyongbetter/p/5404697.html

  10. VS2013/VS2015/VS2017通过oschina托管代码

    1.到http://git.oschina.net注册账号,创建项目,这一步不做详细描述,创建后效果如图 2.打开VS创建项目,为了测试,创建一个空白解决方案 3.把解决方案添加到源代码管理(这一步仅 ...