逆向基础--数据传输指令xlat push pop lea-lds-les (11)

一. xlat 换码指令

  作用:将BX和AL的值相加作为内存地址,从该地址取一个字节,然后把这个字节的值赋给AL。

  xlat 不需要操作数,直接输入。如mov ax,bx是二个操作数。 

  使用格式: xlat  ;    ds:[bx+al]该地址取一个字节给al

  如下图所示:已知:ds=073F, bx=0100 ,ax=0003   逻辑地址:ds:[bx+al]=073F:0103。 

         通过:-d073F:0100查看内容,0103的偏移地址内容是B0, 把BO的给al,所以AX=00B0

image

 二.堆栈指令PUSH、POP

  之前在段的分类(07篇)中讲过堆栈指令。 是先进后出, 后进先出的规则入栈出栈。以及讲到 SS:SP指向栈顶元素。

  示例: 

push ax ; 将ax寄存器中的数据压力到栈中
pop   ax ; 将栈顶中的数据出栈到ax中 

  注意事项:1)当栈为空时不能进行出栈, 2)指令的操作数必须是16位,不能使用al这种8位寄存器。

  如下图:SS:SP是073F:00FD,在查看地址内容时就是-d073F:00F0,没有入栈前:00FC处是01,00FB处是A3。入栈后,AX的值给这二处,00是高字节,CD是低字节。

      还有入栈后SP=00FB,即为新的栈顶元素

image

 

 三.地址传送指令 lea les les

  使用:将对应的地址送入对应的寄存器中

  使用格式:

lea reg, mem
lds reg, mem
les reg,  mem

  示例如下:第一行命令执行后 bx=0400

       第二行命令执行后 si=003C,3c是8位,赋给si寄存器时,会自动扩展成16位,前面补00 

          第三行命令执行后,bx寄存器的地址改变为139E。 [0400+003C+0F62]=[043C+0F62]=[139e]  04+0f时一位等于13

image

  上面是用的lea地址传送指令。下面描述一下lds和les:

    lds:将mem指定的字送入指定的寄存器中,并且DS=mem+2。意思是[mem]地址送入到bx寄存器,还会把[mem+2]地址送入到DS寄存器

    les:将mem指定的字送入指定的寄存器中,并且ES=mem+2。意思是[mem]地址送入到bx寄存器,还会把[mem+2]地址送入到ES寄存器 

  下面是一个lds的演示:

      最终 BX = 1234 (从3000:0000读取的值)   DS = 5678 (从3000:0002读取的值)

image

image

 

posted on 2025-11-12 14:13  花阴偷移  阅读(0)  评论(0)    收藏  举报

导航