• 关于 寄存器 的搜索结果

问题

Linux内核LCD驱动某些寄存器值无法修改

杨冬芳 2019-12-01 20:22:53 1110 浏览量 回答数 1

回答

就x86来说,最主要的用户程序可以控制的通用寄存器并不多,其中最重要的是 eip, esp 分別对应是用户程序的第一条指令和用户程序的堆栈地址,这2个寄存器的os会在载入用户程序的时候根据elf文件的格式设置好。当用户程序运行的时候,其他的通用寄存器eax,ebx,ecx,edx之类的使用是有编译器来管理的,用户程序在使用一个寄存器以前,编译器也会将需要的值先载入到寄存器中。对于cs,ds,es,fs这样的段寄存器,也都是操作系统设置好的。至于cr3这样的控制虚拟内存到物理内存映射表的寄存器,也是os设置好的,用户程序没有权限改变的。

a123456678 2019-12-02 02:37:19 0 浏览量 回答数 0

回答

首先要搞清楚this指针是存放在哪的?编译器在生成程序时加入了获取对象首地址的相关代码,并把获取的首地址存放在了寄存器ECX中(VC++编译器是放在ECX中,其它编译器有可能不同),也就是成员函数的其它参数正常都是存放在栈中,而this指针参数则是存放在寄存器中。寄存器不能像被外设寄存器或存储器一样被访问到,它不在你的寻址范围中,必须使用特定的汇编指令才能访问。

a123456678 2019-12-02 02:01:21 0 浏览量 回答数 0

新用户福利专场,云服务器ECS低至102元/年

新用户专场,1核2G 102元/年起,2核4G 699.8元/年起

问题

Python的minimalmodbus读取16位寄存器

kun坤 2019-12-25 09:33:06 4 浏览量 回答数 1

回答

在5.0之后,Lua用了一种类似于寄存器的虚拟机模式,Lua用栈来储存其寄存器。每一个活动的函数,Lua都会对其分配一个栈,这个栈用来储存函数里的活动记录。lua的编译器将local变量存储至寄存器,对local变量的操作就相当于直接对寄存器进行操作,对global变量的操作要先获取变量,然后才能对其进一步操作,自然局部变量比全局变量快。。。

a123456678 2019-12-02 02:37:14 0 浏览量 回答数 0

回答

volatile 强调的领域,应该是在嵌入式设备上的(可能有误)。因为在嵌入式设备,我们的程序运行的时候,会读取寄存器的值,有些是传感器的值。在程序运行时,当你定义了一个变量,它的值是从某个寄存器的地址取值得到。如果你在定义这个变量的时候,没有加 volatile ,那么编译器会优化,为什么会优化呢,你可以这么思考,你在程序while循环里面定义了一个INT 变量 ,赋值为1.当循环第二次到这里的时候,编译器说你上次就是1,这次也是1。“int a = 1”,这样看是不是很有道理。但是在嵌入式设备上就不一样了,因为你每次给A赋值的时候是从寄存器里面取得,寄存器的值是会变的,比方一个温度传感器寄存器。那么程序在第一次的时候去了正确的值,后面每一次都是第一次的值,显然这样是不行的,这就是编译器的优化。加了 volatile 编译器就不会优化,每次程序都会去指定的地址去取值。

蛮大人123 2019-12-02 02:21:46 0 浏览量 回答数 0

回答

举个例子吧,假设寄存器是32位的,现在的CPU有64位的,但32位的操作系统,执行时是用32的寄存器,寄存器向下兼容。 假设0和1分别在A、B寄存器中,执行结果放在C寄存器中。 A:0 0000000000000000000000000000000 B:1 0000000000000000000000000000001 你执行A-B,实际是对A取补码,B取补码,两个相加放在C中,C是补码,你通过计算可以得到它的原码。 A的补码是0 0000000000000000000000000000000 B的补码是1 1111111111111111111111111111111 A补码加B补码放在C中,C即为1 1111111111111111111111111111111 而C的原码我们知道C的补码-1 结果取反即为原码, 所以C的原码为1 0000000000000000000000000000001 即结果为-1. 注意:最左边标识符号位,0为正,1为负。从左到右表示从高位到低位。 你可以注意最右边的位,你发现可以和你说的那样,A最右边是0,B最右边是1,而在结果C中的最右边是1,可能刚好和你说的现象相符吧,但是从单个位上看。 0-1的结果肯定是-1的,如果你的寄存器只有1位,那结果溢出,这时就是1.

小旋风柴进 2019-12-02 01:29:17 0 浏览量 回答数 0

问题

操作系统是怎么管理寄存器的?? 400 报错

爱吃鱼的程序员 2020-05-30 22:45:48 0 浏览量 回答数 1

回答

