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. Tinkoff Internship Warmup Round 2018 and Codeforces Round #475 (Div. 1)D. Frequency of String

    题意:有一个串s,n个串模式串t,问s的子串中长度最小的包含t k次的长度是多少 题解:把所有t建ac自动机,把s在ac自动机上匹配.保存每个模式串在s中出现的位置.这里由于t两两不同最多只有xsqr ...

  2. 打造springboot高性能服务器(spring reactor的使用)

    推荐:https://www.cnblogs.com/ivaneye/p/5731432.htmlpom依赖: <dependency> <groupId>org.spring ...

  3. 1)selenium+ java集成,待深度项目流程应用

    selenium 1,selenium ide mac 安装 打开firefox浏览器,进入下面网址https://addons.mozilla.org/en-US/firefox/addon/sel ...

  4. Hadoop---集群的时间同步

    集群的时间同步(使用插件使从机和主机时间一致) 集群保障时间一致 共有3个方法 1.手工的改 date –s “2016-01-05” 2.启动service NTP 3.基于实体机 7*24 不关机 ...

  5. VS2015在win10上编译的程序不能在Win7上运行的原因

    研究了下,搞懂原理了.是VS 2015 编译的问题,因为我是Win 10 ,所以会用到win 10 的SDK ,这个SDK 依赖了Universal C Runtime ,就是API-MS-CRT-X ...

  6. 微信https抓包,不同安卓版本、微信版本对证书的要求

    安卓系统 7.0 以下版本,不管微信任意版本,都会信任系统提供的证书 安卓系统 7.0 以上版本,微信 7.0 以下版本,微信会信任系统提供的证书 安卓系统 7.0 以上版本,微信 7.0 以上版本, ...

  7. [BZOJ1406]密码箱

    Problem 给你1个数n,求出0 ≤ x < n,并且x ^ 2 % n = 1 Solution x ^ 2 - 1 = kn,(x - 1) * (x + 1) = kn 所以枚举n的约 ...

  8. HTTP的缓存策略

    etag 与 if-match https://www.cnblogs.com/huangzhilong/p/4999207.html https://juejin.im/post/5c136bd16 ...

  9. js的预解析详解

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  10. SQL Server--------SQL Server常用(查看注释,新增注释,生成实体,查看表结构信息,case when...)

    --新增字段: ALTER TABLE line_info ADD line_remark NVARCHAR(MAX) DEFAULT ''  EXECUTE sp_addextendedproper ...