传送指令的用法及8086的寻址方法
微机原理课件第三章8086寻址方式和指令系统

数寻在址堆方栈式段来中说,,操就作相数当的于段钥地匙址在段寄存器SS中,操 作放数在的寄物存理器地中址,=即SS寄×存1器6+给BP出。 了要访问的存储单元地址。
DS 3000H ×16
┋
SI 2000H
操作码
+ COUNT 4000H
00
代码段
40
寄存器3相60对00H寻址方式也允许使┋用段超越前缀,
如MOV BX,ES:COUNT[DI]则段地址为ES,物
理地址=ES×16+DI+COUNT。
BH
BL
┋
BX 56
78
36000H
78
56
数据段
┋
指令MOV BX,COUNT[SI]的执行过程
{{ }} 组合起来([B只X能]+相[S加I)]+,D同8或时D还1可6 以加上一个8位或
((1SE86IE8和位A种A种=D的=)I)位也移不[[[[[[[BBB量能BSDBXPPPIIX]],]同]]]]+++但时++++[[[DDDDSDB出8888IIIX现或 或或 或]]]和+++在DDBDDD11P方1188866不66或 或 或括能DDD号111同寄中666时;存出器现相 变在相对 址方对基 寻括寻号址 址址中,
{ 设((D3E86A种S0==0M)300HO0)V[[[[0HBSBD=XIPIB,5]]]]X6或S7,+I8=18H[2S6位0I位0+位0C位H移O,移U量位N量T移] 量COU默 默N认 认T=DS4SS0段 段00H,
数据传送类指令

05
06
不允许直接向段寄存器传送立即数。
该指令不影响标志位。
06
数据传送类指令
例3-12
指出下列指令中的错误 (1)MOV [DI], [SI] (2)MOV DS, 1000H (3)MOV 2000H, AX
(1)两个操作数不能同时为存 储器操作数。
(2)不能直接向段寄存器传送 立即数,正确的指令应为:
(1)在CPU内部寄存器之间 进行数据传送。
例如,MOV BL, AL MOV BX, AX MOV DS, AX
(2)在CPU内部寄存器与存 储器之间进行数据传送。
例如,MOV AX, [1000H] MOV BX, [SI][BX] MOV DATA[BP], ES
(3)将立即数传送给寄存器。 例如,MOV AX, 1234H MOV SI, 1000H
例3-14
数据传送类指令
已知:(BX)=1122H,(DS)=3000H,(31000H)=1234H。执行指令: XCHG BX, [1000H] 源操作数的物理地址为:(DS)×16+1000H=31000H。 指令执行的结果为:(BX)=1234H,(31000H)=1122H。
要实现两个存储单元X与Y之间的数据交换, 可以执行如下指令:
数据传送类指令
例3-15 已知:(DS)=3000H,(32000H)=12H,(32001H)
=34H,(32002H)=56H,(32003H)=78H。执行指令: LDS SI, [2000H]
地址传送指令
1.5 输入输出指令
数据传送类指令
输入输出指令用于在I/O端口与CPU之间传送数据。
MOV AX, 1000H MOV DS, AX (3)立即数不能作为目的操 作数。
8086 8088数据传送指令

AX=5678H
SP=1000H
例:MOV AX,5678H MOV SP,1000H PUSH AX
3条指令执行后 AX=5678H SP=0FFEH
微机原理
2.通用数据传送指令
(3)POP指令 格式: POP DST 功能: ( SRC) ← (SP+1,SP) , SP ←SP+2
微机原理
例:将CX寄存器内容送至DX。 MOV DX,CX
例:将AX的内容送至ES 。
MOV ES,AX
2.通用数据传送指令
CS
DS,SS,ES
AX,BX,CX,DX BP,SP,SI,DI
存 储 器
立即数
微机原理
例:将立即数2000H送至数据段 偏移地址为1000H单元的存储器。 方法1:MOV [1000H],2000H 方法2:MOV BX,1000H
1.基本情况
微机原理
数据传送指令 (1)通用数据传送指令 (2)累加器专用传送指令
用于寄存器、存储器单元、输入输 出端口之间传送数据或地址。
MOV PUSH、POP、XCHG
IN、 OUT、 XLAT
(3)地址传送指令
LEA、LDS、LEA
(4)状态标志寄存器传送指令 LAHF、SAHF、 PUSHF、 POPF
IN、 OUT、 XLAT
(3)地址传送指令
LEA、LDS、LEA
(4)状态标志寄存器传送指令 LAHF、SAHF、 PUSHF、 POPF
2.通用数据传送指令
(2)PUSH指令 格式: PUSH SRC
操作数需以字为单位
功能: SP ←SP-2,(SP+1,SP) ←( SRC)
微机原理
第3章_3 8086指令系统(传送类)

向
12H 34H
56H 10043
1 (DEST) (SP)+1, (SP)
CX
78H 10042 9AH 10041
(CX)=2105H
2 (SP) + 2→(SP)=0046H
一、数据传送指令 •地址传送指令
DS:1000H
5、LEA指令——EA地址送寄存器指令。
… …
34H 56H 78H 9AH
(SDI I) 56H 34H
7、LES指令——指针地址传送ES指令 格式:LES REG, SRC
9AH 78H (DES)
功能:(REG) (SRC)
(ES) (SRC+2)
例
LES DI,[2012H]
操作: DI (2013H:2012H)
• 不影响标志位 • REG 16位寄存器,不能是段寄 存器。 • SRC为双字存储单元
内存
AX,BX CX,DX SI,DI BP,SP
立即数
AH,AL CH,CL DH,DL BH,BL
DS,ES,SS
•dest不能是CS和立即数 •不影响标志位 •dest、src不同为段寄存器
MOV DS, ES
• 立即数不能直接送段寄存器
MOV DS, 2000H
一、数据传送指令
•通用数据传送指令
PORT端口地址为16位: 格式:
IN AL, DX (字节) IN AX, DX (字) 功能:
(AL) ( (DX) ) (字节) (AX) ( (DX)+1, (DX) ) (字)
• 不影响标志位
•端口号00H~FFH可直 接在指令中指定
8086CPU中的数据传送类指令

8086CPU 中的数据传送类指令数据传送类指令注意点1. 除 SAHF 、POPF 指令外,其余传送类指令CPU 执⾏后,对6个状态标志均⽆影响。
也就是说,除 SAHF 、POPF 指令外,CPU 只是做了数据传送,并没有进⾏数据运算,对状态标志位⽆影响。
2. 语法规则1)⽴即数只能做源操作数2)类型⼀致3)类型明确4)当ES 、DS 、SS 做⽬的操作数时,源操作数不能是⽴即数。
5)CS 、IP 不能做⽬的操作数6)两存储器单元之间不能直接操作数据传送类指令通⽤数据传送指令-MOVmov 指令的格式为取有效地址指令-LEALEA 指令的格式为REG_16表⽰⼀个16位寄存器,理论上只要是16位即可,但是因为存放有效地址,所以最好是 BX 、BP 、SI 、DIMEM 是5种存储器寻址⽅式之⼀指明的⼀个存储器单元。
例如等同于功能⼀样。
取地址指针指令-LDS 、LES这两个指令是将双字变量MEM 内容中的⾼16位送⼊DS/ES ,低16位送⼊指定的REG16中。
这⾥REG16不允许为段寄存器。
不常⽤,了解。
以LDS 为例,格式为REG_16表⽰⼀个16位寄存器MEM 是5种存储器寻址⽅式之⼀指明的⼀个存储器单元例如得到地址指针,就可以很容易取数据MOV DST ,SRCLEA REG_16,MEMLEA BX ,data1 ;data1是变量,直接寻址找到这个存储单元把有效地址送给BXMOV BX ,OFFSET data1LDS REG_16,MEMTABLE DB 10H ,20H...LDS BX ,TABLE ;TABLE 的段地址->(DS ),TABLE 的偏移地址->(BX)Processing math: 100%MOV DX,[BX]实际中LEA⽤的⽐较多。
标志传送指令-LAHF、SAHF指令LAHF(load AH register from flags)可以将PSW寄存器中的低8位传送到AH中,指令SAHF(store AH register from flags)可以将AH 的内容传送到PSW寄存器中的低8位。
8086指令