我有一个带有1000000个寄存器的MySQL InnoDB表。这太多了吗? 不,1,000,000 行(AKA记录)对于数据库来说不是太多。 我之所以问是因为我注意到,在具有100万个寄存器的表中,某些查询(例如,获取表的最后一个寄存器)的速度(以秒为单位)要比具有100个寄存器的表的查询(秒)慢。 该声明有很多要说明的地方。通常的嫌疑人是: 写得不好的查询 假设表上甚至存在一个主键,则不使用主键 设计不良的数据模型(表结构) 缺乏索引来源:stack overflow

保持可爱mmm 2020-05-17 12:12:09 0 浏览量 回答数 0

问题

看了两篇关于优化程序的帖子,其中读到有关全局变量产生的疑惑

a123456678 2019-12-01 19:50:53 952 浏览量 回答数 2

回答

调用cpu MDIO接口函数,按照PHY datasheet的寄存器说明配置PHY即可续:按照手册寄存器说明对PHY进行复位、初始化、模式设置,这样编出来的代码就是所谓“该硬件的驱动程序”了。

杨冬芳 2019-12-02 03:12:03 0 浏览量 回答数 0

回答

mybatis的一二级缓存从理解上和hibernate是一样的。类缓存意思是代理映射。把一个类在内存中映射 ,放在寄存器中,那么访问寄存器快还是硬盘快 ?查询缓存意思差不多可以理解为一二级缓存。

云栖技术 2019-12-02 02:33:03 0 浏览量 回答数 0

问题

程序运行前寄存器的值是怎么来的?

a123456678 2019-12-01 19:46:12 832 浏览量 回答数 1

问题

32位系统中多于4个字节的函数返回值是怎么存储的?

a123456678 2019-12-01 19:43:52 1069 浏览量 回答数 1

回答

你的理解已经很好了,此外,计算机有个叫做“栈寄存器”的东西用于标识栈在内存中的位置。目前来说,这个寄存器对程序员是透明的(也就是你不用理会他的工作过程,并且你也无法改变他的工作过程)。还有一点,栈的大小是不能超出一定范围的,不信的话你可以在一个函数里面定义一个1千万长度的int型数组,编译器是不会通过的,因为在函数中定义的局部变量需要放到栈,而栈容纳不了这么多数据(解决方法是在数组前面添加关键字static,这样编译器就会把数组放到内存其他位置而不是栈)。

a123456678 2019-12-02 02:19:03 0 浏览量 回答数 0

回答

语义上是,但是语义中的主存指的是cpu寄存器之外的内存。 volatile禁止读cpu寄存器中的缓存,但是不一定就导致读主存,也可能读cpu cache(一,二,三级cache等),这也是非严格意义上的主存。

不语奈何 2019-12-02 03:07:41 0 浏览量 回答数 0

回答

说实话这乱七八糟一堆文字我看了两边,然后发现真救不了你. ######回复 @刘子玄:操作系统不管理寄存器,现在都是抢占式多线程操作系统,都是在线程释放资源的时候切换到其他进程的(你调用某些api的时候会发生等待和切换操作,然后保存线程执行环境数据)看一下操作系统原理的书籍就知道了.直接切换那个只有纯正的分时操作系统才会去做.现在估计只剩下大型UNIX了######==######靠时钟中断,硬件一定会定时发起时钟中断,中断服务一定会执行,这样就可以进行调度或做其他事了,中断机制由硬件保证。找书看吧,这些问题不是几句说得清。######谢了######在中断产生时,寄存器压栈,在中断结束后,堆栈的数据弹回到寄存器。###### 寄存器操作是汇编级别的最小操作单元,即使是操作系统也不能够管理寄存器. 是计算机有一些指令,能够自己把所有寄存器保存到一个地方.######计算机基础如此博大精深,几十年高科技结晶,不是三天三夜就能说清的,更何况几句话###### 简单2个字压栈.OS的原理很简单,你可以找一些嵌入式的OS开源代码进行阅读,相信读完2个系统的代码后,就对OS核心部分很清楚了. 挑你的一个问题进行回答:" 操作系统是如何让一个程序在规定时间内执行再准确的暂停了?这是如何控制的?"      感觉你还不清楚调度算法的实现.简单的说:硬件中断将其打断,如果需要1ms的进程调度精度,那么就设置时钟中断为1ms. 你可以看下中断部分的代码.       CPU的PC指针即使软件不去设置它也不是固定不变只能向下跑的.当中断发生的时候,PC指针会自动修改到相应中断向量的物理地址上,并且中断时的重要寄存器的值被硬件自动保存. 于是我们就设置一个时钟中断向量(将这个地址上写入我们的代码函数的地址),每18msPC指针会被自动改到这个地方,在这个地方我们根据调度算法,看是继续执行被打断的线程还是切换到更合适的线程上.  感性上,线程/cpu的运行实际上是非常的不连贯, 中途不断的被各种中断疯狂的打断.尤其高响应的硬实时OS,打断应该更加频繁. 我们想干任何事情都可以在中断处理中去做.        此外除了硬件中断,因为硬件功能都是api提供,so程序代码实际上经常会很频繁调用一些系统API,既然调用了系统api,os也完全可以在系统api执行软中断,执行调度算法,把pc指针移到别处去,不再正常的函数返回了(保存好数据,下次调度它时,模拟这个函数返回,应用程序完全不知道发生了什么). ######一个嵌入式OS的代码不过几千行而已. 看完几个 你就精通OS的实现了.不过"知识改变命运", 懂得越多混得越惨, 个人建议你干点其他能赚钱的事情.底层实现的东西,除了吹牛,提升点技术素质,对赚钱来说毫无用处,面试时都没用!!(实际上现在面试都是看算法)  小正太, 根据赚钱来指导自己学习/背诵什么东西.(很心痛的经验)######回复 @MinGKai:haha.反正比赚1个亿简单多了.######“精通”OS有那么简单么…………######这个你放心,我只会把编程当成毕生的爱好,而不会用作工作。

