请教汇编问题LDS指令的功能

来源:百度知道 编辑:UC知道 时间:2024/05/17 04:35:56
DAT1 SEGMENT
BUF1 DB '0123'
BUF2 DD T
DAT1 ENDS
DAT2 SEGMENT
BUF3 DW 8000H
T DW 20H
DAT2 ENDS
CODE SEGMENT
ASSUME CS:CODE,DS:DAT1
BEGIN: MOV AX, DAT1
MOV DS, AX
...
MOV AX, WORD PTR BUF1
LDS SI, BUF2
MOV AX, DS:[SI]
...
CODE ENDS
END BIGIN
请教:
这里(BUF2+2)=DAT2该怎么分析啊?

BUF2 DD T
那么,BUF2占用四个字节,高字存放T的段地址,低字存放T的偏移地址。
而T定义在DAT2段里,所以它的段地址就是DAT2。
BUF高字的地址不就是用BUF+2表示吗,所以BUF+2=DAT2。

其实这个和LDS指令没有关系,只要有BUF2 DD T这样的定义,那么BUF2+2的字单元里存放的就是T的段地址,也就是DAT2了。

LDS是传送分段地址的指令,比如
LDS SI,BUF2
它要求BUF2有四个字节,高字存入DS,低字存入SI。

BUF2 DD T 是用T的段地址和偏移量初始化变量DD,即DD中存放T的地址

LDS SI, BUF2 将T的段地址和偏移量分别送DS和SI

MOV AX, DS:[SI] 把T中的数据送AX,即AX=20H

BUF2+2=DAT2 就不知道什么意思了,因为各段之间在内存中存储时,不存在物理上的任何关系,也就是说他们不是一段一段紧靠着存储的

指针送寄存器指令LDS
把buf2传送到SI