Difference between memory and register

不羁的心 提交于 2021-02-07 04:35:13

问题


I saw assembly code like,

MOV [EAX], EBX

the above line, They are mentioned [EAX] is memory and EBX is Register. So, here what is the difference between [EAX] and EBX. What will happen in above instruction.


回答1:


In this syntax, brackets around a register means a memory location is used (as source or destination, according to the instruction) with starting address specified at the register (EAX in your case). For example, if EAX contained 1344 before the instruction, value from EBX is copied to logical memory addresses 1344-1347 (because this is 4 byte copying).

I hope this is enough to untangle them in your mind:) and please notice more complex cases are possible (e.g. MOV [EAX+ECX],EBX forms destination address as sum of two register values).




回答2:


Let's say that the first 16 bytes in memory starting at address 0x1000 contains the following:

0x1000: 00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F

Now let's say that EAX contains 0x1002 (just an example; don't try to write to arbitrary addresses in real code) and EBX contains 0x12345678.

MOV [EAX],EBX would write the value of EBX (which is 32 bits == 4 bytes) to memory starting at the address contained in EAX, so afterwards the memory would look like:

0x1000: 00 01 78 56 34 12 06 07 08 09 0A 0B 0C 0D 0E 0F

Note the order in which the bytes were written. This is because x86 processors are little-endian.

If you had done MOV EAX,EBX you would have copied the value 0x12345678 to the register EAX and left the memory at 0x1002 unchanged.



来源:https://stackoverflow.com/questions/23236072/difference-between-memory-and-register

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!