能力值:
( LV2,RANK:10 )
|
-
-
2 楼
在asola asm中是一样的.如果是kasm的话可能无法确定这2个字节值的地址是在堆栈内存中还是在代码内存中.
|
能力值:
( LV2,RANK:10 )
|
-
-
3 楼
那
mov eax,403045h;使eax装有值403045h(十六进制)
mov cx,[eax];把位于内存地址eax的word大小的值(403045)移入cx寄存器。
第二句话应该是错的吧
|
能力值:
( LV2,RANK:10 )
|
-
-
4 楼
你太没自信心.
OK.我可以免费给你自信心:
两个字节不能表达403045h个东西.
所以是错误
|
能力值:
( LV2,RANK:10 )
|
-
-
5 楼
呵呵,谢谢啦
自己看书上的,但是书上好像写矛盾了,所以搞不懂了
|
能力值:
( LV2,RANK:10 )
|
-
-
6 楼
一样,反正操作的都是内存地址,我没有看出错误
.386
.model flat,stdcall
option casemap:none
.data
.code
start:
mov eax,403045h
mov cx,[eax]
end start
masm编译通过
|
能力值:
( LV3,RANK:20 )
|
-
-
7 楼
这和C的指针式一回事,指针本身和指针指向的内容不要混淆了。LZ再思考下
|
能力值:
( LV2,RANK:10 )
|
-
-
8 楼
大家不要只看第一帖.第三帖才是重点.
|
能力值:
( LV2,RANK:10 )
|
-
-
9 楼
第二句在调试器里正确,在编译器里错误
|
能力值:
( LV2,RANK:10 )
|
-
-
10 楼
mov eax,403045h ;立即寻址,403045h传进eax 执行后eax里是403045h
mov cx,[eax] ;寄存器间接寻址 也就是把eax里的ds:403045h存储空间里的
操作数存入cx 如果ds:403045h里是12h(或者EFh) 执行后cx里就是
12h(或 者EFh) 如果是mov cx,eax 会出错
与
mov cx,[403045h] ;直接寻址 就是把ds:403045h里的操作数传入cx 如果ds:403045h里和上
面的的ds:403045h没变化 仍是12h(或者EFh) 执行后cx里就是
12h(或者EFh)
所以说:上面两个目的都是将403045h存储空间里的操作数(12或者EF)传入cx并达到,不计较eax的变化的话,基本是一样。
以上的10和EF只是临时凑来说题的。(大家应该理解这个的)
我也初学者,自己的看法只供参考!
上面的回复当时侧重于帖主对寻址方式的不彻底了解,但我在例举说明时不够严谨,看到书呆版主对我的回复的肯定,为了不产生误导,就补充一点,愿回复就不动了。。。
我在例举mov cx,[eax]时只简单地举了12,严谨来说应该是:以EAX里的ds:403045h为地址取字(双字节)遵循低低高高的规则传送进CX,也就是说:把ds:403045h和ds:403046h两个存储空间里的数据(信息)传给CX,如果是mov ch,[eax]或者mov cl,[eax]的话,那就只传ds:403045h一个字节信息,是mov ECX,[eax]的话,就以ds:403045h为地址,传送ds:403045h,ds:403046h,ds:403047h,ds:403048h双字(四个字节)内容进ECX。。。
mov cx,[403045h],也是如此。。。就。。。了。
我觉得帖主有疑惑,还是对寻址方式没掌握好。究竟为什么传字节,字,双字,不属于此帖内容,就不费话了。。。
|
能力值:
( LV3,RANK:30 )
|
-
-
11 楼
mov eax,403045h;
mov cx,[eax];
与
mov cx,[403045h];
是不是一样的?
不一样
|
能力值:
( LV2,RANK:10 )
|
-
-
12 楼
是一样的,至于四楼说两个字节不能表达403045h,那么请你先看看他的寻址方式,是直接寻址。
是把403045h和403046h两个字节的内容送到cx
而不是把403045h这个立即数送到cx
这跟两个字节能不能表达403045h有何关系?
|
能力值:
( LV2,RANK:10 )
|
-
-
13 楼
你没发现我们对第三贴的感悟有区别吗?
就像看AV片.你就只盯着那点.那跟看动物世界有何区别.
|
能力值:
( LV2,RANK:10 )
|
-
-
14 楼
精辟! 果然精辟...
|
能力值:
( LV2,RANK:10 )
|
-
-
15 楼
我感觉基本上是一样的,得看上下文了
|
能力值:
( LV2,RANK:10 )
|
-
-
16 楼
一样的...恩..
|
能力值:
( LV2,RANK:10 )
|
-
-
17 楼
一般的都是一样的吧
高深的我就不清楚了
|
能力值:
( LV2,RANK:10 )
|
-
-
18 楼
偶是新手,觉得应该是一样的,有条件的可以编译调试一下啊
|
能力值:
( LV2,RANK:10 )
|
-
-
19 楼
mov eax,403045h;
mov cx,[eax]; //EAX 放得进 CX ?????
|
能力值:
(RANK:260 )
|
-
-
20 楼
[QUOTE=菜鸟乱飞;602893]那
mov eax,403045h;使eax装有值403045h(十六进制)
mov cx,[eax];把位于内存地址eax的word大小的值(403045)移入cx寄存器。
第二句话应该是错的吧[/QUOTE]
楼主对“寻址方式”的概念还不理解,理解了此问自然就解开了。
[QUOTE=八千里路;603823]mov eax,403045h ;立即寻址,403045h传进eax 执行后eax里是403045h
mov cx,[eax] ;寄存器间接寻址 也就是把eax里的ds:403045h存储空间里的
操作数存入cx 如果ds:403045...[/QUOTE]
正解。除EAX的变化外,二者作用是“相同”的。
|
能力值:
( LV2,RANK:10 )
|
-
-
21 楼
贴主的
把位于内存地址eax的word大小的值(403045)移入cx寄存器
这句话很重要.
大家要深刻领会.
否则就犯修正主义错误.
注意这里不是()的作用是什么.一定要分清楚.否则革命路线就错误.
|
能力值:
( LV9,RANK:170 )
|
-
-
22 楼
不清楚不了解的人98%是不清楚下面这 2 个概念:
1、operands size
2、address size
以及这 2 个概念在 processor 不同模式(real、protected、64bit)下的应用。
|
能力值:
( LV2,RANK:10 )
|
-
-
23 楼
靠.鸟文都来了.问题更复杂了.
不懂洋文.决定飘过.88
|
能力值:
( LV9,RANK:170 )
|
-
-
24 楼
连这些鸟文意思你都不懂,那你就只能永远都是菜鸟
|
能力值:
( LV2,RANK:10 )
|
-
-
25 楼
对.我就是传说中永远的菜鸟.
再次88
|
|
|