现在的位置: 首页 > 综合 > 正文

汇编语言之 LEA XLAT命令

2019年05月17日 ⁄ 综合 ⁄ 共 865字 ⁄ 字号 评论关闭
开头,以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中

抱歉!评论已关闭.