优选2 2020-06-09 16:14:52 0 浏览量 回答数 0

回答

说实话这乱七八糟一堆文字我看了两边,然后发现真救不了你. ######回复 @刘子玄 : 操作系统不管理寄存器,现在都是抢占式多线程操作系统,都是在线程释放资源的时候切换到其他进程的(你调用某些api的时候会发生等待和切换操作,然后保存线程执行环境数据)看一下操作系统原理的书籍就知道了.直接切换那个只有纯正的分时操作系统才会去做.现在估计只剩下大型UNIX了######= =######靠时钟中断,硬件一定会定时发起时钟中断,中断服务一定会执行,这样就可以进行调度或做其他事了,中断机制由硬件保证。找书看吧,这些问题不是几句说得清。######谢了######在中断产生时,寄存器压栈,在中断结束后,堆栈的数据弹回到寄存器。###### 寄存器操作是汇编级别的最小操作单元,即使是操作系统也不能够管理寄存器. 是计算机有一些指令,能够自己把所有寄存器保存到一个地方. ######计算机基础如此博大精深,几十年高科技结晶,不是三天三夜就能说清的,更何况几句话###### 简单2个字 压栈. OS的原理很简单, 你可以找一些嵌入式的OS开源代码进行阅读, 相信读完2个系统的代码后, 就对OS核心部分很清楚了. 挑你的一个问题进行回答: "操作系统是如何让一个程序在规定时间内执行再准确的暂停了?这是如何控制的?"       感觉你还不清楚调度算法的实现.简单的说: 硬件中断将其打断,如果需要1ms的进程调度精度,那么就设置时钟中断为1ms.  你可以看下中断部分的代码.        CPU的PC指针即使软件不去设置它也不是固定不变只能向下跑的. 当中断发生的时候,PC指针会自动修改到相应中断向量的物理地址上,并且中断时的重要寄存器的值被硬件自动保存.  于是我们就设置一个时钟中断向量(将这个地址上写入我们的代码函数的地址), 每18ms PC指针会被自动改到这个地方,在这个地方 我们根据调度算法, 看是继续执行被打断的线程 还是切换到更合适的线程上.   感性上, 线程/cpu 的运行 实际上是非常的不连贯,  中途不断的被各种中断疯狂的打断. 尤其高响应的硬实时OS,打断应该更加频繁.  我们想干任何事情都可以在中断处理中去做.         此外除了硬件中断, 因为硬件功能都是api提供,so程序代码实际上经常会很频繁调用一些系统API, 既然调用了系统api, os也完全可以在系统api执行软中断, 执行调度算法, 把pc指针移到别处去, 不再正常的函数返回了(保存好数据, 下次调度它时,模拟这个函数返回, 应用程序完全不知道发生了什么). ######一个嵌入式OS的代码不过几千行而已.  看完几个  你就精通OS的实现了. 不过"知识改变命运",  懂得越多混得越惨,  个人建议你干点其他能赚钱的事情. 底层实现的东西, 除了吹牛, 提升点技术素质, 对赚钱来说毫无用处, 面试时都没用!! (实际上现在面试都是看算法)   小正太,  根据赚钱来指导自己学习/背诵 什么东西. (很心痛的经验)######回复 @MinGKai : haha. 反正比赚1个亿简单多了.######“精通”OS有那么简单么…………######这个你放心,我只会把编程当成毕生的爱好,而不会用作工作。

爱吃鱼的程序员 2020-05-30 22:45:50 0 浏览量 回答数 0

回答

