数据传送指令 地址总线AB VO 储|接 入 ●●● 接 CPU器|口N设 口 设 备 数据总线DB 控制总线CB 寄存器,存储器,IO端口
二 .数据传送指令 存 储 器 I/O 接 口 输 入 设 备 I/O 接 口 数据总线 DB 控制总线 CB 地址总线 AB 输 入 设 备 CPU 寄存器,存储器,I/O端口
▲数据传送是最基本、最重要的一种操作 实际程序中,使用的比例最高 汇编子程例: change Proc LEA SL, num+2 MOV CL num+1 寄存器←寄存器 MOV CH 0 MOV AX. 0 寄存器←内存单元 MOV DL, 10 next: MUL DI 寄存器←WO端口 MOV BH. 0 MOV BL, SI 设置寄存器、内存单元的初始值 AND BL OFH ADD AX. BX INC SI LOOP next zero MOV BX. AX RET change ENDP
▲ 数据传送是最基本、最重要的一种操作 实际程序中,使用的比例最高 change PROC LEA SI, num+2 MOV CL, num+1 MOV CH, 0 MOV AX, 0 MOV DI, 10 next: MUL DI MOV BH, 0 MOV BL, [SI] AND BL, 0FH ADD AX, BX INC SI LOOP next zero: MOV BX, AX RET change ENDP 汇编子程例: 寄存器 寄存器 寄存器 内存单元 寄存器 I/O端口 设置寄存器、内存单元的初始值
▲按传送内容,可分为四类 1.通用数据传送Mov,PUSH,POP,XCHG,XLAT 2地址传送LEA,LDS,LES 3标志传送 PUSHF,POPF,LAHF,SAHF 4.输入输出传送IN,OUT(在第五章介绍) ▲特点: 1.除POPF、SAHF外,其他传送指令对标志位均无影响 2.唯一允许以段寄存器做操作数的指令 且只有MO、PUSH、POP这三条允许
▲ 按传送内容,可分为四类: 1. 通用数据传送 MOV, PUSH, POP, XCHG, XLAT 2. 地址传送 LEA, LDS, LES 3. 标志传送 PUSHF, POPF, LAHF, SAHF 4. 输入输出传送 IN, OUT (在第五章介绍) ▲ 特点: 1. 除POPF、SAHF外,其他传送指令对标志位均无影响 2. 唯一允许以段寄存器做操作数的指令 且只有MOV、PUSH、POP这三条允许
1.通用传送指令MOV、PUSH、POP、XCHG、XLAT 1)MOV传送指令 格式 Mov dst,sre 执行(dst)←(sre) reg/mem/ segre←reg regr segre mem 可实现 reg/mem segre reg/mem←data
1. 通用传送指令 MOV、PUSH、POP、XCHG、XLAT reg/mem/segreg ← reg reg/segreg ← mem reg/mem ← segreg reg/mem ← data 可实现 1)MOV传送指令 格式 MOV dst,src 执行 ( dst ) ← ( src )
例 oreg/mem/ segre←reg通用寄存器/存储器/段寄存器通用寄存器 MOV AL BL MOV[ BXI, AL MOV DS. AX ②reg/ segre←mem通用寄存器段寄存器←存储器 MOV AL,I BXI MOV DS,I BX+SI ③reg/mem← segre通用寄存器/存储器←段寄存器 MOV BX. CS MOV BXI, DS ④reg/mem←data 通用寄存器/存储器←立即数 MOV al. 9 MOV BX. OFfset buffer MOv value, 0 MOV WORD PTR BXI, 1
例 : ①reg/mem/segreg ← reg 通用寄存器/存储器/段寄存器←通用寄存器 MOV AL , BL MOV [ BX ] , AL MOV DS , AX ②reg/segreg ← mem 通用寄存器/段寄存器← 存储器 MOV AL , [ BX ] MOV DS , [ BX+SI ] ③reg/mem ← segreg 通用寄存器/存储器 ← 段寄存器 MOV BX , CS MOV [ BX ] , DS ④reg/mem ← data 通用寄存器/存储器 ←立即数 MOV Al , 9 MOV BX , OFFSET buffer MOV [ value ] , 0 MOV WORD PTR [ BX ] , 1
MOⅤ指令特点及注意事项: ●双操作数指令注意双操作指令的特点) ●可进行字节或字传送 ●不允许存储器传送到存储器 MOV[ BxI, value Mov[D耵,[S MOV AX, value MOV [BXI, AX MOV AL, SI MOV dI, AL
MOV指令特点及注意事项: ⚫ 双操作数指令 (注意双操作指令的特点) ⚫ 可进行字节或字传送 ⚫ 不允许存储器传送到存储器 MOV [ BX ] , value MOV [DI], [SI] MOV AX ,value MOV [ BX ] ,AX MOV AL ,[SI] MOV [ DI ] ,AL
●可对DS、ES、SS赋值 但不允许立即数直接传送给段寄存器 MOV DS AX MOV ES,[BXI MOV DS 1000H MOV AX 1000H MOV DS AX ●CS不能做目的操作数,不能通过传送指令改变CS的值 MOV S, AX
⚫ 可对 DS、ES、SS 赋值 但不允许立即数直接传送给段寄存器 MOV DS,AX MOV ES ,[BX] MOV DS,1000H MOV AX ,1000H MOV DS,AX ⚫ CS不能做目的操作数, 不能通过传送指令改变CS的值 MOV CS , AX
●不允许段寄存器传送到段寄存器 MOV ES, DS MOV AX, DS MOV ES, AX D: MASM>DEBUG A 1693: 0100 MOV ES DS A Error 1693: 0100 MOV AX. DS 1693: 0102 MOV ES. AX 1693:0104
⚫ 不允许段寄存器传送到段寄存器 MOV ES ,DS MOV AX , DS MOV ES , AX D:\MASM>DEBUG -A 1693:0100 MOV ES, DS ^ Error 1693:0100 MOV AX, DS 1693:0102 MOV ES, AX 1693:0104 -
2)PUSH入栈操作 格式 PUSH src 执行 (SP) (SP)-2 SS: SP src (SS:SP)←(src) SS: SP 特点: ●单操作数指令 ●操作数为16位,可以是reg/ segre/mem,不可以是data reg AX, BX, CX, DX, sl, Dl, BP, Bx segreg CS, DS, ES. SS mem:字类型
2)PUSH入栈操作 格式 PUSH src 执行 ( SP) ← (SP)- 2 (SS:SP)← (src) 特点: ⚫ 单操作数指令 ⚫ 操作数为16位,可以是reg/segreg/mem, 不可以是data reg : AX, BX, CX, DX, SI, DI, BP, BX segreg : CS, DS, ES, SS mem : 字类型 SS:SP SS:SP (src)
例: PUSH AX 若执行前: 则执行后: (SS)=2000H (SS)=2000H 不变 (SP)=1002H (SP)=1000H 减2 (SS:SP)=2010H (SS:SP)=1234H变 (AX)=1234H (AX)=1234H 不变 址 址 低 SS: SP 2A 2000:1000 34 3B 12 SS: SP 2000:1002 10 10 20 20 (AX)=1234h 高 (AX)=1234h 高 指令执行前 指令执行后
例: PUSH AX 若执行前: (SS)= 2000H (SP)= 1002H (SS:SP)= 2010H (AX)= 1234H 3B 2A 10 低 高 20 地址 SS:SP 2000:1002 指令执行前 (AX)=1234h 则执行后: (SS)= 2000H (SP)= 1000H (SS:SP)= 1234H (AX)= 1234H 12 34 10 低 高 20 地址 SS:SP 2000:1000 指令执行后 (AX)=1234h 不变 减2 变 不变