开头,以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)=1000HLDS是取后面变量连续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中
汇编语言之 LEA XLAT命令
最新推荐文章于 2024-01-08 16:20:12 发布