形6饼并8086指令系统( 20060,24(星期二 可以分成6个功能组 数据传送 Data transfer 算术运算( Arithmetic) 3.逻辑运算和移位指令( Logic& Shift) 串操作( String manipulation) 5.控制转移( Control transfer) 6.处理器控制( Processor Control)
第6讲 8086指令系统(续) 2006.10.24(星期二) 可以分成6个功能组: 1. 数据传送(Data transfer) 2. 算术运算(Arithmetic) 3. 逻辑运算和移位指令(Logic& Shift) 4. 串操作(String manipulation) 5. 控制转移(Control Transfer) 6. 处理器控制(Processor Control)
数据传送( Data transfer) (一)通用传送指令( General Purpose Transfer) (二)输入输出指令( Input and Output) (三)目的地址传送指令( Address-object transfer) (四)标志传送指令( Flag register transfer
1. 数据传送(Data transfer) (一)通用传送指令(General Purpose Transfer) (二)输入输出指令(Input and Output) (三)目的地址传送指令(Address-object transfer) (四)标志传送指令(Flag register transfer)
()目的地址传送指令( Address-object transfer) 808618088提供三条: 地址指针写入指定寄存器或寄存器对指令。 1、LEA( Load effective address)熟练掌握内容) 格式: LEA regl6,mem16;EA→>(reg16 功能:加载有效地址,用于写近地址指针。 把指令中指定的存储器操作数有效地址装入指定的寄存器。 例 已知变量DDR对应一内存单元DS:EA1000H:2000H) LEA BX. DDR表明把DDR的偏移量2000H送入BX寄存器。 LEA BX,ISI得到什么?
1、LEA(Load Effective Address)(熟练掌握内容) 格式: LEA reg16 , mem16 ;EA→(reg16) 功能:加载有效地址,用于写近地址指针。 把指令中指定的存储器操作数有效地址装入指定的寄存器 。 (三)目的地址传送指令(Address-object transfer) 8086 /8088 提供三条: 地址指针写入指定寄存器或寄存器对指令。 已知变量DDR对应一内存单元DS :EA (1000H:2000H) LEA BX,DDR表明把DDR的偏移量2000H送入BX寄存器。 LEA BX,[SI]得到什么? 例:
例:设(BX)=0400H,(S)=003cH LEA BX,[BX+SI+OF62H 存储器 (DS)BUFFER 3000H:1000H 40H 31001H0OH 执行指令后 EA=(BX)+(S|)+0F62H=0400H+003cH+0F62H 139EH,(BX)=139EH 注意:设()表示对应寄存器的内容,不妨设 DS)=3000H BUFFER=1000H 31000H)=0040H
例:设(BX)=0400H,(SI)=003CH LEA BX,[BX+SI+0F62H] 执行指令后: EA=(BX)+(SI)+0F62H=0400H+003CH+0F62H =139EH,(BX)=139EH 注意:设()表示对应寄存器的内容,不妨设 (DS)=3000H BUFFER=1000H (31000H)=0040H 40H 00H ... 3000H:1000H (DS) BUFFER 31001H ... 存储器
LEA指令与MoV的区别 LEA BX, BUFFER ;(BX)=1000H MOV BX BUFFER (BX)=0040H LEA指令与MOV等价: LEA BX BUFFER ;(BX)=1000H MOV BX, OFFSET BUFFER; (BX)1000H (2)LEA指令中的目标寄存器必须是16位的通用寄存器, 源操作数必须是一个存储器。 (3)请思考下列指令的正、误 LEA DX, BETABXIIS(对) LEA DX,AX(错)
(1) LEA 指令与MOV 的区别 LEA BX , BUFFER ;(BX)=1000H MOV BX , BUFFER ; (BX)=0040H LEA 指令与MOV等价: LEA BX , BUFFER ; (BX)=1000H MOV BX , OFFSET BUFFER ; (BX)=1000H (2)LEA 指令中的目标寄存器必须是16位的通用寄存器, 源操作数必须是一个存储器。 (3)请思考下列指令的正、误 LEA DX ,BETA[BX][SI] (对) LEA DX , AX(错)
2, LDS Load pointer using DS) 格式: LDs reg16,mem32;(reg16)←(EA) (DS)←((EA)+2)) 功能:将指令指定32位地址指针送指令指定寄存器和DS。 将指令指定mem32单元的前两个单元内容(16位偏移量装入指 定通用寄存器,把后两个单元内容段地址)装入到DS段寄存 用于写远地址指针
2、LDS (Load pointer using DS) 格式:LDS reg16, mem32 ;(reg16)←(EA) (DS)←((EA)+2)) 功能:将指令指定32位地址指针送指令指定寄存器和DS。 将指令指定mem32单元的前两个单元内容(16位偏移量)装入指 定通用寄存器,把后两个单元内容(段地址) 装入到DS段寄存 器。 用于写远地址指针
例: 假设:(DS)=C000H 存储器 (DS) 指令: LDS SI,0010H C000H: 0010H 80H 01H 执行指令后: C0012H00H (SD=0180H C0013H20H (DS)=2000H
例: 假设: (DS)=C 000H 指令: LDS SI, [0010H] 执行指令后: (SI)=0180H (DS)=2000H 80H 01H 00H 20H C000H:0010H (DS) C0011H C0012H C0013H ... ... 存储器
3, LES CLod pointer using ES 格式: LES reg16,mem32 (regl6)←(EA (ES)←((EA)+2)) 功能:把源操作数指定的4个相继字节送指令指定的寄存器 及ES寄存器中 些指令常常指定D寄存器。 将指令指定mem32单元的前两个单元内容(16位偏移量装入 指定通用寄存器,把后两个单元内容(段地址)装入到ES段 寄存器。 用于写远地址指针
3、LES (Load pointer using ES) 格式:LES reg16, mem32 ;(reg16)←(EA) (ES)←((EA)+2)) 功能:把源操作数指定的4个相继字节送指令指定的寄存器 及ES寄存器中。 此指令常常指定DI寄存器。 将指令指定mem32单元的前两个单元内容(16位偏移量)装入 指定通用寄存器,把后两个单元内容(段地址) 装入到ES段 寄存器。 用于写远地址指针
例: 假设:(DS)=B000H 存储器 (BX)=080AH DS)(BX) B00OH: 080AH A2H 指令: LES DI,BX B080BH 05H 执行指令后 B080CH 00H (DI)=05A2H B080DH 40H (ES)=4000H
例: 假设: (DS)=B 000H (BX)=080AH 指令: LES DI, [BX] 执行指令后: (DI)=05A2H (ES)=4000H A2H 05H 00H 40H B000H:080AH (DS) B080BH B080CH B080DH ... ... 存储器 (BX)
存储器 综合举例: (DS) TABLE 设 5000H:1000H 40H (DS)=5000H 51001H00H TABLE=1O00H 51002H00H 51003H30H 分析下列指令执行结果 MOV BX TABLE ;(BX)=0040H MOV BX ,S TABLE (BX)=1000H LEA BX, TABLE (BX)=1000H LES BX, TABLE :(BX)=0040H,(ES)=3000H LDS BX, TABLE;(BX)=0040H (DS)3000H
综合举例: 设: (DS)=5000H TABLE=1000H 分析下列指令执行结果: MOV BX,TABLE ;(BX)=0040H MOV BX,OFFSETTABLE ;(BX)=1000H LEA BX,TABLE ;(BX)=1000H LES BX,TABLE ;(BX)=0040H,(ES)=3000H LDS BX,TABLE ;(BX)=0040H,(DS)=3000H 40H 00H 00H 5000H:1000H (DS) TABLE 51001H ... 存储器 30H ... 51002H 51003H