8086指令1.数据传送指令
(1)通用传送指令
(2)累加器专用传送指令
(3)地址传送指令
2.算术运算指令
(2)减法指令
(5)符号扩展指令
(6)十进制调整指令
3.逻辑运算和移位指令(1)逻辑运算指令
(2)移位指令
注:OPR不能为立即数和段寄存器,若CNT大于1,应先将CNT存入CL寄存器中,移位指令中CNT写为CL即可。
4.串操作指令
(1)重复前缀指令
(2)串传送指令
(3)串比较指令
5.控制转移指令
(1)无条件转移指令
(2)条件转移指令
①简单条件转移指令(根据某一标志位的值决定是否有转移,测试的标志位有S、Z、C、P、O 5个,每个标志位可能取“0”和“1”,共10条)
②无符号数比较条件转移指令
③有符号数比较条件转移指令
④测试CX的值为0则转移的指令
(3)子程序调用和返回指令
(4)循环控制指令
(5)中断指令
6.处理机控制指令
(2)其他处理机控制指令
7.伪指令
(1)数据定义伪指令
(2)分析运算符
(3)属性操作符
(4)符号定义指令
(5)地址计数器与对准伪操作
(6)宏与过程(子程序)的定义和调用。
微机原理与接口技术 8086的寻址方式和指令系统[3-5]
![微机原理与接口技术 8086的寻址方式和指令系统[3-5]](https://img.taocdn.com/s3/m/3690c13c172ded630a1cb62a.png)
5
§3-3 控制转移指令
【8086的指令系统】
两种提供地址的方式:
直接转移
指令码中直接给出转移的目的地址,目的操作数用一个标号来表示,它 又可分为段内直接转移和段间直接转移。
间接转移
目的地址包含在某个16位寄存器或存储单元中,CPU根据寄存器或存 储器寻址方式,间接地求出转移地址。这种转移类型又可分为段内间接 转移和段间间接转移。
12
§3-3 控制转移指令
【8086的指令系统】
【例】 JMP BX
解: 若该指令执行前BX=4500H; 则指令执行时,将当前IP修改成4500H; 程序转向段内偏移地址为4500H处执行。
【例】 JMP WORD PTR 5[BX]
解:设指令执行前,DS=2000H,BX=100H,(20105H)=04F0H; 则指令执行后,IP=(20000H+100H+5H)=(20105H)=04F0H; 转到代码段内偏移地址为04F0H处执行。
指令格式:JMP 目的 指令功能:程序无条件地转移到指定的目的地址去执行。
两种转移类型: 段内转移或近(NEAR)转移 转移指令的目的地址和JMP指令在同一代码段中,转移时,仅改变IP 寄存器的内容,段地址CS的值不变。 段间转移,又称为远(FAR)转移 转移指令的目的地址和JMP指令不在同一段中,转移时,CS和IP的 值都要改变,程序转到另一代码段去执行。
JMP NEAR PTR 标号 (或:JMP 标号)
特点:
▲目的操作数均用标号表示;
▲程序转向的有效地址=当前IP寄存器的内容+8/16位位移量(DISP)。 16位:近转移,范围在-32768~+32767个字节之间; 8位:短转移,范围在-128~+127个字节之间;
微机原理课件第三章8086寻址方式和指令系统

支持外部中断和内部中断,用于处理各种事 件和异常。
通过寄存器的内容来访问数据。
寄存器相对寻址
通过寄存器的内容加上偏移量来计算内存地 址,然后访问数据。
指令格式
操作码和操作数
指令由操作码和操作数组成。
操作数的个数
指令前缀
指令可以有不同数量的操作数, 包括零个、一个、两个或更多。
指令前缀用于改变指令的行为 或影响指令的执行方式。
指令系统
1
数据传送指令
微机原理课件第三章8086 寻址方式和指令系统
本章将介绍8086微处理器的寻址方式和指令系统。内容包括不同的寻址方式, 指令格式,指令系统,指令执行周期,以及8086处理器的特点和功能。
寻址方式
直接寻址
通过直接给出内存地址来访问数据。
寄存器间接寻址
通过寄存器的内容所指向的内存地址来访问 数据。
寄存器直接寻址
从内存中获取指令。 执行指令中的操作。 将结果存储回内存。 处理器响应中断请求。
8086处理器
8086处理器的特点
具有16位的数据总线和地址总线,支持最多 1MB的内存。
8086处理器的工作模式
包括实模式和保护模式,可以用于运行不同 类型的软件。
8086处理器的寄存器
包括通用寄存器、段寄存器和指令指针寄存 器。
用于在寄存器和内存之间传输数据。算,如加法、减法、乘法、除法和位操作。
3
逻辑指令
执行逻辑操作,如与、或、非和异或。
4
比较指令
用于比较两个值的大小,并根据比较结果设置标志位。
5
转移指令
用于无条件或有条件地改变指令执行的顺序。
指令执行周期
取指令周期 执行指令周期 存储指令周期 中断响应周期
第3章 8086指令系统2-数据传送指令

第3章 8086指令系统
3、地址传送指令
存储器 (DS) BUFFER 3000H:1000H 31001H ... 40H 00H ...
LEA指令说明:
(1) LEA 指令与MOV 的区别 ;(BX)=1000H LEA BX , BUFFER ; (BX)=0040H MOV BX , BUFFER
4
源
第3章 8086指令系统
1、通用传送指令
对MOV指令的说明: 1、通用传送指令可以传送16位数据,也可以传送 8位数据,取决于寄存器和立即数的形式。 2、不能在两个内存单元之间直接传送数据 3、CS和IP不能做为目的操作数,但可以作为源操 作数。 4、不能将立即数直接传送给段寄存器。 5、段寄存器之间不能互相传送值。 6、通用传送指令都不影响标志位。 通用传送指令都不影响标志位
e.g. g :
LDS DI , [2130H]
将2130H, 2131H单元中内容作为偏移量(有效地址) 送给DI,2132H, 2133H单元中的内容作为段地址送 入DS中。
24
第3章 8086指令系统
3、地址传送指令
e.g.:
LDS DI , [0010H]
将当前DS段中0010H, 0010H 0011H两 个单元中内容作为偏移量送入DI, 0012H, 0013H两个单元中内容作 为段地址送入DS。 结果为: 结果为 (SI)=0180H (DS)=2000H
IN IN
AL,DX AX,DX AX DX
OUT DX,AL OUT DX,AX
注意 端口号≥256时 只能使用间接输入/输出指令。 注意:端口号≥256时,只能 输出指令 18
第3章 8086指令系统
第5讲 寻址方式与数据传送指令

§3-1
8086的寻址方式 8086的寻址方式 ——立即寻址方式
例 MOV CX,2A50H CX, 将立即数2A50H送到CX寄存 解:将立即数2A50H送到CX寄存 器中。 (又例: MOV CL,20H) CL,20H) 4.注意 ①立即数可以送到寄存器、一个存 储单元(8 储单元(8位)、两个连续的存储单 元(16位)中去; 元(16位)中去; ②立即数只能作源操作数,不能作目的操作数; 立即数只能作源操作数 只能作源操作数,不能作目的操作数; ③以A~F打头的数字出现在指令中时,前面必须加数字0。以 打头的数字出现在指令中时,前面必须加数字0 免与其它符号相混淆(如:0AF22H)。 免与其它符号相混淆(如:0AF22H)。
15
§3-1
8086的寻址方式 8086的寻址方式 ——寄存器相对寻址方式
例 MOV BX,COUNT [SI] ;或 MOV BX,[COUNT+SI] BX, BX,[COUNT+ 解:设DS=3000H,SI=2000H,位移量COUNT=4000H, :设DS=3000H,SI=2000H,位移量COUNT=4000H,
第三章
8086指令系统 8086指令系统
内 容 提 要
8086的寻址方式 8086的寻址方式 8086的指令系8086的寻址方式 8086的寻址方式 ——概述
§3-1 8086的寻址方式 8086的寻址方式
计算机的指令 计算机的指令包括:操作码 + 操作数 指令包括:操作码 ↓ ↓
▲关于默认段: 关于默认段: 指定寄存器BX、SI或DI,默认操作数存放在数据段中; 指定寄存器BX、SI或DI,默认操作数存放在数据段中; (DS:BX,SI,DI) DS:BX,SI,DI) 指定寄存器BP,默认操作数存放在堆栈段中;(SS:BP) 指定寄存器BP,默认操作数存放在堆栈段中;(SS:BP)
8086汇编指令手册

8086汇编指令手册一、数据传输指令它们在存贮器和寄存器、寄存器和输入输出端口之间传送数据.1. 通用数据传送指令.MOV 传送字或字节.MOVSX 先符号扩展,再传送.MOVZX 先零扩展,再传送.PUSH 把字压入堆栈.POP 把字弹出堆栈.PUSHA 把AX,CX,DX,BX,SP,BP,SI,DI依次压入堆栈.POPA 把DI,SI,BP,SP,BX,DX,CX,AX依次弹出堆栈.PUSHAD 把EAX,ECX,EDX,EBX,ESP,EBP,ESI,EDI依次压入堆栈.POPAD 把EDI,ESI,EBP,ESP,EBX,EDX,ECX,EAX依次弹出堆栈.BSWAP 交换32位寄存器里字节的顺序XCHG 交换字或字节.( 至少有一个操作数为寄存器,段寄存器不可作为操作数)CMPXCHG 比较并交换操作数.( 第二个操作数必须为累加器AL/AX/EAX )XADD 先交换再累加.( 结果在第一个操作数里)XLAT 字节查表转换.—— BX 指向一张256 字节的表的起点, AL 为表的索引值(0-255,即0-FFH); 返回AL 为查表结果. ( [BX+AL]->AL )2. 输入输出端口传送指令.IN I/O端口输入. ( 语法: IN 累加器, {端口号│DX} )OUT I/O端口输出. ( 语法: OUT {端口号│DX},累加器)输入输出端口由立即方式指定时, 其范围是0-255; 由寄存器DX 指定时,其范围是0-65535.3. 目的地址传送指令.LEA 装入有效地址.例: LEA DX,string ;把偏移地址存到DX.LDS 传送目标指针,把指针内容装入DS.例: LDS SI,string ;把段地址:偏移地址存到DS:SI.LES 传送目标指针,把指针内容装入ES.例: LES DI,string ;把段地址:偏移地址存到ES:DI.LFS 传送目标指针,把指针内容装入FS.例: LFS DI,string ;把段地址:偏移地址存到FS:DI.LGS 传送目标指针,把指针内容装入GS.例: LGS DI,string ;把段地址:偏移地址存到GS:DI.LSS 传送目标指针,把指针内容装入SS.例: LSS DI,string ;把段地址:偏移地址存到SS:DI.4. 标志传送指令.LAHF 标志寄存器传送,把标志装入AH.SAHF 标志寄存器传送,把AH内容装入标志寄存器.PUSHF 标志入栈.POPF 标志出栈.PUSHD 32位标志入栈.POPD 32位标志出栈.二、算术运算指令———————————————————————————————————————ADD 加法.ADC 带进位加法.INC 加1.AAA 加法的ASCII码调整.DAA 加法的十进制调整.SUB 减法.SBB 带借位减法.DEC 减1.NEC 求反(以0 减之).CMP 比较.(两操作数作减法,仅修改标志位,不回送结果).AAS 减法的ASCII码调整.DAS 减法的十进制调整.MUL 无符号乘法.IMUL 整数乘法.以上两条,结果回送AH和AL(字节运算),或DX和AX(字运算),AAM 乘法的ASCII码调整.DIV 无符号除法.IDIV 整数除法.以上两条,结果回送:商回送AL,余数回送AH, (字节运算);或商回送AX,余数回送DX, (字运算).AAD 除法的ASCII码调整.CBW 字节转换为字. (把AL中字节的符号扩展到AH中去)CWD 字转换为双字. (把AX中的字的符号扩展到DX中去)CWDE 字转换为双字. (把AX中的字符号扩展到EAX中去)CDQ 双字扩展. (把EAX中的字的符号扩展到EDX中去)三、逻辑运算指令———————————————————————————————————————AND 与运算.OR 或运算.XOR 异或运算.NOT 取反.TEST 测试.(两操作数作与运算,仅修改标志位,不回送结果).SHL 逻辑左移.SAL 算术左移.(=SHL)SHR 逻辑右移.SAR 算术右移.(=SHR)ROL 循环左移.ROR 循环右移.RCL 通过进位的循环左移.RCR 通过进位的循环右移.以上八种移位指令,其移位次数可达255次.移位一次时, 可直接用操作码. 如SHL AX,1.移位>1次时, 则由寄存器CL给出移位次数.如MOV CL,04SHL AX,CL四、串指令———————————————————————————————————————DS:SI 源串段寄存器:源串变址.ES:DI 目标串段寄存器:目标串变址.CX 重复次数计数器.AL/AX 扫描值.D标志0表示重复操作中SI和DI应自动增量; 1表示应自动减量.Z标志用来控制扫描或比较操作的结束.MOVS 串传送.( MOVSB 传送字符. MOVSW 传送字. MOVSD 传送双字. )CMPS 串比较.( CMPSB 比较字符. CMPSW 比较字. )SCAS 串扫描.把AL或AX的内容与目标串作比较,比较结果反映在标志位.LODS 装入串.把源串中的元素(字或字节)逐一装入AL或AX中.( LODSB 传送字符. LODSW 传送字. LODSD传送双字. )STOS 保存串.是LODS的逆过程.REP 当CX/ECX<>0时重复.REPE/REPZ 当ZF=1或比较结果相等,且CX/ECX<>0时重复.REPNE/REPNZ 当ZF=0或比较结果不相等,且CX/ECX<>0时重复.REPC 当CF=1且CX/ECX<>0时重复.REPNC 当CF=0且CX/ECX<>0时重复.五、程序转移指令———————————————————————————————————————1>无条件转移指令(长转移)JMP 无条件转移指令CALL 过程调用RET/RETF过程返回.2>条件转移指令(短转移,-128到+127的距离内)( 当且仅当(SF XOR OF)=1时,OP1<OP2 )JA/JNBE 不小于或不等于时转移.JAE/JNB 大于或等于转移.JB/JNAE 小于转移.JBE/JNA 小于或等于转移.以上四条,测试无符号整数运算的结果(标志C和Z).JG/JNLE 大于转移.JGE/JNL 大于或等于转移.JL/JNGE 小于转移.JLE/JNG 小于或等于转移.以上四条,测试带符号整数运算的结果(标志S,O和Z).JE/JZ 等于转移.JNE/JNZ 不等于时转移.JC 有进位时转移.JNC 无进位时转移.JNO 不溢出时转移.JNP/JPO 奇偶性为奇数时转移.JNS 符号位为"0" 时转移.JO 溢出转移.JP/JPE 奇偶性为偶数时转移.JS 符号位为"1" 时转移.3>循环控制指令(短转移)LOOP CX不为零时循环.LOOPE/LOOPZ CX不为零且标志Z=1时循环.LOOPNE/LOOPNZ CX不为零且标志Z=0时循环.JCXZ CX为零时转移.JECXZ ECX为零时转移.4>中断指令INT 中断指令INTO 溢出中断IRET 中断返回5>处理器控制指令HLT 处理器暂停, 直到出现中断或复位信号才继续.WAIT 当芯片引线TEST为高电平时使CPU进入等待状态.ESC 转换到外处理器.LOCK 封锁总线.NOP 空操作.STC 置进位标志位.CLC 清进位标志位.CMC 进位标志取反.STD 置方向标志位.CLD 清方向标志位.STI 置中断允许位.CLI 清中断允许位.六、伪指令———————————————————————————————————————DW 定义字(2字节).PROC 定义过程.ENDP 过程结束.SEGMENT 定义段.ASSUME 建立段寄存器寻址.ENDS 段结束.END 程序结束.。
第三章8086的寻址方式和指令系统

115-140 21
指令操作例:MOV AX,[SI]
若 (DS)=6000H, (SI)=1200H, (61200H)=44H, (61201H)=33H
则指令执行后,(AX)=3344H。 DS 6000 SI 1200
存储器
60000 +) 1200
若(DS)=6000H, (BX)=1000H, DATA=2A00H, (63A00H)=66H, (63A01H)=55H
则物理地址 = 60000H + 1000H + 2A00H = 63A00H
指令执行后:(AX)=5566H
(见下页图示)
115-140 25
MOV AX,DATA[BX]
115-140
35
小结
指令由( 操作码 )和( 操作数 )构成 如何取得操作数——称为(寻址方式)
115-140
36
立即寻址 直接寻址 寄存器寻址 寻址方式可分为
寄存器间接寻址
寄存器相对寻址 基址-变址寻址 基址-变址相对寻址
115-140
37
寄存器间接、寄存器相对、基址变址、相对 基址变址四种寻址方式的比较:
115-140
28
指令操作例:MOV AX,[BX][SI]
假定:(DS)=8000H, (BX)=2000H, SI=1000H 则物理地址 = 80000H + 2000H + 1000H = 83000H 指令执行后: (AL)=[83000H] (AH)=[83001H] .
DS BX + SI
操作数的有效地址由一个基址寄存器和一个变址 寄存器的内容之和,两个寄存器均由指令指定,称 为基址-变址寻址。
第3章8086指令系统(上)

