求以下汇编语言问题的解答,问题描述如图,使用的是8086和8088版本
(1) MOV AL, 08H
寻址方式:立即寻址
说明:将立即数 08H 移动到 AL 寄存器。
(2) MoV [0120H], BL
寻址方式:直接寻址
EA 计算公式:EA = 0120H
段寄存器:DS
说明:将 BL 寄存器的内容移动到内存地址 0120H 处。
(3) ADD [BX], AL
寻址方式:基址寻址
EA 计算公式:EA = BX
段寄存器:DS
说明:将 AL 寄存器的值与基址寄存器 BX 指向的内存单元的值相加,结果存储在 BX 指向的内存单元中。
(4) PUSH WORD PTR [SI+0200H]
寻址方式:变址寻址
EA 计算公式:EA = SI + 0200H
段寄存器:DS
说明:将 DS:SI+0200H 处的字压入堆栈。
(5) SUB AX, [BP]
寻址方式:基址寻址
EA 计算公式:EA = BP
段寄存器:SS
说明:将 AX 寄存器的值减去基址寄存器 BP 指向的内存单元的值,结果存储在 AX 寄存器中。
(6) AND BYTE PTR [VAR1+4], DL
寻址方式:基址变址寻址
EA 计算公式:EA = (VAR1 + 4)
段寄存器:DS
说明:将内存地址 (VAR1 + 4) 处的值与 DL 寄存器的值进行逻辑与操作,结果存储在内存地址 (VAR1 + 4) 处。
(7) PUSHF
寻址方式:无
说明:将标志寄存器的内容压入堆栈。
(8) MOV ES:[BX+0100H], AL
寻址方式:基址寻址
EA 计算公式:EA = BX + 0100H
段寄存器:ES
说明:将 AL 寄存器的值移动到 ES 段中,BX+0100H 处的内存地址。
(9) ADC BYTE PTR [BP+SI+0210H], 45H
寻址方式:基址变址寻址
EA 计算公式:EA = BP + SI + 0210H
段寄存器:DS
说明:将 DS:(BP + SI + 0210H) 处的值与立即数 45H 相加,加上进位标志 CF 的值,结果存储在 DS:(BP + SI + 0210H) 处的内存地址。
(10) OR BYTE PTR [ARRY+BX+DI], CL
寻址方式:基址变址寻址
EA 计算公式:EA = ARRY + BX + DI
段寄存器:DS
说明:将 DS:(ARRY + BX + DI) 处的值与 CL 寄存器的值进行逻辑或操作,结果存储在 DS:(ARRY + BX + DI) 处的内存地址。
要将内存某区间的一组数据复制到内存的另一区间:
在进行数据的转移操作时,我们常常是“数据段和附加段结合在一起使用”:
用DS:[SI]表示源数据区数据存储单元的地址,用 ES:[DI]表示目的数据区数据存储单元的地址。假设 DS=250AH,ES=2EF0H,执行以下程序段,可将源数据区的100个字(Word)数据复制到目的数据区:
MOV CX, 100 ;在计数寄存器CX中设置循环次数
MOV SI,1 ;操作对象的源地址(相对地址)
MOV DI,1 ;操作对象的目标地址(相对地址)
LP1:
MOV DX, DS:[SI] ;将地址(段基地址+偏移地址)中存放的内容copy入DX数据寄存器中
MOV ES:[DI], DX ;将DX内容copy入地址为ES+DI的存储单元中
INC SI
INC DI
LOOP LP1 ;循环直至CX中数值为0
程序执行逻辑如下所示:
注意:附加段是数据段的扩展段,我们也可以称附加段为“额外的数据段”,这说明附加段和数据段都是存储数据用的,此外,这种批量的数据操作也被称之为“串操作”。
前面提及过在操作数据段时,BX基址寄存器、SI源变址寄存器、DI目标变址寄存器三者再结合数据段基址寄存器DS后也可以实现同上述类似的对数据段数据转移操作:
假设 DS=250AH,BX=2EF0H,执行以下程序段,可将源数据区的100个字(Word)数据复制到目的数据区:
MOV CX, 100 ;在计数寄存器CX中设置循环次数
MOV SI,1 ;操作对象的源地址(相对地址)
MOV DI,1 ;操作对象的目标地址(相对地址)
LP1:
MOV DX, DS:[SI] ;将“段基地址+偏移地址”copy入DX数据寄存器中
MOV BX:[DI], DX ;将DX内容copy入地址为BX+DI的存储单元中
INC SI
INC DI
LOOP LP1 ;循环直至CX中数值为0
其实此处BX充当了ES的作用,BX存放了数据转移的目标地址,我们使用循环不断地将数据copy至目标地址。