mov [2000h],al指令需要几个总线周期?

本文深入解析了在《16/32位微机原理汇编语言及接口技术》中提到的mov[2000h],al指令的执行过程。解释了为什么需要3个“存储器读”总线周期来读取指令,以及执行指令仅需1个“存储器写”总线周期的原因。同时,通过例举“add[2000h],ax”指令的计算,进一步阐述了指令周期的计算方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

mov [2000h],al指令需要几个总线周期?
 

问题:

在《16/32位微机原理汇编语言及接口技术》书的第107页有这样一段话:“mov [2000h],al”读到指令队列需要3个“存储器读”总线周期,而执行它只需1个“存储器写”总线周期。

您能详细讲讲为什么是3个“存储器读”1个“存储器写”。

对应习题4.13指令“add [2000h],ax”该如何计算指令周期呢?谢谢!

回复:

这是一个很好的问题,很能体现软硬件结合的特点。

8088数据总线为8位,每次总线周期只能进行8位数据(即一个字节)读写。“mov [2000h],al”指令的代码是3个字节,所以进行指令读取(即取指)需要3个读取存储器的总线周期。这是指读取指令阶段,接着处理器执行该指令。

该指令的功能是将AL寄存器内容传送到主存偏移地址[2000h]位置,就是进行存储器写操作。因为只有一个字节数据,所以执行它只需1个“存储器写”总线周期。

至于习题4.13指令“add [2000h],ax”,因为是3个字节代码,所以8088需要3个存储器读总线周期进行指令读取。执行该指令,首先从主存[2000h]单元读取一个16位字,故需要2个存储器读总线周期;然后读取的数据与AX内容相加,结果还要写回这个位置,这又需要2个存储器写总线周期。

在8086系统中,使用2Kx8位的SRAM芯片如Intel 6116构建一个8KB的存储器系统,我们需要考虑以下几个步骤: 1. **地址线配置**: - Intel 6116有14根地址线,能访问2^(14)=16KB的空间。但我们只需要8KB,所以需要剪去最低两位的地址线,保留12位地址。 2. **数据线配置**: - 芯片提供8位数据线,正好对应8KB的内存容量,因为1KB = 2^10 bytes,而8KB = 2 * 2^10 bytes。 3. **存取周期**: - 写操作通常比读操作慢,所以我们可能会将奇数地址映射为55H,偶数地址映射为AAH。这需要一个控制信号来同步读写过程。 4. **编程设计**: - 使用汇编语言编写程序,通过循环结构(如MOV指令),在奇数地址上写55H,在偶数地址上写AAH。可以设置计数器来控制写入次数,并处理地址的切换。 由于这是一个硬件设计问题,涉及到实际的电路连接和软件编程,Proteus是一款电子设计自动化工具,它可以用于模拟和验证这个设计。以下是简化的步骤: - **硬件连接**: a. 将Intel 6116的地址输入线连接到CPU的地址总线上,数据输入线连接到CPU的数据总线上。 b. 创建一个数据缓冲区,用于临时存放待写入的数据。 - **软件设计**: a. 使用汇编语言编写一个主循环,检查当前地址是否为奇数或偶数。 b. 如果是奇数,从缓冲区取出55H并写入地址对应的内存;如果是偶数,取AAH进行写入。 c. 更新地址,如果满8KB则回到起始地址开始下一轮。 ```assembly ; 示例代码,假设BP指向内存首地址,AL暂存数据 start: MOV CX, 1000h ; 设置循环次数,1000h=256*4=1024字节 loop_start: IN AL, [BP] ; 读取地址上的旧数据(这里忽略) CMP AL, 0 ; 检查是否是偶数地址,如果是奇数,直接跳过下一个步骤 JZ next_address OUT [BP], AL ; 偶数地址,写入AAH next_address: ADD BP, 1 ; 指向下一个地址,注意边界条件 JMP $+4 ; 因为是8位数据宽,加上4跳到下一个字节 CMP BP, 11FFFh ; 判断是否已超出地址范围 JL loop_start ; 如果没超过,继续循环 RET ```
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值