概述 8086关于字符串的五种操作指令:
MOVS (MOVE BYTE OR WORD STRING)
CMPS (COMPARE BYTE OR WORD STRING)
SCAS (SCAN BYTE OR WORD STRING)
LODS (LOAD BYTE OR WORD STRING)
STOS (STORE BYTE OR WORD STRING)
从指令的全称中可以看到,8086对于字符串的操作既可以对字节进行操作,也可以对字进行操作。
上述指令的寻址方式均为隐含寻址,若SRC在存储器中,则数据地址由DS:SI提供,若SRC在寄存器中,则对字节操作时数据在AL中,对字操作时数据在AX中。若DST在存储器中,则数据地址必须由 ES:DI确定。若DST在寄存器中,则对字节操作时数据在AL中,对字操作时数据在AX中。
概述 一条汇编指令包含了操作码和操作数两部分,而操作数又分为目的操作数(DST)和源操作数(SRC)两种。汇编指令就是操作码与操作数的结合,有的操作码需要两个操作数(即DST和SRC)有的只需要一个操作数(例如PUSH),还有的不需要操作数(例如CLI)。
这种差异性便是寻址方式的不同造成的,所谓寻址便是确定如何寻找操作数的过程。
不管指令需要结合多少个操作数,指令执行过程中数据的流向是唯一的,那就是从SRC -> DST。并且在数据传递的过程中必须保障SRC和DST长度大小明确且一致。
指令系统的寻址主要包括两类:
数据的寻址方式:寻找指令所操作数据的方式 转移地址的寻址方式:寻找转移指令所需的程序地址 数据的八种寻址方式:
立即数寻址 寄存器寻址 存储器寻址 直接寻址 寄存器间接寻址 寄存器相对寻址 基址变址寻址 基址变址寻址且相对寻址 隐含寻址 立即数寻址 MOV AX, 100H ; 十六进制立即数 MOV BX, 1010 ; 十进制立即数 MOV AX, 12Q ; 八进制立即数 MOV AX, 0101B ; 二进制立即数 立即数只能作为源操作数(SRC)使用,无法作为目的操作数。立即数所占据的内存大小由目的操作数决定。且立即数本身长度不得超出目的操作数长度。
MOV AL, 10H ; 10H占据一个Byte的空间 MOV AX, 10H ; 10H占据一个Word的空间 MOV AL, 1010H ; ❌ 1010H占据一个Word的空间无法放入一个Byte的寄存器中 MOV 1010H, AX ; ❌ 立即数无法作为DST 注:CS寄存器在立即数寻址过程中无法作为目的操作数使用。