类(方法)区域:类区域存储每个类的结构,例如运行时常量池,字段,方法数据和方法代码。 堆:这是运行时数据区,在其中将内存分配给对象 堆栈:Java堆栈存储框架。它保存局部变量和部分结果,并在方法调用和返回中起作用。每个线程都有一个私有JVM堆栈,与该线程同时创建。每次调用方法时都会创建一个新框架。框架的方法调用完成后将销毁。 程序计数器寄存器:PC(程序计数器)寄存器包含当前正在执行的Java虚拟机指令的地址。 本机方法堆栈:它包含应用程序中使用的所有本机方法。

YDYK 2020-04-23 22:42:57 0 浏览量 回答数 0

回答

您必须将-la参数保存在ecx寄存器中并将其复制到esp寄存器中(我的意思是在堆栈中) push eax push byte 0x61 push word 0x6c2d mov ecx, esp ; -la 以下是您修改的代码: global _start section .text _start: xor eax, eax push eax push byte 0x61 push word 0x6c2d mov ecx, esp ; -la push eax push 0x736c2f6e push 0x69622f2f ; //bin/ls mov ebx, esp push edx push ecx push ebx mov ecx, esp mov al, 11 int 0x80

祖安文状元 2020-01-07 14:25:57 0 浏览量 回答数 0

回答

时间基本上没啥明显区别正常的带参数的函数,一般有以下几步:用push指令将参数入栈,如果是基本类型,有几个参数就需要几条push指令call指令进入被调用函数,先保存IP寄存器的值,再将函数入口地址存入IP被调用函数将返回地址和基址EBP压入栈,并分配栈空间需要3条指令%ebpmovl %esp, %ebpsubl $xx, %esp函数返回时恢复栈,需要leave和ret两条指令,leave释放栈空间并恢复EBP,恢复IP寄存器的值所以需要6条以上的指令开销,如果参数是结构体的话,需要拷贝复制指令,这个开销就大了。

a123456678 2019-12-02 02:19:12 0 浏览量 回答数 0

回答

编译器在通常情况下会生成比你更好的代码。现代超标量处理器的优化非常复杂,指令集并行、缓存命中、寄存器重命名、分支预测等等都是编译器优化要考虑的问题,单条指令上你觉得优化了,但是打破了编译器的整体优化,得不偿失。

a123456678 2019-12-02 02:19:06 0 浏览量 回答数 0

回答

JVM,Java Virtual Machine,中文就是Java虚拟机了, 和名字一样就是个虚拟机器,来模拟通用的计算机,有着一套虚拟的完善的硬件架构,如处理器、堆栈、寄存器等,还具有相应的指令系统。 JVM是一种规定好的标准规范, 定义了.class文件在其内部运行的相关标准和规范。一般来讲,所有的JVM都是基于栈结构的运行方式。那么不符合这种要求的,不算是JVM, 如Android中所使用的Dalvik 虚拟机就不能称作是JAVA 虚拟机, 因为它是基于寄存器(最新的Android系统据说已经放弃了Dalvik VM, 而是使用ART)。

景凌凯 2020-04-03 21:51:42 0 浏览量 回答数 0

问题

如何填写自动递增字段中的“漏洞”??mysql

保持可爱mmm 2020-05-17 17:56:16 1 浏览量 回答数 1

问题

关于C代码转为汇编的疑问

a123456678 2019-12-01 20:27:26 1432 浏览量 回答数 1

回答

linux内核-寄存器

杨冬芳 2019-12-02 03:08:32 0 浏览量 回答数 0

问题

高性能计算的Kepler Assembler是什么?

boxti 2019-12-01 21:50:53 2251 浏览量 回答数 0

回答

这是由JVM内存模型决定的~ volatile特性 避免了 多CPU下读取到寄存器缓存数据的不一致问题

空境 2019-12-02 01:59:40 0 浏览量 回答数 0

回答

根据Java内存模型,volatile变量在每次读取、更新时 都会同步到 主内存中,而不会读写CPU寄存器缓存

空境 2019-12-02 01:59:40 0 浏览量 回答数 0

回答

就c语言而言,局部变量一般存在于栈中;除非是某些叶子函数,少量的局部变量直接放在寄存器里面。栈里面的值,当然默认是未知的了。如果编译器生成了一段代码,专门在引用栈里面的局部变量之前先将其初始化,那就时类似g++的做法了;否则就是vs的做法。

杨冬芳 2019-12-02 02:27:24 0 浏览量 回答数 0
阿里云大学 云服务器ECS com域名 网站域名whois查询 开发者平台 小程序定制 小程序开发 国内短信套餐包 开发者技术与产品 云数据库 图像识别 开发者问答 阿里云建站 阿里云备案 云市场 万网 阿里云帮助文档 免费套餐 开发者工具 SSL证书 小程序开发制作 视频内容分析 企业网站制作 视频集锦 代理记账服务 2020阿里巴巴研发效能峰会 企业建站模板 云效成长地图 高端建站 2020中国云原生 阿里云云栖号