能力值:
( LV12,RANK:779 )
|
-
-
2 楼
前者是立即数,数值就是00400000H
后者是直接寻址,数值在内存[00400000h]
并且应该加上word ptr ,byte ptr表示占用字节大小的。
[00400000h]只是地址而没有说明字节大小。
最初由 cuichangra 发布 请教大虾们 MOV EAX 00400000h 和 MOV EAX [00400000h]有什么区别,能不能很系统的写出来让我们明白啊?
|
能力值:
( LV12,RANK:779 )
|
-
-
3 楼
不小心回了2篇。ft
|
能力值:
( LV2,RANK:10 )
|
-
-
4 楼
偶还不是很懂,能不能很系统地介绍下带[]和不带[]的具体意思?
|
能力值:
( LV12,RANK:290 )
|
-
-
5 楼
MOV EAX 00400000h
就是把00400000h这个数赋给EAX
MOV EAX [00400000h]
是把内存中地址为00400000h的值给EAX
[]有点像C语言指针取值符号*
就这么点东西,再系统只能看书了
|
能力值:
( LV2,RANK:10 )
|
-
-
6 楼
没必要加上word ptr ,byte ptr
|
能力值:
( LV2,RANK:10 )
|
-
-
7 楼
呵呵, 还是多看看书好
|
能力值:
( LV2,RANK:10 )
|
-
-
8 楼
那MOV EAX [ESI]哪? 是把ESI指向的地址给EAX,而不是那个地址指向的值给EAX?
谢谢!
|
能力值:
( LV2,RANK:10 )
|
-
-
9 楼
突然发现我解释得比较绕嘴,我编辑一下
不带括号指的是 立即数,也就是直接参与运算的数;
如果带上括号,那么括号里面的数就变成了地址,也就是说 它不再是直接参与运算的数了,它成为了一个地址,参与运算的将是这个“地址”里所包含的数;
由此可以看出, [ ] 就是一个彻底改变 数 性质的符号,它将 括号里面的数变成了一个 地址指针;
|
能力值:
( LV2,RANK:10 )
|
-
-
10 楼
谁帮忙推荐几本汇编的宝书???谢谢
|
能力值:
( LV2,RANK:10 )
|
-
-
11 楼
没有人推荐吗?另外请教下
00401221 MOV BL,[EAX]
00401223 ROL EBX,08 //此处的08是什么意思?
00401226 ADD EDX,EBX
00401228 INC EAX
00401229 CMP BYTE PTR[EAX],00
0040122C JNZ 00401221
这是SOFTICE显示的内容,意思是把我输入的注册号循环左移,情况如下:
比如我输入的是123456
00 00 31 00
00 31 32 00
31 32 33 00
32 33 34 31
33 34 35 32
+ 34 35 36 33
------------------------
CB 00 35 96
有没有办法进行逆运算求出注册码?
|
能力值:
( LV2,RANK:10 )
|
-
-
12 楼
最初由 cuichangra 发布 谁帮忙推荐几本汇编的宝书???谢谢
王爽的书 很好的 《汇编语言》
|
能力值:
( LV3,RANK:20 )
|
-
-
13 楼
最初由 cuichangra 发布 没有人推荐吗?另外请教下 00401221 MOV BL,[EAX] 00401223 ROL EBX,08 //此处的08是什么意思? 00401226 ADD EDX,EBX 00401228 INC EAX ........
三、逻辑运算指令
───────────────────────────────────────
AND 与运算.
OR 或运算.
XOR 异或运算.
NOT 取反.
TEST 测试.(两操作数作与运算,仅修改标志位,不回送结果).
SHL 逻辑左移.
SAL 算术左移.(=SHL)
SHR 逻辑右移.
SAR 算术右移.(=SHR)
ROL 循环左移.
ROR 循环右移.
RCL 通过进位的循环左移.
RCR 通过进位的循环右移.
以上八种移位指令,其移位次数可达255次.
移位一次时, 可直接用操作码. 如 SHL AX,1.
移位>1次时, 则由寄存器CL给出移位次数.
如 MOV CL,04
SHL AX,CL 下载这个文件学学http://www.pediy.com/essay/Crack2001.zip
|
能力值:
( LV2,RANK:10 )
|
-
-
14 楼
以上各位坛友所云在理论上都是正确的,但实际上两种写法没有任何差别:
一、两种写法分别或同时编译、连接再反汇编,一见便晓;
二、详见王爽《汇编语言》第102页。
|
能力值:
( LV2,RANK:10 )
|
-
-
15 楼
最初由 casn 发布 以上各位坛友所云在理论上都是正确的,但实际上两种写法没有任何差别: 一、两种写法分别或同时编译、连接再反汇编,一见便晓; 二、详见王爽《汇编语言》第102页。
什么意思? 什么叫实际上两种写法没有任何差别?
王爽的书是不用看的,直接看intel的手册或是编译器官方帮助不是更好
但我没明白,你的那个 一,两种写法分别或同时编译、连接再反汇编,一见便晓;
第一个立即数; 但第二个是地址呀,根本不是一个概念, 你说的 将两句编译后再看,调试器上的反汇编语句,那当然一样了, 因为第二句是间接寻址,只不过那个数不是立即数,而是从堆栈地址中的一个数;
|
能力值:
( LV12,RANK:210 )
|
-
-
16 楼
系统总结:
(A)在调试器中
mov eax, 00400000h (a)
意思是把00400000h这个立即数送入eax寄存器, 执行后eax存放有数00400000h
mov eax, [00400000h] (b)
调试器基本上见不到这种写法,通常是
mov eax, DWORD PTR [00400000h] (c)
因为写法(b)不能体现存储单元的大小
意思为把内存单元00400000h开始的双字送入eax
如果00400000h存有78h,00400001h存有56h,下面两个单元依次存放有34h和12h, 那么eax中最后是12345678h
(B)在MASM编译环境中
我们测试3条语句
mov eax, DWORD PTR [00400000h]
mov eax, WORD PTR [00400000h]
mov eax, 00400000h
的编译结果
结果是:
0040104B |. B8 00004000 mov eax,00400000
00401050 |. B8 00004000 mov eax,00400000
00401055 |. B8 00004000 mov eax,00400000
这个结果非常令人惊异!
令人惊异之处有两点:
1.第2句(mov eax, WORD PTR [00400000h])竟然编译通过?!
2.三句编译结果竟然完全相同!从生成的机器码中可以看出
所以casn朋友的说法是正确的
总结一下,
1.在MASM中, 形如 [立即数] 或者 [地址标号] 的语句, MASM从来都是无视方括号的存在, 直接把它作为立即数看待, 即使加上PTR也如此
2.形如 [数据标号] 的语句, MASM从来也都是无视方括号存在, 但是这一回却总把它编译为取括号中地址的内容, 即使不加方括号, 还是会取地址的内容
3.一旦方括号中有寄存器, 那么方括号就会发挥它应该有的作用, MASM再也不会无视方括号了
规律1的例子:
mov eax, [00400000h]
loc:
mov eax, [loc]
等价于
mov eax, 00400000h
(如果loc的地址就是00400000h)
规律2的例子
a dd 5
mov eax, [a]
等价于
mov eax, a
最后eax = 5
规律3的例子
mov eax, [ebx]
和mov eax, ebx
明显是不同的
|
能力值:
( LV2,RANK:10 )
|
-
-
17 楼
最初由 thebutterfly 发布 这个结果非常令人惊异! 令人惊异之处有两点: 1.第2句(mov eax, WORD PTR [00400000h])竟然编译通过?! 2.三句编译结果竟然完全相同!从生成的机器码中可以看出
所以casn朋友的说法是正确的 总结一下,
1.在MASM中, 形如 [立即数] 或者 [地址标号] 的语句, MASM从来都是无视方括号的存在, 直接把它作为立即数看待, 即使加上PTR也如此 2.形如 [数据标号] 的语句, MASM从来也都是无视方括号存在, 但是这一回却总把它编译为取括号中地址的内容, 即使不加方括号, 还是会取地址的内容 3.一旦方括号中有寄存器, 那么方括号就会发挥它应该有的作用, MASM再也不会无视方括号了 这叫什么总结?
只能说masm的"智能优化"有巨大的问题存在,
并不代表上面的 mov eax 00400000h 和 mov eax [00400000h] 是一回事;
例如, 你使用 nasm 来 编译 mov eax 00400000h 和 mov eax [00400000h];
然后再用调试器来看它们的结果
也可以用 GAS来编译:
movl $0x40000,%eax 和 movl (0x40000), %eax
我怎么就不相信 这两句是一回子事呢
|
能力值:
( LV12,RANK:450 )
|
-
-
18 楼
masm编译器一直被认为是语法不严格的东西,从它诞生那一天起就是如此,而且永远也不改正。这就是老盖的个性,我是老大,我怕谁,我就是不区分有括号和没有括号,你爱喜欢不喜欢,你爱使用不使用。
|
能力值:
( LV12,RANK:210 )
|
-
-
19 楼
MASM有很多让人看不懂的东西, 却一直没有修正过
顺便说说, 如果确实要取某固定地址(例如00400000h)的内容也不难,只需要用
mov eax, DS:[00400000h]
或者
mov eax, DS:00400000h
就可以了
两句编译结果相同
|
能力值:
( LV2,RANK:10 )
|
-
-
20 楼
最初由 Ivanov 发布 这叫什么总结? 只能说masm的"智能优化"有巨大的问题存在, 并不代表上面的 mov eax 00400000h 和 mov eax [00400000h] 是一回事;
例如, 你使用Ivanov 来 编译 mov eax 00400000h 和 mov eax [00400000h]; ........
|
能力值:
( LV2,RANK:10 )
|
-
-
21 楼
|
能力值:
( LV2,RANK:10 )
|
-
-
22 楼
|
|
|