或
(SS)×16+(BP)
【例3-4】 已知:(DS)=3000H,(BX)=1100H,(31100H)= 12H,(31101H)=34H,执行指令:MOV AX, [BX]。 操作数的物理地址为:(DS)×16+(BX)=3000H×16+ 1100H=31100H,指令执行后(AX)=3412H。
本章内容提要
3.1 8086指令系统入门 3.2 数据据传送类指令 3.3 算术运算与逻辑运算类指令
3.1 8086指令系统入门
3.1.1 指令分类
数据传送类指令 算术运算类指令
字符串操作指令 处理器控制类指令
逻辑运算类指令
程序控制类指令
3.1.2 指令格式
操作码 [目的操作数][,源操作数]
3.1.3 操作数寻址
ADD SI, 2 LOOP LOP MOV BX, SI MOV DI, BX MOV 1000[DI], AX
;将累加和存入1000+(DI)指 ;向的内存单元
3.2 数据传送类指令
3.2.1 传送指令
格式:MOV DST, SRC 功能:将源操作数传送给目的操作数。 ① ② ③ ④ 在CPU内部寄存器之间进行数据传送 MOV AX,BX 在CPU内部寄存器与存储器之间进行数据传送 MOV AX,[1000H] 将立即数传送给寄存器 MOV AX,1234H 将立即数传送给存储单元 MOV [1000H],1000H
【例3-15】 已知:(DS)=3000H,(32000H)=12H,(32001H)= 34H,(32002H)=56H,(32003H)=78H。 执行指令:LDS SI, [2000H]。
微机原理第三章 8086寻址和指令系统

