这些指令,从来没有见过,看不明白,请教请教

时间:2021-01-27 18:26:32
有些地方指令,从来没有见过,看不明白,请教请教:
00401050    D4 03           AAM 3       ;AAM 3啥意思?
00401057    D87B 11         FDIVR DWORD PTR DS:[EBX+11]       ;FDIVR啥意思?
0040105E    DC00            FADD QWORD PTR DS:[EAX]       ;FADD啥意思?
00401065    E0 00           LOOPDNE SHORT generic.00401067       ;LOOPDNE啥意思?
00401177    C9              LEAVE       ;LEAVE啥意思?
00401178    C2 1000         RETN 10       ;10啥意思,为什么要加一个10?
004011BB    65:6D           INS DWORD PTR ES:[EDI],DX        ;INS啥意思?
004011BD    626C65 72       BOUND EBP,QWORD PTR SS:[EBP+72]       ;BOUND啥意思?
004011CD    70 6C           JO SHORT generic.0040123B       ;JO啥意思?
004011F9    65:61           POPAD       ;POPAD啥意思?
00401200    6E              OUTS DX,BYTE PTR ES:[EDI]              ;OUTS啥意思?
00401201    66:6972 6D 2045 IMUL SI,WORD PTR DS:[EDX+6D],4520       ;IMUL啥意思?
00401207    78 69           JS SHORT generic.00401272       ;JS啥意思?
00401270  - FF25 48204000   JMP DWORD PTR DS:[<&user32.CreateWindowE>;  ;JMP到一个函数那里啥意思?
004012E4    0000            ADD BYTE PTR DS:[EAX],AL       ;代码后面有近1000行的“0000            ADD BYTE PTR DS:[EAX],AL”啥意思?

谢谢先

21 个解决方案

#1


大多是浮点指令,上百度搜一下吧,很多的

#2


要学32位程序需要把386指令集先看一下。其中有部分(如JO、JS)也是8085指令集中的。

AAM是BCD码乘法运算后调整;
FDIVR、FADD是浮点除法和加法指令;
LOOPDNE与LOOP类似,另外判断如果ZF标志为1则结束循环;
LEAVE与ENTER相对应,用于函数返回前恢复ebp、esp寄存器;
RETN 10表示函数返回后esp再加10;
INS是从端口连续输入,数据保存到指定内存中,数据个数由ecx指定;
JO是判断溢出标志跳转;
OUTS是向端口连续输出,与INS刚好相反;
IMUL是有符号乘法;
JS是判断符号标志跳转;
JMP就是跳转,根据程序需要,跳到哪里都可以;
后面全是0说明不是代码,也不会指定到(因为前面是JMP)。

LZ好象所有问题一律20分,应该根据问题的难度和复杂程度适当调节分数才对。

#3


引用 1 楼 gyk120 的回复:
大多是浮点指令,上百度搜一下吧,很多的

我只看到了两条,你看到多少条了

#4


要学32位程序需要把386指令集先看一下。其中有部分(如JO、JS)也是8085指令集中的。

请问老大,这个386指令集,8085指令集在什么地方可以找到?最好是我这样的草鸟级可以看得懂的

谢谢先!

另外,这个帖子到时加分结贴,老大所言极是

#5


386指令集可以在网上搜到,很多书上也有讲。
8085是我敲错了,是8086,大多数汇编书上讲的都是这个。

#6


引用 4 楼 imur2008 的回复:
要学32位程序需要把386指令集先看一下。其中有部分(如JO、JS)也是8085指令集中的。 

请问老大,这个386指令集,8085指令集在什么地方可以找到?最好是我这样的草鸟级可以看得懂的 

谢谢先! 

另外,这个帖子到时加分结贴,老大所言极是

Intel Architecture Software Developer Manual卷二

#7


这些不是代码,反汇编了数据段,碰巧凑出的东西,这些指令不学也罢,或者以后水平高了再学。

#8


帮顶

#9


帮顶

#10


up

#11


up

#12


反汇编的东西?

#13


看多就记住了。

楼主把各段code的格式分开吧,这样真惑众
引用
00401050    D4 03          AAM 3      ;AAM 3啥意思? 
00401057    D87B 11        FDIVR DWORD PTR DS:[EBX+11]      ;FDIVR啥意思? 
0040105E    DC00            FADD QWORD PTR DS:[EAX]      ;FADD啥意思? 
00401065    E0 00          LOOPDNE SHORT generic.00401067      ;LOOPDNE啥意思?
 
00401177    C9              LEAVE      ;LEAVE啥意思? 
00401178    C2 1000        RETN 10      ;10啥意思,为什么要加一个10? 

004011BB    65:6D          INS DWORD PTR ES:[EDI],DX        ;INS啥意思? 
004011BD    626C65 72      BOUND EBP,QWORD PTR SS:[EBP+72]      ;BOUND啥意思? 
004011CD    70 6C          JO SHORT generic.0040123B      ;JO啥意思? 
004011F9    65:61          POPAD      ;POPAD啥意思? 
00401200    6E              OUTS DX,BYTE PTR ES:[EDI]              ;OUTS啥意思? 
00401201    66:6972 6D 2045 IMUL SI,WORD PTR DS:[EDX+6D],4520      ;IMUL啥意思? 
00401207    78 69          JS SHORT generic.00401272      ;JS啥意思?

 
00401270  - FF25 48204000  JMP DWORD PTR DS:[ <&user32.CreateWindowE>;  ;JMP到一个函数那里啥意思? 
004012E4    0000            ADD BYTE PTR DS:[EAX],AL      ;代码后面有近1000行的“0000            ADD BYTE PTR DS:[EAX],AL”


00401065    E0 00          LOOPDNE SHORT generic.00401067  ;这个loopne是废指令,无论如何都是直接执行下一个指令

00401270  - FF25 48204000  JMP DWORD PTR DS:[ <&user32.CreateWindowE>;  ;JMP到一个函数那里啥意思? 
004012E4    0000            ADD BYTE PTR DS:[EAX],AL      ;代码后面有近1000行的“0000            ADD BYTE PTR DS:[EAX],AL”

进入CreateWindowEx后消息处理开始运行,程序会在消息处理中ExitPorcess,于是这个CreateWindowEx就不会返回。
后面的0000只是反汇编器对指令段空数据的处理而已,不用在乎

#14


谢谢几位高人的指点!!
请教:
00401270  - FF25 48204000  JMP DWORD PTR DS:[ <&user32.CreateWindowE>;

这个指令- FF25 48204000怎么计算出来的?谢谢先

另外那个004012E4    0000            ADD BYTE PTR DS:[EAX],AL空指令,是不是可以在上面插入一些汇编指令,增加功能?


谢谢先

#15



学习一下

#16


FF25是jmp到一个变量指定的地址的操作码,48204000是该变量地址,倒过来,00402048。
你的后一个问题没法回答,以后经验多了自己就会清楚的。

#17


当然可以,只要保证程序不会出错。
最基本的二点就是堆栈维护、内存页面属性

#18


看看

#19


谢谢楼上cnzdgs,xiaopoy  两位指出的关键之处
请问:“堆栈维护、内存页面属性”这个方面的内容,要看什么书??
谢谢先

#20


要看WINDOWS环境下32位汇编语言程序设计(罗云彬)这本书有涉及到上面的二个内容.

#21


谢谢各位大侠!
结贴致谢!!!
祝大家新年
   ☆☆ ☆☆  ☆☆ ☆☆
  ★★      ★       ★★
 ☆☆   祝你快乐!    ☆☆
  ★★               ★★
   ☆☆             ☆☆
     ★★         ★★
       ☆☆     ☆☆
         ★★  ★★
            ☆☆

#1


大多是浮点指令,上百度搜一下吧,很多的

#2


要学32位程序需要把386指令集先看一下。其中有部分(如JO、JS)也是8085指令集中的。

AAM是BCD码乘法运算后调整;
FDIVR、FADD是浮点除法和加法指令;
LOOPDNE与LOOP类似,另外判断如果ZF标志为1则结束循环;
LEAVE与ENTER相对应,用于函数返回前恢复ebp、esp寄存器;
RETN 10表示函数返回后esp再加10;
INS是从端口连续输入,数据保存到指定内存中,数据个数由ecx指定;
JO是判断溢出标志跳转;
OUTS是向端口连续输出,与INS刚好相反;
IMUL是有符号乘法;
JS是判断符号标志跳转;
JMP就是跳转,根据程序需要,跳到哪里都可以;
后面全是0说明不是代码,也不会指定到(因为前面是JMP)。

LZ好象所有问题一律20分,应该根据问题的难度和复杂程度适当调节分数才对。

#3


引用 1 楼 gyk120 的回复:
大多是浮点指令,上百度搜一下吧,很多的

我只看到了两条,你看到多少条了

#4


要学32位程序需要把386指令集先看一下。其中有部分(如JO、JS)也是8085指令集中的。

请问老大,这个386指令集,8085指令集在什么地方可以找到?最好是我这样的草鸟级可以看得懂的

谢谢先!

另外,这个帖子到时加分结贴,老大所言极是

#5


386指令集可以在网上搜到,很多书上也有讲。
8085是我敲错了,是8086,大多数汇编书上讲的都是这个。

#6


引用 4 楼 imur2008 的回复:
要学32位程序需要把386指令集先看一下。其中有部分(如JO、JS)也是8085指令集中的。 

请问老大,这个386指令集,8085指令集在什么地方可以找到?最好是我这样的草鸟级可以看得懂的 

谢谢先! 

另外,这个帖子到时加分结贴,老大所言极是

Intel Architecture Software Developer Manual卷二

#7


这些不是代码,反汇编了数据段,碰巧凑出的东西,这些指令不学也罢,或者以后水平高了再学。

#8


帮顶

#9


帮顶

#10


up

#11


up

#12


反汇编的东西?

#13


看多就记住了。

楼主把各段code的格式分开吧,这样真惑众
引用
00401050    D4 03          AAM 3      ;AAM 3啥意思? 
00401057    D87B 11        FDIVR DWORD PTR DS:[EBX+11]      ;FDIVR啥意思? 
0040105E    DC00            FADD QWORD PTR DS:[EAX]      ;FADD啥意思? 
00401065    E0 00          LOOPDNE SHORT generic.00401067      ;LOOPDNE啥意思?
 
00401177    C9              LEAVE      ;LEAVE啥意思? 
00401178    C2 1000        RETN 10      ;10啥意思,为什么要加一个10? 

004011BB    65:6D          INS DWORD PTR ES:[EDI],DX        ;INS啥意思? 
004011BD    626C65 72      BOUND EBP,QWORD PTR SS:[EBP+72]      ;BOUND啥意思? 
004011CD    70 6C          JO SHORT generic.0040123B      ;JO啥意思? 
004011F9    65:61          POPAD      ;POPAD啥意思? 
00401200    6E              OUTS DX,BYTE PTR ES:[EDI]              ;OUTS啥意思? 
00401201    66:6972 6D 2045 IMUL SI,WORD PTR DS:[EDX+6D],4520      ;IMUL啥意思? 
00401207    78 69          JS SHORT generic.00401272      ;JS啥意思?

 
00401270  - FF25 48204000  JMP DWORD PTR DS:[ <&user32.CreateWindowE>;  ;JMP到一个函数那里啥意思? 
004012E4    0000            ADD BYTE PTR DS:[EAX],AL      ;代码后面有近1000行的“0000            ADD BYTE PTR DS:[EAX],AL”


00401065    E0 00          LOOPDNE SHORT generic.00401067  ;这个loopne是废指令,无论如何都是直接执行下一个指令

00401270  - FF25 48204000  JMP DWORD PTR DS:[ <&user32.CreateWindowE>;  ;JMP到一个函数那里啥意思? 
004012E4    0000            ADD BYTE PTR DS:[EAX],AL      ;代码后面有近1000行的“0000            ADD BYTE PTR DS:[EAX],AL”

进入CreateWindowEx后消息处理开始运行,程序会在消息处理中ExitPorcess,于是这个CreateWindowEx就不会返回。
后面的0000只是反汇编器对指令段空数据的处理而已,不用在乎

#14


谢谢几位高人的指点!!
请教:
00401270  - FF25 48204000  JMP DWORD PTR DS:[ <&user32.CreateWindowE>;

这个指令- FF25 48204000怎么计算出来的?谢谢先

另外那个004012E4    0000            ADD BYTE PTR DS:[EAX],AL空指令,是不是可以在上面插入一些汇编指令,增加功能?


谢谢先

#15



学习一下

#16


FF25是jmp到一个变量指定的地址的操作码,48204000是该变量地址,倒过来,00402048。
你的后一个问题没法回答,以后经验多了自己就会清楚的。

#17


当然可以,只要保证程序不会出错。
最基本的二点就是堆栈维护、内存页面属性

#18


看看

#19


谢谢楼上cnzdgs,xiaopoy  两位指出的关键之处
请问:“堆栈维护、内存页面属性”这个方面的内容,要看什么书??
谢谢先

#20


要看WINDOWS环境下32位汇编语言程序设计(罗云彬)这本书有涉及到上面的二个内容.

#21


谢谢各位大侠!
结贴致谢!!!
祝大家新年
   ☆☆ ☆☆  ☆☆ ☆☆
  ★★      ★       ★★
 ☆☆   祝你快乐!    ☆☆
  ★★               ★★
   ☆☆             ☆☆
     ★★         ★★
       ☆☆     ☆☆
         ★★  ★★
            ☆☆