汇编语言之 LEA XLAT命令

时间:2022-05-25 01:04:42
开头,以8086汇编的习题来切入:
   ORG   1000H
BUF DB 12H,56H,78H
COUNT = $-BUF
;此处输入代码段代码
    
        MOV    BX,OFFSET BUF        ;(BX)=1000H
        MOV    AL,BUF+1
        MOV   DX,WORD  PTR  [BX]    ;(DX)=5612H
        MOV    CX,COUNT

;该程序具有强大的功能
;功能一:offset buf即为org对应此时bx的段偏移量
;功能二:数组1(0,1,2)的内容赋给al
;功能三:word ptr[bx]字型转换后赋给dx
求下列指令执行完后指令指定寄存器的内容:MOV AX,[1000H];(AX)=MOV BX,[BX];(AX)=MOV AX,[BX+SI];(AX)=MOV AX,[Y+1];(AX)=LEA DX,X;(DX)=LDS SI,Y;(SI)=(DS)=主要讲述 LEA和 LDS命令: LEA 是取后面内存变量的偏移地址(注意是内存变量的偏移地址,不能是某寄存器)LEA  DX,X,就是取的变量X的偏移地址,而变量X的偏移地址就是前面ORG定位伪指令的值,所以该题执行后(DX)=1000H
LDS是取后面变量连续2个字(也就是4个字节)的内容,第一个字装入指令规定的寄存器,如LDS SI,Y中的SI ,第二个字装入DS,因为指令是LDS,意思是LOAD DS,现在y的定义是X(Y DW X),则装在变量Y里是X的地址,第二个字是Y的地址(Z DD Y)这样执行后(SI)=1000H, (DS)=1001H XLAT 是取“某指定内存区”的内容,将其存放与 AL中。而该“指定内存区”由 BX和 AL来确定,具体规则是: BX作为逻辑地址的偏移量,
BX寄存器中存放的是某内存的地址,指向某块内存区(通常该块内存存放的是一个数组),AL来提供从该BX指向的内存开始的偏移量。

假设 BX指向的内存区中依次存放了 0x11, 0x22, 0x33, 0x44, AL为2; 在执行王 XLAT后, 取0x33内存内容存放到 AL中