4、查表转换指令 XLAT 指定表首地址→BX;表元素号→AL 查表结果((BX)+(AL)) →AL 例:若十进制数字0~9 的 LED七段显示码对照表已存放在内存中, 表格的首地址为TABLE,用 XLAT 指令求数字5的七段显示码 值程序如下: TABLE DB 40H, 79H, 24H, 30H, 19H ; 建立七段显示码表格 DB 12H, 02H, 78H, 00H, 18H OFFSET是运算符 MOV AL,5 ; AL 5 MOV BX,OFFSET TABLE ; BX 表格首地址 XLAT ; AL 12H
AAA
非压缩十进制加法BCD调整(8bit) CF、OF、PF、SF、ZF
8bit(0×) 加 法 后 , AL 中 的 非 压 缩 BCD 码 → AH(0+ 拾 位)AL(0+个位)。 例: MOV BL,09H MOV AL,05H ADD AL,BL AAA ;非压缩BCD码 ; ;(AX)=0104H 09 05 (AL)=0 EH AAA调整 (AX)=0 1 0 4H
指令
基址寄存器
disp
&
EA 内存 操作数
基址 (BX) (SI) (DI) (BP)
EA=
+disp 段寄存器DS(即操作数在数据段)
+disp 段寄存器SS (即操作数在堆栈段)
指令
基址寄存器
disp
&
EA
内存 操作数
基址
EA=
(BX) (SI) (DI) (BP)
+disp 段寄存器DS(即操作数在数据段) +disp 段寄存器SS (即操作数在堆栈段)
第三章 8086寻址和指令系统
8086指令操作数的寻址方式实验总结

