8位和16位处理器如何通过两个寄存器访问更多RAM?

Slo*_*ald 4 ram assembly memory-address 8-bit

让我困惑的是8位计算机如何访问超过256字节的RAM.我知道它必须使用两个寄存器,但任何人都可以向我展示汇编代码中的这个样子吗?

喜欢:

mov a, [x]   ???
Run Code Online (Sandbox Code Playgroud)

Al *_*epp 6

让我们假设我们在寄存器L和H中具有LOWER和更高8位地址的一半.例如,我们想从地址32770 dec = 8002 hex读取字节.

mov l, 02h  ;lower byte of address
mov h, 80h  ;higher byte of address
mov a, [hl] ;a <-- [h*256 + l]
Run Code Online (Sandbox Code Playgroud)

CPU中存在许多寻址模式.所以我们可以有一个不同的例子,例如只有一个寄存器和一个直接地址:

mov h, 80h
mov a, [2]  ;a <-- [h*256 + immediate]
Run Code Online (Sandbox Code Playgroud)

它始终取决于特定的CPU架构.例如,Zilog Z80称为8位CPU,但它也包含许多16位指令.您可以像这样对其进行索引编址:

mov ix, 8002h  ;base address of an array
mov a,[ix+20]  ;a <-- [ix + 20] i.e. read a byte from an array like ix[20] in C
Run Code Online (Sandbox Code Playgroud)

注意: 那些旧的8位CPU使用8位累加器,即它们只能在8位寄存器中计算数学和其他算术内容,因此它们在软件计算级别上为8位.并且它们的存储器访问单元是8位,即它一次只能读取或写入一个字节的存储器,因此它们在硬件级别上也是8位.这些16位指令很慢,它们实际上连续进行了一对8位操作.