逆向基础--数据传输指令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

二.堆栈指令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,即为新的栈顶元素

三.地址传送指令 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

上面是用的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读取的值)


浙公网安备 33010602011771号