最近看到一条指令,x86汇编,
LEA BX, 6[DI]
根据资料,它的含义是,某数组含20个元素,每个元素占一个字节,序号为0~19。设DI指向数组开头处,把序号为6的元素的偏移地址送到BX中;
lea指令,
Load effective address,取有效地址,也就是取偏移地址;
lea指令用于把源操作数的地址偏移量传送目的操作数。
不知道这条指令是不是对的,6[DI] 这种写法没见过;
不太熟悉汇编;下面dosbox,debug看一下;
assume cs: codesg,ds:datasg
datasg segment
arr1 db 1,2,3,4,5,6,7,8,9,11,22,33,44,55,0h
datasg ends
codesg segment
START:
MOV AX, datasg
MOV DS, AX
MOV DI, DS
LEA BX, 6[DI]
codesg ends
END START
它是说DI指向数组开头,数据段里只有一个数组arr1,把datasg赋给DS,DS现在应指向数组开头,再把DS赋给DI,现在DI应指向数组开头;
然后再执行 LEA BX, 6[DI] ;debug看一下bx寄存器的值;
代码保存为2.asm,可以构建出2.exe,所以代码的写法是可以的;
debug 2.exe,先打r看一下寄存器的值,此时程序还没开始执行,
然后打t, t, t,单步执行3条;各寄存器的值如上图,此时还没执行 LEA BX, 6[DI],BX寄存器的值是0,如上图;
然后再单步执行一条,看一下BX寄存器的值变为0770,
看上去没问题,还不熟悉,有时间继续;
另外我用emu8086编译了一个2.bin出来,
debug可能不能调试bin的可执行文件,debug装载2.bin以后,它出来的第一条指令不是我们的指令,是乱的,