8086指令操作数的寻址方式实验总结在计算机体系结构的学习中,8086指令操作数的寻址方式是一个非常重要的概念。
通过对这一概念的深入了解和实验操作,我们可以更好地理解计算机程序的执行过程,深化对计算机底层原理的理解。
在本文中,我将结合理论知识和实验结果,对8086指令操作数的寻址方式进行全面评估和总结。
1. 立即寻址立即寻址是一种直接将操作数的值嵌入指令中的寻址方式。
在8086指令集中,我们可以使用MOV指令将一个立即数传送到目的操作数中。
MOV AX, 1234h指令将立即数1234h传送到寄存器AX中。
通过实验操作,我发现立即寻址方式适用于需要直接传送常数值的情况,能够提高程序执行的效率。
2. 寄存器寻址寄存器寻址是一种通过寄存器来寻址操作数的方式。
8086微处理器具有通用寄存器AX、BX、CX、DX等,可以直接操作这些寄存器中的数据。
MOV AX, BX指令将寄存器BX中的数据传送到寄存器AX中。
在实验过程中,我发现寄存器寻址方式是一种高效的操作数寻址方式,能够提高程序的执行速度。
3. 直接寻址直接寻址是一种通过内存位置区域来寻址操作数的方式。
在8086指令集中,我们可以使用MOV指令将内存中的数据传送到寄存器中,或将寄存器中的数据传送到内存中。
MOV AX, [1234h]指令将存储在内存位置区域1234h处的数据传送到寄存器AX中。
实验结果表明,直接寻址方式可以灵活地对内存中的数据进行操作,适用于大规模数据的传送和处理。
4. 寄存器间接寻址寄存器间接寻址是一种通过寄存器中存储的位置区域来寻址操作数的方式。
在8086指令集中,我们可以使用指令将寄存器中存储的内存位置区域作为操作数进行操作。
MOV BX, [SI]指令将寄存器SI中存储的内存位置区域处的数据传送到寄存器BX中。
在实验中,我发现寄存器间接寻址方式适用于需要对内存中多个数据进行操作的情况,能够提高程序的效率和灵活性。
5. 立即偏移寻址立即偏移寻址是一种通过基址寄存器和偏移量来寻址操作数的方式。
8086寻址方式及举例

