当前位置: 首页 > wzjs >正文

马鞍山做网站的公司78友情链接代码模板

马鞍山做网站的公司78,友情链接代码模板,别墅设计图纸及效果图大全,定制网站建设公司价格有了寄存器的编号实现,现在讨论如何实现指令编码。还是以AArch64指令为例进行说明。假设指令为add x0,x1,x2,根据指令手册可知 其机器码为 #二进制 10001011000 00010 000000 00001 00000#十六进制 0x8B020020 #小端编码需要反转 0x2000028B回到源码文件…

有了寄存器的编号实现,现在讨论如何实现指令编码。还是以AArch64指令为例进行说明。假设指令为add x0,x1,x2,根据指令手册可知

在这里插入图片描述
其机器码为

#二进制
10001011000 00010 000000 00001 00000#十六进制
0x8B020020
#小端编码需要反转
0x2000028B

回到源码文件assembler_aarch64.hpp。该文件中定义了汇编器类(Assembler)。在英文中(雅思7分,口语8分,炫耀一下),汇编(assemble)的原意是生产线上组装零件的意思。根据计算机的知识,汇编器(assembler)的作用就是根据手册组装指令中的各个部分。根据手册中该指令描述可知,至少有几处是需要填充值。如果要形成完整的指令则需将这些部分组装(assemble)起来。

在源码中如何实现上述的add指令呢?其实现原理是将手册中各部分用编码替代,然后进行拼装。assembler_aarch64.hpp文件的如下代码实现了add x0,x1,x2指令的编码

#define INSN(NAME)                                      \void NAME(Register Rd, Register Rn, Register Rm) {    \if (Rd == sp || Rn == sp)                           \NAME(Rd, Rn, Rm, ext::uxtx);                      \else                                                \NAME(Rd, Rn, Rm, LSL);                            \}...INSN(add);

上述INST(add)宏展开之后如下

void add(Register Rd, Register Rn, Register Rm) { if (Rd == sp || Rn == sp) add(Rd, Rn, Rm, ext::uxtx); else add(Rd, Rn, Rm, LSL); 
}

很明显,如要实现add x0,x1,x2的编码,需调用的add(Rd,Rn,Rm,LSL)函数,其具体实现如下

  // Add/subtract (shifted register)
#define INSN(NAME, size, op)                            \void NAME(Register Rd, Register Rn, Register Rm,      \enum shift_kind kind, unsigned shift = 0) { \starti;                                             \f(0, 21);                                           \assert_cond(kind != ROR);                           \zrf(Rd, 0), zrf(Rn, 5), zrf(Rm, 16);                \op_shifted_reg(0b01011, kind, shift, size, op);     \}INSN(add, 1, 0b000);

宏展开代码为

void add(Register Rd, Register Rn, Register Rm, enum shift_kind kind, unsigned shift = 0) { Instruction_aarch64 do_not_use(this); set_current(&do_not_use); f(0, 21); ; zrf(Rd, 0), zrf(Rn, 5), zrf(Rm, 16); op_shifted_reg(0b01011, kind, shift, 1, 0b000); 
}

这里首先要明白f函数的作用:

/*
* 将val的值放入lsb(低位)至msb(高位)区间
*/
void f(unsigned val, int msb, int lsb) {current->f(val, msb, lsb);
}

因此f(0,21)表示在21位上设置为0,符合手册要求的格式
在这里插入图片描述

其他函数如zrfop_shifted_reg均是在内部调用f函数以实现在编码各位置上的赋值,这里对zrf函数的实现不再赘述,简单分析一下op_shifted_reg函数
在这里插入图片描述
因此op_shifted_reg将22至31位上按照手册要求赋值。

通过add(Register Rd, Register Rn, Register Rm, enum shift_kind kind, unsigned shift = 0) 的调用可完成add x0,x1,x2汇编指令的编码。其中Rmr1替换,Rnr2替换,Rdr0替换。关于寄存器定义的内容参见寄存器定义。

指令编码完成后,如果需要执行该指令,则需将其放入内存的指令区域,然后让程序计数器(PC)指向该指令地址,CPU读取该指令执行即可。


文章转载自:

http://cWqq4pBh.wkjzt.cn
http://YbimLVvR.wkjzt.cn
http://Z4N1sZrw.wkjzt.cn
http://Nm1FX7fH.wkjzt.cn
http://YTJdpzV9.wkjzt.cn
http://t0Nr2Vbb.wkjzt.cn
http://S9uEAXrX.wkjzt.cn
http://eKllXguD.wkjzt.cn
http://bSWs20pV.wkjzt.cn
http://qRyYusdw.wkjzt.cn
http://b7KgdqGo.wkjzt.cn
http://Ef2RNBns.wkjzt.cn
http://BMiCpHFA.wkjzt.cn
http://oLOxPhAa.wkjzt.cn
http://Ndh3LAV7.wkjzt.cn
http://49hcHOue.wkjzt.cn
http://KuRvYwSn.wkjzt.cn
http://8z8NYhB8.wkjzt.cn
http://Dz2X1rdH.wkjzt.cn
http://zhPjOl1m.wkjzt.cn
http://rLTlE5TR.wkjzt.cn
http://9eOu198c.wkjzt.cn
http://h3KpDbI3.wkjzt.cn
http://KrWjBl1s.wkjzt.cn
http://wF8B9cSi.wkjzt.cn
http://iDX7vdZ5.wkjzt.cn
http://V9m8Ypks.wkjzt.cn
http://cCQOXpcS.wkjzt.cn
http://sFgw7ZM2.wkjzt.cn
http://gzsvCXEq.wkjzt.cn
http://www.dtcms.com/wzjs/612309.html

相关文章:

  • 企业网站好做吗闽侯县建设局网站
  • 山东华邦建设集团网站wordpress 禁止过滤
  • 免费企业网站程序上传淮南营销型网站建设怎么样
  • 网站YYQQ建设可以做平面设计兼职的网站
  • 快速建立平台网站开发设计建站流程最佳线上网站制作模板
  • 设计软件基础课程学什么鱼头seo推广
  • 电商网站设计与制作网站中加入百度地图
  • 网站图片分辨率建设银行公户网站
  • 咸阳学校网站建设哪家专业河北pc端网站开发
  • 学院网站设计方案做网站大公司有哪些
  • 网页设计与制作做网站华为商城的网站建设
  • 网站建设费 科目设计师每天都上的网站
  • WordPress生成电商小程序seo优化技术厂家
  • 中职学校网站建设方案做网站推广的公司发展前景
  • 互动案例的网站做网站怎么插音频
  • 亦庄网站开发网址转app
  • 网站做行业认证好处怎么做晒鱼的网站
  • 假网站怎么做南京百姓网免费发布信息网
  • 没有公众号建微信网站网络营销推广的三板斧
  • 注册了网站之后怎么设计wordpress获取tag
  • 微站和网站数据同步呼伦贝尔做网站公司
  • php淘宝商城网站源码全国网站建设大赛
  • 淘客二级域名网站免费建设卡盟网站模板
  • 网站布局的好坏的几个要素wordpress负载均衡上传附件
  • 网站指向ip列表是什么建网站团队
  • 网站建设签收单郑州网站排名公司
  • 网站开发项目成本分析之合理性郑州网站建设hnqfu
  • 营销型网站建传统网站怎么换成WordPress
  • 如何建设淘宝客网站wordpress用户注册邮件
  • 设计网站的三个要素如何建设网页制作的网站