进入仿真后在View栏里找到Watch,点开就会出现下面的白框。
然后点那个灰色的地方打个变量名,篮筐的区域就会有变量地址。不过记住别在运行状态下看,运行状态会变成无法编辑的状态。
实在不行你像我一样拿个指针读一下地址也行
<bean id="propertyPlaceholderConfigurer" class="orgspringframeworkbeansfactoryconfigPropertyPlaceholderConfigurer"
p:locations-ref="locations"
p:order="1" />
<util:list id="locations">如果只有bin文件的话,肯定是要反汇编的,就你说的这个显示设备的话,程序结构应该不是很复杂的,反汇编后,着重查找“查表”的指令,然后反推到“存储字库的地址”,结合“字库生成软件”,找到“中”的16进制数据,这个就是首地址,然后就可以在这个首地址开始修改了。注意如果当时的源程序,对字库只分配了“4个中文字”的空间的话,就不要多修改。
祝你成功。在IAR中经常停在一个函数内部
可它的局部变量和形参不论是拉到Watch中还是直接点出Locals
状态都是unavailable
但有时候又能够看到值我就很郁闷了
今天反复试验了一下发现当使用None优化等级时就可以看到各个局部变量的值而采用Medium优化则不能看~既前面说的unavailable
我开始想是不是局部变量被优化了但一查反汇编发现两者没什么区别
一个简单的传递2个参数的函数调用同样是把实参复制给了R1,R0(符合ATPCS)
可为啥Medium就是看不到呢因为我写代码一般用Medium相比None能节约40%的Flash空间1当然是机器语言了,如果是汇编指令,那还得编译一次!能运行的程序都是机器语言,只有机器语言才能控制CPU,NET或Java这些中间语言,程序在运行时会被CLR或JVM快速编译成机器语言,因此这些程序速度上有损失。
高级语言源代码(文本)-通过编译器(compiler)-程序(二进制机器语言)
汇编代码(文本)-通过汇编器(assembler)-程序(二进制语言)
看到这里,你可能会想那汇编语言到底有什么用呢,编译器完全能代替汇编啊?
(1)编译器是通过高级语言(c,c++)转到机器语言的。转换过的机器语言受限与高级语言,效率和功能上都有限制。比如c不等过分 *** 作内存。但通过汇编器转化过来的机器语言,效率高,且用汇编语言,直接和CPU对话!
(2)汇编可以反汇编(逆向编译),而这里高级语言没有发言权,就是:
程序(二进制机器语言)-通过反汇编器(compiler)-可转化为汇编代码(文本)
但永远不能转化为高级语言的源代码,。
以上两点汇编存在的重要性。
2。当然是说移植源代码。windows用x86机器语言,苹果用powerPC机器语言,windows程序当然不能运行在苹果机上,因为程序其实就是一串机器语言!但windows上有c的编译器(vc++),苹果机上也有c编译器(gcc),因此同一个c的源代码,当然就可以通过不同平台的同一种编译器实现平台移植。
3当然是NASM,我看的所有书都首先说NASM,他是开源的,就像Linux一样,很受欢迎,还有MASN是微软的,borland的也有汇编器,不过都不常见了。
4这跟CPU有关,一般32位x86兼容的cpu有许多寄存器,多数是32位的,也有16位的。比如CS,ES,DS这些segment寄存器一直是16位的。
5优势太多了,这和32位和16位存在的优势一样,16位电脑最大内存1MB,寄存器都是16位的。32位,最大内存可以有4GB,整整是16位的4096倍啊!16位多渺小啊,同理64位基本上也可以蔑视32位,64内存最大内存用TB来衡量,寄存器多数是64位!地址总线也是64位。64对32位没有什么优势劣势可言,64位完全就是32位的下一代。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)