[问题笔记][指针相加翻译成汇编右移2位]

问题描述:

  创建MMU的转换表,在构建每个表项时,基地址指针加上相对偏移,翻译成汇编,偏移被右移了2位,再加上基地址。

问题分析:

  vaddr的高12位是段地址相对于基地址的偏移数,MMU在寻址时会根据vaddr高12位的偏移乘以4变成相对地址来找到表项的偏移地址。所以指针翻译成汇编右移2位表示的是乘以4,计算出相对于基地址的偏移地址,而不是偏移数。

unsigned long *ttb;
unsigned long vaddr;
ttb = ttb + (vaddr >> 20);
ldr     r3, [fp, #-12]
lsr     r3, r3, #20
lsl     r2, r3, #2
ldr     r3, [fp, #-16]
add     r3, r3, r2
str     r3, [fp, #-16]
时间: 2024-10-30 22:43:55

[问题笔记][指针相加翻译成汇编右移2位]的相关文章

《linux 内核完全剖析》 笔记 由逻辑地址转换成线性地址代码分析

一开始由这段代码引发的纠结 get_base(current->ldt[1]) 下面是各个相关的代码,摘自不同的header files... current是指向当前task的指针 struct desc_struct ldt[3]; struct desc_struct { unsigned long a,b; } ; #define _get_base(addr) ({unsigned long __base; __asm__("movb %3,%%dh\n\t" &quo

C++程序翻译成C程序

C++刚出现的时候,C++程序是需要先被翻译成C程序后由C编译器编译才能运行的. 考虑翻译如下C++程序: class CCar { public: int price; void SetPrice(int p); }; void CCar::SetPrice(int p) { price = p; } int main() { CCar car; car.SetPrice(20); return 0; } 1)C中没有class 这种数据类型,需要使用struct来代替.int price;

整数翻译成英文

1 #include<iostream> 2 #include<string> 3 using namespace std; 4 5 class robot{ 6 string name; 7 string type; //型号 8 public: 9 robot(string name = "xxx",string type = "xxx") : name(name),type(type){ //默认构造函数 10 } 11 void ou

如何可以将PDF文件在线翻译成中文?

有时心血来潮,会在网上搜索一些专业的影评.杂志等资料,像这些资料格式PDF的多一些,而且有时还会看到纯英文版的,这样想利用起来,就必须要使用一些工具的帮助,就可以轻松的完成翻译的任务,让我们使用起来更轻松.不用下载,直接在网页上面就可以完成,非常的方便,一起来学习一下吧.     在线PDF翻译,可以直接把PDF.Word翻译成中文.英文.繁体中文等多国语言的文档.用户可自定义目标语言,翻译后的文档可以精确保留原文件的所有页面元素和排版.用户可以在短时间之内下载到转换之后的文件.只要用户可以连接

【随便扯扯】Standby到底翻译成备用还是待机?

最近在翻译VMware VSAN的一本书,术语用词我以官方中文版客户端软件为准.可是,问题出现了,同一个英文表述在不同的中文版客户端软件中,甚至同一个客户端软件中都翻译的不一样. 比如Standby到底应该翻译成备用还是待机?     Web Client英文版里面是这样的:     到了中文版中同样的界面,3个Standby居然在一个页面里面就有2个不同的翻译了. 让我们再到中文版vSphere Client中去看看:    vSwitch配置过程中的Standby Adapter翻译为待机适

把Scheme翻译成Java和C++的工具

一.为什么要写这个工具? 公司内容有多个项目需要同一个功能,而这些项目中,有的是用Java的,有的是用C++的,同时由于某些现实条件限制,无法所有项目都调用统一的服务接口(如:可能运行在无网络的情况下),所以可选方案有两种: a.分别用Java和C++实现两套一样的功能. b.实现一个生成工具,用来生成同一种逻辑的Java和C++代码. …… 二.本文不会有的内容 我不希望在一篇技术文章中涉及到任何业务,以及为避免任何形式的公司敏感信息的泄露,所以本文中不会出现这个工具中的关键代码,即: a.这

将给定序列翻译成蛋白质序列

利用 dictionary 可以将给定的cDNA序列翻译成蛋白序列 1 #!/bin/python 2 # Dictionary protein translation 3 4 my_dna = open("/home/maque/my_dna.txt").read().replace('\n', '') # 利用 str.replace() method 将 '\n' 去掉,这样 my_dna 就是一条单一的字符串 5 6 condon_table = {"TTT"

jsp原来最终也要翻译成class文件

原来当一个请求访问jsp页面时,由web服务器将jsp翻译成servlet的java文件,再由编译器编译成class文件,最后由解释器执行: jsp>>java文件>>class文件,jsp的class文件在tomcat中D:\Program Files\Apache Software Foundation\Tomcat 7.0\work\Catalina\localhost\项目名\org\apache\jsp文件夹下

华为上机练习题--将英文号码翻译成数字号码

题目: * 将 电话号码 one two ...nine zero 翻译成1  2 ..9 0 * * 中间会有double * * 例如 *     输入:OneTwoThree *     输出:123 *     输入:OneTwoDoubleTwo *     输出:1222 *     输入:1Two2 *     输出:ERROR *     输入:DoubleDoubleTwo *     输出:ERROR 分析:对于字符串的操作有一个比较好用的方法就是replaceAll(),有