汇编语言习题详解:地址分段、寻址方式与运算实例

版权申诉
0 下载量 78 浏览量 更新于2024-06-21 收藏 231KB PDF 举报
AX, [BX]; 3 )直接寻址 : MOV AX, [1000H]; 4 )相对寻址 : ADD AX, 1000H; 5 )基址变址寻址 : MOV AX, [DI+100H]; 6 )段基址寻址 : MOV AX, DS:[BP+10H]; 7 )间接寻址 : MOV AX, [SI+DI*2]; 其中,"数据有关的寻址方式"指的是处理数据时,指令根据数据的类型或存放位置进行寻址。例如,当需要读取或写入一个内存中的字符串时,可能使用基址变址寻址或段基址寻址,因为字符串通常在连续内存区域。 3. 为了在80x86微机的存储器中读取内容,我们首先要了解内存地址的结构。在给定的示例中,每个16位地址由高8位(段地址)和低8位(偏移地址)组成。对于30022H和30024H,由于它们都是偶地址,我们假设这是小端模式,所以: 30022H = (段地址 << 8) + 偏移地址 = (0x300 << 8) + 0x22 = 0x30022 30024H = (段地址 << 8) + 偏移地址 = 0x30024 而30021H和30022H虽然相邻,但没有直接给出偏移地址,因此无法直接计算内容。如果假设这两个地址是连续的,它们的内容应该是前一个地址内容的后两个字节,即: 30021H = 30022H - 1 = 0x30021 30022H = 0x30022 4. 根据提供的内存数据和指令,我们可以计算AX的内容: 1) MOV AX, 1200H: AX = 012H 2) MOV AX, BX: AX = 0100H 3) MOV AX, [1200H]: 需要知道1200H处的实际内容,这里假设为012H,AX = 012H 4) MOV AX, [BX]: AX = 0100H (因为BX = 0100H) 5) MOV AX, 1100[BX]: 首先解址1100H,实际地址为0100H + 1100H = 0200H,然后读取,假设内容为0001H,AX = 0001H 5. 补码运算及标志位设置: 1)01001001b + 10011101b: 结果:11010110b SF:符号位,1表示负数,0表示正数; CF:进位标志,1; ZF:零标志,0,因为结果不为0; OF:溢出标志,0,因为操作数无溢出; 结果有效。 2)01000001b - 10101011b: 结果:11101010b SF:符号位,0,因为结果是正数; CF:借位标志,1; ZF:零标志,0,因为结果不为0; OF:溢出标志,0,因为操作数无溢出; 结果有效。 6. 符号定义语句中,BUFFDB是一个字节数组,包含三个元素:1, 2, 和 '123'(ASCII值)。EBUFFDB是另一个字节数组,大小为0。LEQUEBUFF-BUFF表示EBUFFDB减去BUFFDB,由于EBUFFDB为空,所以: L = 0 - 3(BUFFDB的最后一个元素的地址)= -3,因为减去一个负数相当于加上其相反数。 L的值为-3,这是相对于BUFFDB的偏移地址,因为EBUFFDB在BUFFDB之后,所以是负值。