当前位置:  开发笔记 > 编程语言 > 正文

我如何故意从主内存和缓存中读取?

如何解决《我如何故意从主内存和缓存中读取?》经验,为你挑选了1个好方法。

所以我正在学习汇编,我们有一个任务是找到从内存读取和从缓存中读取之间的时间差.我们必须通过创建2个循环并对它们进行计时来实现.(一个从主存储器读取,另一个从缓存读取).问题是,我不知道,也找不到任何告诉我如何从缓存或主存储器读取= /.你们能帮助我吗?我在MASM32中这样做.我理解如何制作循环和大多数汇编语言,但我只是不能让它读取= /


编辑:

我有一个问题,我已经这样做了......

mov ecx, 100 ;loop 100 times
xor eax, eax ;set eax to 0
_label:
mov eax, eax ;according to me this is read memory is that good?
dec ecx ;dec loop
jnz _label ;if still not equal to 0 goes again to _label

......那会没事吗?


编辑2:

那么,我不打算撬开,我感谢你的帮助,我只是有另一个问题,因为这是我必须做的两个循环.我需要以某种方式比较它们,我一直在寻找一个定时器指令,但我没有发现任何我只发现:timeGetTime,GetTickCountPerformance Counter但据我所知,这些指令返回系统时间而不是时间完成循环需要它.有没有办法真正做我想要的?或者我需要考虑另一种方式?

另外,如果我给出各种"mov"指令,那么从第二个循环中的不同寄存器(不从高速缓存读取的那个)读取是否可以呢?还是我完全不在这里?

对不起所有这些问题,但再次感谢您的帮助.



1> ChrisW..:

从缓存中读取.有一个从相同(或非常相似)的内存地址读取的循环:

第一次从该地址读取时,该内存地址(以及其他附近的内存地址)中的值将被移动到缓存中

接下来您从读取时间相同的地址,值已经缓存,所以你从缓存中读取.

要读取未缓存的内存,请使用一个循环,该循环从许多非常不同(即,比高速缓存大小更远)的内存地址读取.


回答你的第二个问题:

你用ecx和jnz做的事情看起来还不错(我不知道你的计时器有多准确/敏感,但你可能想循环超过100次)

mov eax, eax不是"读取内存"......它是一个无操作,它将eax移动到eax中.相反,我认为用于从内存中读取的MASM语法更像是mov eax,[esi]("从内存位置读取,其地址包含在esi"中)

根据您使用的O/S,您必须从实际存在且可读的内存地址读取.例如,在Windows上,不允许应用程序执行mov esi, 0,mov eax, [esi]因为不允许应用程序读取地址/位置为零的内存.


回答你的第三个问题:

timeGetTime,GetTickCount和Performance Counter

你提到timeGetTime,GetTickCount和Performance Counter意味着你在Windows下运行.

是的,它们返回当前时间,达到各种分辨率/精度:例如,GetTickCount的分辨率约为50毫秒,因此无法计时持续时间少于50毫秒的事件,当时间事件仅持续50-100时不准确毫秒.这就是为什么我说100你的ecx可能还不够大.

QueryPerformanceCounter功能可能是您拥有的最准确的计时器.

要将这些计时器中的任何一个用作间隔计时器:

在开始循环之前先抽出时间

完成循环后,再次抽出时间

减去这两次:差异是时间间隔

如果我给出各种"mov"指令,这样可以吗?

是的,我想是这样.我想你可以这样做(注意我不确定/不记得这是否是从名称内存位置读取的正确的MASM语法)...

mov eax,[memory1]
mov eax,[memory2]
mov eax,[memory3]
mov eax,[memory4]
mov eax,[memory5]

...在哪里memory1通过memory5数据段中广泛分布的全局变量的地址.

或者,你可以......

mov eax,[esi]
add esi,edx
mov eax,[esi]
add esi,edx
mov eax,[esi]
add esi,edx
mov eax,[esi]
add esi,edx
mov eax,[esi]

...其中esi指向一大块内存的底部,而edx是一些增量,大约等于块长度的五分之一.

推荐阅读
郑谊099_448
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有