8086寻址方式及举例8086寻址方式指的是在Intel 8086处理器中进行内存访问的方式。
8086寻址方式主要有以下几种:1. 直接寻址(Direct addressing):给出地址直接访问内存中的数据。
2. 寄存器寻址(Register addressing):使用寄存器中存放的地址进行内存访问。
3. 寄存器间接寻址(Register indirect addressing):使用寄存器中存放的地址作为内存地址的间接寻址方式。
4. 寄存器相对寻址(Register relative addressing):使用一个寄存器中存放的地址作为起始点,加上一个常数作为偏移量。
5. 基址加变址寻址(Base + index addressing):使用基址寄存器和变址寄存器相加得到内存地址。
6. 相对基址加变址寻址(Base + index + offset addressing):使用基址寄存器、变址寄存器和一个常数作为偏移量相加得到内存地址。
举例:1. 直接寻址: MOV AX, [1000H] 表示将内存地址为1000H的数据复制到AX寄存器中。
2. 寄存器寻址: MOV AX, BX 表示将BX寄存器中的数据复制到AX寄存器中。
3. 寄存器间接寻址: MOV AX, [BX] 表示将内存地址为BX寄存器中的数据所指向的内存单元中的数据复制到AX寄存器中。
4. 寄存器相对寻址: MOV AX, [BX+2] 表示将内存地址为BX寄存器中的数据加上2所得到的地址中的数据复制到AX寄存器中。
5. 基址加变址寻址: MOV AX, [BX+SI] 表示将基址寄存器BX和变址寄存器SI中的数据相加得到的地址中的数据复制到AX寄存器中。
6. 相对基址加变址寻址: MOV AX, [BX+SI+2] 表示将基址寄存器BX和变址寄存器SI中的数据相加得到的地址再加上2所得到的地址中的数据复制到AX寄存器中。
8086七种寻址方式

