Board logo

标题: [分享] 汇编基础一日一学习2 [打印本页]

作者: 柔肠寸断    时间: 2009-5-17 11:05     标题: 汇编基础一日一学习2

通用寄存器:

  80386有8个32位通用寄存器。。。 这8个寄存器名位eax  ecx edx ebx esp ebp esi edi
这些寄存器的低16位的寄存器可以独立访问,并且把它们命名为ax cx dx bx sp bp si di 。
这些就是8086系列寄存器以前的8个16位通用寄存器。。这是为执行8086和80286代码提供了兼容的寄存

器组。ax bx cx dx 这四个带x的寄存器的高半字和低半字可以作为8位的寄存器来独立访问。例如ah ,

al ,bh 和bl ,ch和cl ,dh和dl 。


                           
举个例子 ax = 0040h
ah 则是ax的高8位 al 则是ax的低8位
ah = 00h    al = 40h

为何我们之前做免杀,通过一些编辑工具发现我们写入的确实4000。这就是因为我们是80386cpu采用低地址结尾的。   

补充知识:1字=2字节



这里我出一个演示题目让大家做下。。


假如 eax=00014000H
那么 ebx=00304400H


执行 mov ax, bx

此时eax=???


正确答案是00014400H,上面我已经说了。 80386 8个通用的寄存器,这些寄存器的低16位的寄存器就是

ax bx cx .........    这些低16位寄存器是可以独立访问的。因为这是为了兼容之前8086寄存器等而

设置的。。所以mov ax, bx
   
因为ax是eax寄存器的低16位 所以它的值= 4000H   而bx是ebx寄存器的低16位,所以它的值是

4400H 。

  mov ax, bx  因为mov是传送指令,传送过去之前的值是将其覆盖的(而不是相加)。

所以最终 eax = 00014400H   不知道大家懂了吗。自己多思考下。 ok 接下来我给大家出几道题目。




小作业:
     

    假如eax之前的值= 0010C510H , ebx之前的值 = 003046E2H
   
(1)    mov bx, ax    此时ebx = ??     eax = ??
      
(2)    mov ah, bl    此时ax = ??      eax = ??
     
小提示:  ah寄存器是16位ax寄存器的高8位 , bl寄存器是16位bx寄存器的低8位

(3)    add ax, bx   此时 eax=??       ebx = ??
   
小提示: add是加法指令。 例如 add ax, bx 就等于 ax = ax +bx
作者: 278835491    时间: 2009-5-18 12:30

1、ebx=0030C510H                          eax=001046E2H
2、ax=E210H                                     eax=0010E210H
3、eax=00100BF2H                         ebx= 003046E2H
作者: 278835491    时间: 2009-5-18 12:31

怎么没有答案哈。。。。小柔。。。。。。。
   (*^__^*) ……
作者: lichun_530    时间: 2009-5-18 14:43

参观课堂!
偷偷来看
作者: anyd2008    时间: 2009-5-18 17:47

1、ebx=0030C510H                          eax=001046E2H
2、ax=E210H                                     eax=0010E210H
3、eax=00100BF2H                         ebx= 003046E2H
作者: 柔肠寸断    时间: 2009-5-27 09:56

(1)ebx = 0030C510H   eax = 0010C510H
   把eax的低16位传给ebx的低16位,传送后eax值不变      
(2)mov ah, bl  此时ax = C5E2H   eax = 0010C5E2H
   把bx的低8位传送给ax的高8位
(3)add ax, bx   此时 eax=00110BF2H    ebx =003046E2H
   把eax的低16位和ebx的低16位相加,放到ax里
作者: plantseth    时间: 2009-5-29 19:13

0030C510
0010C510
C5E2
0010C5E2
00100BF2
003046E2
哈哈 我都答对了  +10000分
作者: zrz444    时间: 2009-5-29 20:17

学习了.不错的教程.
作者: 自在飞花    时间: 2009-6-2 21:43

假如eax之前的值= 0010C510H , ebx之前的值 = 003046E2H
   (1)    mov bx, ax    此时ebx = 0030C510H   eax =0010C510H
      (2)    mov ah, bl    此时ax = E210H      eax =0010E210H
     小提示:  ah寄存器是16位ax寄存器的高8位 , bl寄存器是16位bx寄存器的低8位
(3)    add ax, bx   此时 eax=00110BF2H       ebx = 003046E2
   小提示: add是加法指令。 例如 add ax, bx 就等于 ax = ax +bx


有点头晕了,就三个指令是依次执行啊还是都从头执行啊。
DOS时代用debug就可以直接查看结果了,32位汇编用什么调试工具啊(这我不知道)
作者: scien    时间: 2009-6-5 17:35

呵呵  理解了就不难做了
作者: sjx2008    时间: 2009-6-16 13:21

继续学习ING
作者: tiantanok    时间: 2009-7-20 17:59

学习中
作者: cmfming    时间: 2009-11-27 10:58

这节有些不懂呀~~~
作者: hkhs615    时间: 2009-12-17 16:14

继续学习................
作者: iawn1989    时间: 2010-11-19 21:24

我好像算错了
作者: kisaly    时间: 2011-8-2 12:33

哈哈,我算对了哦!谢谢斑竹




欢迎光临 【3.A.S.T】网络安全爱好者 (http://3ast.com./) Powered by Discuz! 7.2