汇编基础一日一学习2

来源:互联网 发布:usb加密狗复制软件 编辑:程序博客网 时间:2024/04/30 08:41
通用寄存器:

  80386有8个32位通用寄存器。。。这8个寄存器名位eax  ecxedx 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)    movbx,ax    此时ebx=??    eax = ??
      
(2)    movah,bl    此时ax=??      eax= ??
    
小提示:  ah寄存器是16位ax寄存器的高8位, bl寄存器是16位bx寄存器的低8位

(3)    addax, bx   此时eax=??      ebx = ??
  
小提示: add是加法指令。 例如 add ax, bx 就等于 ax = ax +bx

0 0