8080寻址方式总结

Posted 不会写代码的丝丽

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了8080寻址方式总结相关的知识,希望对你有一定的参考价值。

寻址

概念:

寻址表示以何种方式找到一个数据所在的地

1 立即寻址

直接将常量赋值给寄存器如下命令:

mov al,20 #注意8位寄存器
mov ax,0xffff #注意16位寄存器

2 寄存区寻址

数据存放在寄存器中,需要在寄存器中取出

mov cl,dl
mov ax,bx

注意点:

  1. 段寄存器之间禁止相互赋值
  2. ip寄存器不能被赋值
mov ds,cs
mov ip,ax

3 直接寻址

数据在内存中

mov al,[1064h] # 从ds:1064处取出数据放入al

注意点:
如下代码是无法通过的

mov [100] [102] #无法内存到内存
mov [100],65 #无法确定到底是8位还是16位
mov [100],ff65 #虽然8080最高是16位,很显然这里只能是16位操作数。但是依然无法通过

如果指定特定长度可以按如下语法

mov byte ptr [100] ,65 #指明当前为8位
mov word ptr[100],ff65 #指明为16位

4 寄存器间接寻址

数据位于内存中,但是需要计算段偏移才能拿到,而段偏移在寄存器中。

示例:

MOV AX,[SI] ;将SI中的值作为段内偏移,从内存中取出数据放入AX中
MOV [BX],AL;将AL数值放入以BX为段内偏移的内存中

但是不是所有的寄存器都支持这种方式寻址。
仅有以下四个寄存器支持:

  1. BX (使用ds作为基地址)
  2. BP (使用ss作为基地址)
  3. SI (使用ds作为基地址)
  4. DI (使用ds作为基地址)

5 寄存器相对寻址

是寄存器间接寻址升级版本,寻址时在寄存器上额外添加立即数

示例:

MOV AX,[SI+2] ;将SI中的值+2 作为段内偏移,从内存中取出数据放入AX中
MOV [BX+2],AL;将AL数值放入以BX为段内偏移+2的内存中


6 基址变址寻址

是寄存器间接寻址升级版本,寻址时在寄存器在加上另一个寄存器作为偏移

仅支持SI,DI相加到其他寄存器中

MOV AX,[bx+si]  多个寄存器加立即数
MOV AX,[bx+di]  ;
MOV [bx+di] ,AX;

7 基址变址相对寻址

是基址变址寻址和寄存器相对寻址结合版

MOV AX,[bx+si+1000]  多个寄存器加立即数
MOV AX,[bx][si]1000  ;意义同上
MOV AX,1000[bx][si] ;意义同上
MOV AX,1000[bx+si] ;意义同上
MOV AX,[bx+1000][si] ;意义同上
MOV AX,[bx][1000][si] ;意义同上

以上是关于8080寻址方式总结的主要内容,如果未能解决你的问题,请参考以下文章

寻址方式总结

8051寻址方式总结

8080地址总线宽度为16根,那么它们的寻址能力为:(64)KB

指令寻址方式与数据寻址方式

BootStrap有用代码片段(持续总结)

20145306《信息安全系统设计基础》第14周学习总结