8086/8088七种寻址方式(一)8086/8088寄存器组(二)8086/8088寻址方式(1)立即寻址方式操作数就包含在指令中,它作为指令的一部分,跟在操作码后存放在代码段。
这种操作数称为立即数,立即数可以是8位的也可以是16位的,如果立即数是16位的按“高高低低”的原则。
例如指令:MOV AX,1234H的存储和执行情况如下图:图中指令存放在代码段中,OP表示该指令的操作码部分再例如:MOV AL,5 则指令执行行,(AL)=05HMOV BX,3064H 则指令执行后,(BX)=3064H(2)寄存器寻址方式操作数在CPU内部的寄存器中,指令指定寄存器号。
对于16位操作数,寄存器可以是:AX,BX,CX,DX,SI,DI,SP,和BP等:对于8位数,寄存器可以是:AL,AH,BL,BH,CL,CH,DL,DH。
这种寻址方式由于操作数就在寄存器中,不需要访问存储器来取得操作数,因而可以取得较高的运算速度。
例如:MOV AX,BX如指令执行前(AX)=3064H,(BX)=1234H;则指令执行后,(AX)=1234H,(BX)保持不变例如:MOV SI,AXMOV AL,DH(3)直接寻址方式操作数在寄存器中,指令直接包含有操作数的有效地址(偏移地址)。
操作数一般存放在数据段所以操作数的地址由DS加上指令中直接给出的16位偏移得到。
如果采用段超越前缀,则操作数也可含在数据段外的其他段中。
如下图所示:在汇编语言指令中,可以用符叼地址代替数值地址。
如:MOV AX,VALUE此时VALUE为存放操作数单元的符号地址。
如写成:MOV AX,[VALUE]也是可以的,两者是相等的。
如VALUE在附加段中,则应指定段超越前缀如下:MOV AX,ES:VALUE或MOV AX,ES:[VALUE]直接寻址方式常用于处理单个存储器变量的情况。
它可实现在64K字节的段内寻找操作数。
直接寻址的操作数通常是程序使用的变量。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
传送指令的用法及8086的寻址方法
传送指令可以将数据从一个寄存器、内存或端口传送到另一个寄存器、内存或端口。
根据操作数的不同,传送指令可以分为两类:立即传送指令和直接传送指令。
立即传送指令:指令中给出的数据是立即数,直接传送到指定的操作数寄存器、内存或端口。
例如:MOV AX, 1234H;将立即数1234H传送到AX寄存器中。
直接传送指令:指令中给出的是一个地址,指令执行时会将该地址中的数据传送到指定的操作数寄存器、内存或端口。
例如:MOV AX, [BX];将BX寄存器中的偏移地址所指向的字存储单元中的数据传送到AX寄存器中。
8086的寻址方法:
8086采用段地址和偏移地址的方式寻址。
在8086CPU中,每个地址由两个部分组成:段地址和偏移地址。
段地址乘以16再加上偏移地址,就是实际的物理地址。
通过将段地址和偏移地址通过两个8位的寄存器组合成16位的地址,来访问任意地址空间。
8086的寻址方式可以分为以下几种:
1. 直接寻址:使用一个寄存器或一个立即数来指定一个地址,例如:MOV AX, [BX]。
2. 寄存器间接寻址:使用一个寄存器中存储的地址来访问内存,例如:MOV AX, [SI]。
3. 基址寻址:使用一个基地址加上一个偏移量的方式计算得到一个地址,例如:MOV AX, [BX+SI]。
4. 变址寻址:使用一个变址寄存器中的值来做地址的计算偏移,例如:MOV AX, [DI+1234H]。
5. 相对寻址:使用一个偏移量来计算相对于当前指令地址的距离,例如:JMP SHORT LABEL。
以上这些寻址方式可以对任意的内存地址进行访问,使得8086具有了很好的灵活性和通用性。