8080寻址方式总结
Posted 不会写代码的丝丽
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了8080寻址方式总结相关的知识,希望对你有一定的参考价值。
寻址
概念:
寻址表示以何种方式找到一个数据所在的地
1 立即寻址
直接将常量赋值给寄存器如下命令:
mov al,20 #注意8位寄存器
mov ax,0xffff #注意16位寄存器
2 寄存区寻址
数据存放在寄存器中,需要在寄存器中取出
mov cl,dl
mov ax,bx
注意点:
- 段寄存器之间禁止相互赋值
- 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为段内偏移的内存中
但是不是所有的寄存器都支持这种方式寻址。
仅有以下四个寄存器支持:
BX
(使用ds
作为基地址)BP
(使用ss
作为基地址)SI
(使用ds
作为基地址)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寻址方式总结的主要内容,如果未能解决你的问题,请参考以下文章