汇编语言笔记13-数据移动指令的合法性

8086寄存器中允许的数据流向如图,注意CS只能作为源操作数

考察以下的指令:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
mov ax,8h ;mov 寄存器,立即数,合法的

mov ax,bx ;mov 通用寄存器,通用寄存器,合法的

mov ax,ds ;mov 通用寄存器,段寄存器,合法的

mov ds,ax ;mov 段寄存器,通用寄存器,合法的

mov ax,[0] ;mov 通用寄存器,内存单元,合法的

;以下三条指令中,内存单元作为目的操作数,masm会忽略中括号【】,因此要显式地指明段地址
mov [0],bx ;mov 内存单元,寄存器,合法的

mov [0],cs ;mov 内存单元,段寄存器,合法的

mov [0], 5678h ;mov 内存单元,立即数,合法的

;------------------------// mov 内存单元,内存单元 是不合法的。

mov ds,[0] ;mov 段寄存器,内存单元,合法的

mov ds,ax ;mov 段寄存器,寄存器,合法的

;------------------------// mov 段寄存器,段寄存器 是不合法的
;------------------------// mov 段寄存器,立即数 是不合法的

add操作的合法性

1
2
3
4
add 寄存器,数据
add 寄存器,寄存器
add 内存单元,寄存器
add 寄存器,内存单元