实验2-80X86寻址方式和指令指令系统和寻址方式

合集下载

80X86寻址方式和指令系统

80X86寻址方式和指令系统
P52表2.1 段寄存器使用的一些基本约定 存储器操作数的偏移地址(也称有效地址)可以通过不同
的寻址方式由指令给出。 例如,若(BX)=2000H, (SI)=0A00H, (DI)=2A00H,则以下指令 的结果是一样的:
MOV AL, [2A00H] MOV AL, [BX+0A00H] MOV AL, [BX][SI] MOV AL, [DI]
MOV AX , [2A00H] MOV DX , ES: [2A00H] MOV SI , TABLE_PTR
80X86寻址方式和指令系统
第3章 80X86寻址方式和指令系统
执行指令:A10231 MOV AX,[3102H] 后
AL (3102H) , AH (3103H) 如果(DS)=2000H, (23012H) = CDH, (23013H) = ABH
EA =
(BX) + (SI) + 8位
(BP)
(DI)
16位
例如:
MOV AX,BASE [SI] [BX] MOV AX,[BX+BASE] [SI] MOV AX,[BX+SI+BASE] MOV AX,[BX] BASE [SI] MOV AX,[BX+SI] BASE
“相对的基址变址寻址”方式主要用于对二维数组的访问。
错误例:
× MOV 2A00H, AX ; 错误!
80X86寻址方式和指令系统
第3章 80X86寻址方式和指令系统
例如: B80231 MOV AX,3102H 执行后,(AH) = 31H,(AL) = 02H
立即寻址指令在 存储器中的存放 形式
AX AH AL
存储器

80X86的指令系统和寻址方式

80X86的指令系统和寻址方式

返回
2、寄存器寻址方式
在这种寻址方式中,指令的操作数存放在寄 存器中,该寄存器号作为指令代码的一部分 存放在代码段中。 例 2-2 MOV EAX,EBX
执行前:(EAX)=3366H,(EBX) = 1210H 执行后:(EAX) = 1210H
返回
3、直接寻址
在直接寻址方式中,指令中直接提供源操作数 的偏移地址,它作为指令代码的一部分存放在 代码段中。 例2-3 MOV AX,DS:[00404000h] 执行情况如图2-4所示。执行后:(AX) =0FF20H。
返回
7、相对基址变址寻址方式
在该寻址方式下,有效地址EA等于基址寄 存器BR的值加变址寄存器IR的值加位移量X 的和,即EA = X + [BR] + [IR]。 例 2.1.7 MOVAX,Disp[EBX][EDI] (或写为MOV AX,Disp[EBX+EDI]和 MOV AX,[Disp+EBX+EDI])
返回
8、比例变址寻址方式
在这种寻址方式中,有效地址EA等于位移量 X加上变址寄存器IR的内容与比例因子K乘积 之和,即EA = X + [IR * K]。 例如,有一个元素大小4字节的数组Arr,现 要在EAX寄存器中转载数组中的第2个元素, 可以使用指令MOV EAX,Adrs[ESI*4], 其中(ESI)=2,偏移量Adrs的值等于数组 Arr的基地址。其执行情况如图2.1.6所示。
返回
1、立即数寻址
在这种寻址的方式中,操作数是一个立即数, 对立即数的寻址称为立即寻址。 例 2-1 MOV AX,1234H
执行前:(AX) = 1412H 执行后:(AX) = 1234H,执行过程如图2-3所 示。

汇编语言:第3章80x86的指令系统和寻址方式II

汇编语言:第3章80x86的指令系统和寻址方式II

例:循环指令的应用-1
• 判别(BX)的二进制表示中有多少个1. • 分析:
– 如何判别一位上的1?有几种方法? – 如何判别每一位上的1?
例:循环指令的应用-2
• 如何将(BX)的二进制表示中用十六进 制表示并输出?
3.3.4串处理指令
MOVS:串传送 • SCAS:串扫描 • STOS:存入串 • INS:串输入
与之配合使用的前缀: REP重复 REPE/REPZ 相等/为零则重复
CMPS:串比较 LODS:从串取 OUTS:串输出
REPNE/REPNZ
不相等/不为零则重复
与REP相配的MOVS、STOS和LODS指令
• REP MOVS、 REP LODS、 REP STOS等 • 执行的操作: REP重复串操作直到(CX)=0为止 1)若(CX)=0,则退出REP,否则往下执行。 2)(CX)←(CX)-1 3)执行其后的串指令 4)重复1)~3) 注:为方便起见,CX表示一般的计数寄存器
串操作
• 批量数据处理 • 串
– 一系列存放在存储器中的字或字节数据 – 最大串长64KB
• 串元素
– 串中的成员 – 每种串操作指令只对串中的元素作同一种操 作
串指令
串指令的操作规则
• 串指令的操作
– 源串位于DS段内(可以使用段前缀),偏移量 由SI给出 – 目的串位于ES段内(不允许使用段前缀),偏移 量由DI给出 – 每次执行后修正SI/DI,增减方向由DF确定 (DF=1:减量;DF=0:增量)。(STD/CLD) – 串的长度(字节/字数)存放在CX中 – 可以在存储器之间操作
逻辑运算指令举例
• MOV AL, 0BFH • AND AL, 0FCH ;结果(AL)=0BCH,屏

第3章 80X86的指令系统和寻址方式

第3章 80X86的指令系统和寻址方式

通用寄存器 ;
(3)变址:其值存放在变址寄存器中。SI、DI 、除ESP外的 32位通用寄存器 ; (4)比例因子:是386及后继机型中新增寻址方式中的术语。 其值可为1、2、4、8。
寻址方式

立即数寻址 寄存器寻址 存储器寻址
直接寻址 寄存器间接寻址 寄存器相对寻址 基址变址寻址 相对基址变址寻址
练习
MOV AX, ARRAY[4]
MOV AX, [BX] MOV AX, [BX+2] ;直接寻址,偏移地址= ARRAY+4 ;寄存器间接寻址
;寄存器相对寻址 MOV AX, ARRAY [BX] ;寄存器相对寻址
MOV AX, [BX+SI] MOV AX, [BX+DI+2]
;基址(BX)变址(SI)寻址 ;相对基址变址寻址
;(BX)←1234H ;(AX)←(BX)
4)寄存器间接寻址方式
有效地址包含在基址寄存器或变址寄存器中;
寄存器可以是BX、BP、SI、DI之一。
(1) 以BX、SI、DI进行寄存器间接寻址,隐含的段
寄存器为数据段寄存器DS 。
MOV AX, [BX]

;物理地址=DS×16+BX ;物理地址=DS×16+SI ;物理地址=DS×16+DI
2)立即数(常数)到存储单元的数据传输
例 3.18 MOV MEM_BYTE, 20H ;将立即数20H送到MEM_BYTE存储单元 MOV DS:[0005H], 4500H ;立即数4500H送到DS:0005H的存储单元中
3)立即数到通用寄存器的数据传输 例 3.19 MOV AL, 20H MOV SP, 2000H ;将立即数20H送到AL寄存器 ;将立即数2000H送入SP寄存器

80x86寻址方式和指令系统

80x86寻址方式和指令系统

80x86寻址方式和指令系统第三章 80x86寻址方式和指令系统3.1 80x86 寻址方式3.1.1数据寻址方式通常指令分为操作码和操作数两部分,表示指令中操作数所在的方法称数据寻址方式。

一、立即寻址操作数包含在指令中,作为指令的一部分,存放在代码段中。

操作数(又称立即数)存放形式为,数据高位存放在地址高位存储单元,数据低位存放在地址低位存储单元。

例3.1·MODEL tiny;选择单个段模式地址·586;586实方式CS:EA 机器码·CODE;代码段开始·STARTUP;程序开始1D24:0100 B83412 MOV AX,1234H ;AX←1234H1D24:0103 66BB00000000 MOV EBX,0;EBX←01D24:0109 B155 MOV CL,55H;CL←55H·EXIT;返回DOSEND;文件结束例3.1中指令MOV AX,1234H,其源操作数为立即数1234H,目的操作数为寄存器AX。

存放该指令的地址为1D24:0100,执行该指令,从代码段取出立即数1234H送寄存器AX中。

图3.1为立即寻址过程示意图。

../../../flash/t3.1.swf图3.1 立即寻址过程示意图二、寄存器寻址操作数在寄存器中,操作数可以是8位、16位或32位通用寄存器、16位段寄存器。

例3.2·MODEL TINY·586·CODE地址机器码·STARTUP1D24:0100 8BC3 MOV AX,BX;AX←BX1D24:0102 8ACA MOV CL,DL;CL←DL1D24:0104 668BF7 MOV ESI,EDI;ESI←EDI·EXITEND上例中指令MOV AX,BX,其源操作数为BX,目的操作数为AX。

存放该指令的地址为1D24:0100,执行该指令,将BX内容复制到AX中。

第三章 80x86的寻址方式与指令系统 微机基础与接口技术 教学课件

第三章   80x86的寻址方式与指令系统 微机基础与接口技术 教学课件
操作数的地址由基址寄存器和变址寄存器提供, 二者的和形成操作数的偏移地址。
MOV AX,[BX][SI]
2020/6/16
七、相对基址加变址寻址方式 MOV AX, TABLE[BX][SI]
3.2
2020/6/16
3.3 80x86的指令系统
包括数据传送、算术运算、逻辑运算、程序 控制、处理器控制、串操作六种类型的指令 。 *共115个助记符,91种操作, 功能上能够满足基本编程的需要。
JMP EXIT
;跳转到EXIT
BIG: JE ZERO ;=0转ZERO
MOV AL,01H ;大于0,则赋值1
JMP EXIT
ZERO:MOV AL,0 ;等于0,则赋值0
EXIT:MOV RES,AL ;把结果存入RES
2020/6/16
3. 循环指令LOOP
3.3
LOOP指令借助默认的CX循环计数器, 可以在 -128---127范围内实现程序有规律的循环, 类似指令还有: LOOPZ/LOOPE、LOOPNZ/LOOPNE。
默认DS:SI→ES/DS:DI,地址变化方向由DF决定: DF=0/1,地址增大/减小; 并且结合重复前缀REP/REPE/REPNE, 实现重复传送,重复次数必须由CX指定。
2020/6/16
LEA SI,SRC LEA DI,DST MOV BX,100 CLD L: MOVSB DEC BX JNZ L
ESC 存储器寻址方式;为协处理器提供操作码,数据总线把存储单元内容 送出并开始协处理器指令的执行;当遇到协处理器助记指 令码,汇编程序把它转换为ESC指令的机器码,表示此处 为协处理器的操作码。
2020/6/16
六、字符串操作指令

80X86的指令系统和寻址方式

80X86的指令系统和寻址方式

第三章80X86的指令系统和寻址方式1、给定(BX)=637DH,(SI)=2A9BH,位移量D=7237H,试确定在以下各种寻址方式下的有效地址是什么答案:(1)立即寻址没有(2)直接寻址 7237H ;MOV AX,[7237H](3)使用BX的寄存器寻址没有 ;MOV AX,BX(4)使用BX的间接寻址 637DH ;MOV AX,[BX](5)使用BX的寄存器相对寻址 0D5B4H ;MOV AX,D[BX](6) 基址变址寻址 8E18H ;MOV AX,[BX][SI](7)相对基址变址 004FH ;MOV AX,D[BX][SI]2、根据下列要求,写出相应的汇编指令(1)把BX寄存器和DX寄存器的内容相加,结果存入DX寄存器中。

(2)用寄存器BX和SI基地址变址寻址方式把存储器中的一个字节与AL寄存器的内容相加,并把结果送到AL寄存器中。

(3)用寄存器BX和位移量0B2H的寄存器相对寻址方式把存储器中的一个字和(CX)相加,并把结果送回存储器中。

(4)用位移量为0524H的直接寻址方式把存储器中的一个字与数2A59H相加,并把结果送回该存储单元中。

(5)把数0B5H与(AL)相加,并把结果送回AL中。

答案:(1)ADD DX,BX(2)ADD AL,[BX][SI](3)ADD [BX][0B2H], CX(4)MOV AX,2A59HADD [0524H] ,AX(5)ADD AL ,0B5H3、写出把首地址为BLOCK的字数组的第6个字送回到DX寄存器的指令。

要求使用以下几种寻址方式:(1)寄存器间接寻址(2)寄存器相对寻址(3)基址变址寻址答案:(1)寄存器间接寻址MOV BX, OFFSET BLOCKADD BX, 0AHMOV DX ,[BX](2)寄存器相对寻址MOV SI,OAHMOV DX,[BLOCK][SI](3)基址变址寻址MOV BX ,BLOCKMOV SI,OAHMOV DX,[BX][SI]4、现有(DS)=2000H,(BX)=0100H,(SI)=0002H,(20100)=12H,(20101)=34H,(20102)=56H,(20103)=78H, (21200)=2AH,(20201)=4CH,(21202)=B7H,(21203)=65H,试说明下列各条指令执行完后,AX 寄存器的内容。

实验2-80X86寻址方式和指令指令系统和寻址方式

实验2-80X86寻址方式和指令指令系统和寻址方式

实验二80X86寻址方式和指令系统实验目的:通过实验掌握下列知识:1、DEBUG命令:G,N,W,L及Q。

2、8086系统中数据在内存中的存放方式和内存操作数的几种寻址方式。

3、8086指令:INC,DEC,LOOP,INT 3,INT 20H,及ADD、SUB等常用指令。

4、8086汇编语言伪操作:BYTE PTR,WORD PTR,DB5、求累加和程序和多字节加减法程序。

6、淘宝店号530213实验内容和步骤:一、内存操作数及各种寻址方式使用:内容:MOV AX,1234MOV [1000],AXMOV BX,1002MOV BYTE PTR[BX],20MOV DL,39INC BXMOV [BX],DLDEC DLMOV SI,3MOV [BX+SI],DLMOV [BX+SI+1],DL7、MOV WORD PTR[BX+SI+2],2846 淘宝店号530213步骤:1)用A命令键入上述程序,并用T命令逐条运行。

2)每运行一条有关内存操作数的指令,要用D命令检查并记录有关内存单元的内容并注明是什么寻址方式。

注意D命令显示结果中右边的ASCII字符及双字节数存放法。

思考:有关指令中BYTE PTR及WORD PTR伪操作不加行不行?试一试。

二、求累加和程序:程序:MOV BX,100MOV CX,10SUB AX,AXLOP: ADD AL,[BX]ADC AH,0INC BXJ: LOOP LOPINT 3步骤:要防止数据冲突,先用R命令将段寄存器改为不同值,例如DS=2000H8、1)用A命令将程序键入到100H开始的内存中,在键入时记下标号LOP和J 的实际地址,在键入LOOP指令时LOP用实际地址值代替。

淘宝店号5302132)用命令N AA将此程序命名为文件AA(文件名可任取)。

9、3)用R命令将BX:CX改为程序长度值(即最后一条指令后面的地址减去开始地址) 淘宝店号5302134)用命令W 100将此程序存到AA命名的磁盘文件中。

第三章-80X86的寻址方式和指令系统-2

第三章-80X86的寻址方式和指令系统-2
MOV AX, 2000 H MOV DS , AX
;错
;对
段寄存器之间的传送
MOV ES , DS ; 错
MOV AX , DS MOV ES , AX ;对
注意CS和IP的使用 CS和IP不能作为目标操作数,可以作为源操作数
例: MOV CS,AX ; 错
MOV AX,CS
MOV IP, AX
XLAT指令应用:
若把字符的扫描码转换成ASCII码; 或数字0~9转换成7段数码所需要的相应代码(字形码)等 就要用XLAT指令。
例:内存的数据段中有一张十六进制数字的ASCII码表。 首地址为:Hex_table ,欲查出表中第10个元素(‘A’)
执行指令序列:
MOV BX,OFFSET Hex_table MOV AL,0AH XLAT 假设:
指令系统使用的符号:
八位寄存器: AH,AL,BH,BH,BL,CH,CL,DH, DL 十六位通用寄存器: AX,BX,CX,DX,SP,BP,SI, DI 堆栈指针 指令指针 标志位 目的和源变址寄存器 SP IP(或PC) Flags DI, SI
段寄存器
通用寄存器 存储器
CS, DS, ES, SS
;对 。
;错
MOV AX, IP ; 对。
(2)段地址的默认
BX、SI、DI间址默认段地址为DS, BP间址默认段地址SS。
(3) 凡是遇到给SS赋值指令,系统自动禁止外部中断,执行 本条指令和下条指令,恢复对SS寄存器赋值前的中断开放情况。 这样做为了允许程序员连续用两条指令分别对SS和SP寄 存器赋值,同时又防止堆栈空间变动过程出现中断。
;(AL)←((BX )+(AL))
str_table——表格符号地址(首地址), 只是为了提高可读性而设置,汇编时仍用BX。

80x86机器的寻址方式与指令系统

80x86机器的寻址方式与指令系统
80X86机器的寻址方式与指令系统
本章内容讨论在80x86系列机上进行汇编语言程序设计的一 些基础性知识。“80x86系列机与汇编语言程序设计概论”部 分简要讨论在不同档次、不同“模式”下进行汇编语言程序 设计的一些基础性知识;“80x86系列机的编程模型简介”部 分对于80x86 系列机的寄存器作一综合性、基础性的讨论; “80x86系列机的存储器管理与寻址方式”在对系列机的存储 器管理模式进行综合讨论的基础上主要讨论8086/88处理器所 支持的存储器管理模式与相关联的寻址方式;“80x86系列机 的指令系统简介”部分主要讨论8086/88处理器的指令系统
80x86系列机与汇编语言程序设计概论
80x86系列机汇编语言程序设计与操作系统支持
为了支持多任务系统的高效运行,80286处理器还提供 了一组仅在“保护模式”下可用的“系统地址寄存器” , 它们主要包括: ‚全局描述符表寄存器‛ (GDTR),保存‚全局 描述符表‛ (GDT)的内存起始地址和长度信息 ‚中断描述符表寄存器‛ (IDTR),保存‚中断描 述符表‛ (IDT)的内存起始地址和长度信息 ‚局部描述符表寄存器‛ (LDTR),保存当前正 在执行的任务的‚局部描述符表‛系统索引信息。与之 相关联,设置有一个‚‘局部描述符表’描述符高速缓 存‛ ,以保存当前正在执行的任务的‚局部描述符表 ‛描述符,这为硬件查阅任务‚局部描述符表‛ 、确 认任务局部资源访问的合法有效性提供了基础(在操作 系统进行任务调度、装入LDTR 时由硬件自动装入该高 速缓存)
80x86系列机与汇编语言程序设计概论
80x86系列机汇编语言程序设计与操作系统支持
定义了‚全局描述符表‛ (GDT)以保存系统中的: 各任务的LDT所占存储段的‚描述符‛ 各共享代码段的“段描述符” 各共享数据段的“段描述符” 受操作系统关注的各控制转移点(被称为“门”) 的系统描述符信息(硬件识别的) 定义了‚中断描述符表‛ (IDT)以保存系统中的各 ‚中断服务程序‛的入口信息(硬件识别的) 定义了‚任务状态段‛ (TSS)规范地描述‚任务切 换‛所需的各种系统信息,包括所有相关的处理器寄存 器、系统堆栈、‚任务链‛等(硬件识别的复杂数据组 织),由此为操作系统实现‚进程管理‛功能提供了系 统支持,为其高效可靠运行确立了基础

计算机组成原理 第3章 80 x86的指令系统和寻址方式.ppt

计算机组成原理 第3章 80 x86的指令系统和寻址方式.ppt

; mov cx, 17 ; mov dl, [string+si] ; 显示一个字符 ; 循环指令
20
2019/12/24
21
2019/12/24
22
mov dx,offset string
把string在段里的偏移地址送给dx , offset是个伪操作符,只能在编译的 时候用。 用法: offset label 作用是得到 label在段内的偏移地址
SP在任何时候都指向栈顶,进出栈后自动修改SP。
注意:
* 堆栈操作必须以字为单位。
* 不影响标志位
* 不能用立即寻址方式 PUSH 1234H
2019/12/24
23
( 4 ) 基址变址寻址
Next :
mov mov mov mov mov int inc loop
cx, count bx, offset string si, 0 dl, [bx] [si] ah, 2 21h si next
( 5 ) DOS 显示字符串功能
; mov cx, 17 ; string的偏址 bx
MOV AX, [BX] [BP]
MOV AX, [SI] [DI]
14
( 7 ) 相对基址变址寻址方式
有效地址 =
(BX) (SI)
+
+
8位 位移量
(BP) (DI) 16位
MOV AX, MASK [BX] [SI] 或 MOV AX, MASK [BX+SI] 或 MOV AX, [MASK+BX+SI]
PA = 16d (SS) + (BP)
* 不允许使用AX、CX、DX 存放 EA

第三章 80X86的寻址方式和指令系统

第三章 80X86的寻址方式和指令系统
计算机中的指令由操作码和操作数两部分组成。:指在指令执行操作的过程中所需要的操作数据或操作 数地址或是地址的一部分或指向操作数地址的指针或其它有关 操作数的信息。即指令的操作对象
操作码 操作数
操作码和操作数的字节数由具体的指令系统决定。
8086指令编码格式
操作码
对于MOV 指令应注意几个问题:
①存储器传送指令中,不允许对CS和IP进行操作;
②两个操作数中,除立即寻址之外必须有一个为寄存 器寻址方式,即两个存储器操作数之间不允许直接进 行信息传送; 如我们需要把地址(即段内的地址偏移量)为AREAl 的存储单元的内容,传送至同一段内的地址为AREA2 的存储单元中去,MOV指令不能直接完成这样的传送, 但我们可以CPU内部寄存器为桥梁来完成这样的传送: MOV AL,AREAl MOV AREA2,AL
8086指令编码格式操作码三类格式操作码寻址方式操作码寻址方式操作数具体的字节数根据指令的不同有16字节操作码操作码操作码操作码操作码操作码寻址方式寻址方式寻址方式寻址方式寻址方式操作数操作数操作数操作数操作数操作数操作数操作数操作数操作数指令编码举例
第三章 80X86的寻址方式和指令系统
3.1 指令的格式
但是,只要在指令中指定是段超越的,则可以用 别的段寄存器作为地址基准。
4) 比例变址寻址
物理地址=段寄存器:[变址寄存器*比例因子+偏移量]
默认组合:
DS:[SI*比例因子+偏移量]
ES:[DI*比例因子+偏移量]
例:MOV AX,50H[SI]*4
5) 基址加变址寻址 把BX和BP看成是基址寄存器,把SI、DI看着是 变址寄存器,把一个基址寄存器(BX或BP)的内容 加上一个变址寄存器(SI或DI)的内容,再加上指令 中指定的8位或16位偏移量(当然要以一个段寄存器 作为地址基准)作为操作数的偏移地址,如图所示。

微机原理第三章 80x86的指令系统和寻址方式

微机原理第三章 80x86的指令系统和寻址方式
相继二字 寄存器、DS
指针送寄存器和ES指令: LES REG, SRC 执行操作: (REG) (SRC) (ES) (SRC+2)
相继二字 寄存器、ES
例:LEA BX, [BX+SI+0F62H]
LDS SI, [10H] LES DI, [BX]
MOV BX, TABLE 40 H 00 H 00 H 30 H
存 储 器 寻 址
1.立即寻址方式
—— 操作数在指令中给出 指令格式:MOV AL, 5 MOV AX, 3064H MOV AL, ‘A’ ;A的ASCII码 * 只能用于 SRC 字段 MOV 40H, AL
* SRC 和 DST 的字长一致 MOV AH, 3064H
2.寄存器寻址方式 —— 操作数在指定的寄存器中
……
…… RET 例: PUSH AX PUSH BX PUSH CX …… POP POP CX BX ;其间用到AX、BX、CX
; 后进先出
POP
AX
交换指令
执行操作
注意:
XCHG OPR1, OPR2
(OPR1) (OPR2)
* 不影响标志位
* 不允许使用段寄存器 * 必须有一个操作数在寄存器中 * 不能够使用立即数寻址方式
标志寄存器传送指令
标志送AH指令 执行操作:
AH送标志寄存器指令 执行操作: 标志进栈指令 执行操作: 标志出栈指令 执行操作:
(DI)
7.相对基址变址寻址方式
(BX) (BP) (SI) (DI) 8位 16位
有效地址 =
+
+
位移量
MOV AX, MASK [BX] [SI] 或 MOV AX, MASK [BX+SI] 或 MOV AX, [MASK+BX+SI] * 适用于二维数组的寻址,位移量可存放首地址 * 可使用段跨越前缀

80X86的指令系统和寻址方式

80X86的指令系统和寻址方式
- 字节串:一串连续的字节。
- 字串:一串连续的字。
- 双字串:一串连续的双字。
3.2 80X86的寻址方式
• 数据寻址方式:是指获取指令所需的操 作数或操作数地址的方式
• 程序寻址方式:是指程序中出现转移和 调用时的程序定位方式
3.2.1 80X86的数据寻址方式 (共十种)
1、立即寻址方式
操作数作为指令的一部分,在直接指令中给出。
3.2.3操作数宽度和寻址宽度的确定
• 操作数宽度也称为“操作尺寸” • 寻址宽度也称为“寻址尺寸” • 实际上指的是操作数二进位数和可寻址的二进位数。 • 8086和80286的操作数宽度和寻址宽度都是16位的。 • 而32位处理器的操作数宽度和寻址宽度可以是16位的,
也可以是32位的,涉及到W域、缺省段属性及指令前缀 等概念。
按指令码中规定的寻址方式给出。此时,寻址所得到的不 是操作数,而是转移地址,用来更新IP内容。
JMP BX
..
2000:0FFFH
操作码
.. ..
2000:4000H
操作码
CS + BX(新 IP)
2000 4000
24000
..
(3)段间直接寻址 在段间直接寻址方式中,指 令码中将直接给出16位的段 地址和16位的段内偏移地址, 用来更新CS和IP内容。
汇编语言指令要解决的两个问题: 要指出进行什么操作——操作符; 要指出操作数和操作结果放在何处——寻址方式。
指令的基本构成:
目的

说明要执行的 操作对象,可以 是什么操作 有0个、1个或2个
指令举例: MOV AX , BX
操作码 操作数 ADD AX,[SI+6] INC BX NOP

第三章 80X86寻址方式和指令系统

第三章 80X86寻址方式和指令系统

第三章 80x86寻址方式和指令系统
3.1.2
程序地址寻址方式
一、相对寻址 相对寻址为段内寻址,指令中给出带符号的相对偏 移量,程序目标地址为当前IP值加上相对偏移量作为偏移 地址。 二、 直接寻址 直接寻址是指指令中直接给出转移指令的目标地址。在 段间转移中,指令中给出目标段地址或代码段的段描述符。 三、间接寻址 间接寻址 分段内和段间间接寻址,指令中以间接方 式给出转移指令的目标地址,通常存放在数据段。
第三章 80x86寻址方式和指令系统
相对基址变址寻址动态示意
第三章 80x86寻址方式和指令系统
(二)32位指令模式下的存储器寻址
32位指令模式寻址结构由5部分组成: 段址+基址+变址﹡比例因子+偏移量 其中基址寄存器或变址寄存器可以是除ESP以 外的任何32位通用寄存器。当基址寄存器为EBP时, 默认段寄存器SS存放段选择符,否则,默认DS存 放段选择符。也可使用段超越前缀来指定。比例 因子为1,2,4,8。偏移量为8位或32位。
按功能分类: • 数据传送指令 • 算术运算指令 • 逻辑运算指令 • 控制转移类指令 • 串操作指令 • 输入/输出指令 • 处理器控制指令 • 中断指令与DOS功能调用
第三章 80x86寻址方式和指令系统
3.3.1
数据传送指令
数据传送指令包括: • • • • • • 通用数据传送指令 堆栈操作指令 地址传送指令 标志寄存器传送指令 查表指令 符号扩展指令
四、标志寄存器传送指令
格式1:LAHF SAHF 格式2:PUSHF POPF 格式3: PUSHFD POPFD *SAHF、POPF、POPFD影响标志位
第三章 80x86寻址方式和指令系统
五、查表指令
格式:

第三章 80x86 的指令系统和寻址方式

第三章 80x86 的指令系统和寻址方式

是硬件设计人员和程序员能见到的机器的主要属性,
是硬件构成的计算机系统向外部世界提供的直接界面。
3
一个CPU的指令系统是固定的, 不同类型的CPU其指令系统不同; 同一系列向上兼容。 程序是为要解决的问题编写出来的指令集合。 用户为解决自己的问题所编写的程序称为源程序。
4
2. 8086/8088指令格式简介
立即数可以是8位或16位(16位的立即数是高位字节放在高地址,低位字节放在低地址) 。 应用场合: 立即数常用来给寄存器或内存单元赋初值。 注意:只能用于源操作数字段,不能用于目的操作数字段。 例1 MOV AX , 2056H 结果 ( AH ) = 20H
低地址
内存
操作码 操 作 数
高地址
6
操作数个数
按指令格式中,操作数个数的多少分为三类:
无操作数: 指令只有一个操作码,没有操作数
单操作数: 指令中给出一个操作数
双操作数: 指令中给出两个操作数。
7
① 无操作数: 指令只有一个操作码,没有操作数。
有两种可能: ▲ 有些操作不需要操作数。 如 HLT,NOP等处理机控制指令。 ▲ 操作数隐含在指令中。 如 STC , CLC等处理机控制命令。
MOV DS: [ DI ] , CL
功能:将CL寄存器中的内容传送到以DS为段值,DI为偏移值的内存单元中

编程将CL寄存器的内容传送到21000H单元中。 地址 21000H=2000:1000H 编程时, DS 存放段地址2000H DI 存放偏移地址1000H MOV MOV MOV MOV AX, 2000H DS, AX DI, 1000H DS: [ DI ], CL

80X86寻址方式与指令系统

80X86寻址方式与指令系统

MOV AX, [BX+DI+6] ;AX←DS:[BX+DI+6]
演示
MOV AX, 6[BX+DI]
MOV AX, 6[BX][DI]
存储器寻址方式中的变量(补充)
变量指示内存中的数据,变量名具有地址属性。
存储器寻找方式中经常采用变量形式 变量的定义
WVAR DW 1234H ;定义16位变量WVAR,具有初值1234H ;假设其偏移地址为10H
001
r/m
disp8
3. r/m=001,是对[BX+DI+disp]的寻址计算。位移量disp=-6,为FAH。 当mod=01时,为选取8位位移量,则有:
10001000 01 001 001 11111010
=88H、49H、FAH
例2:写出MOV AH,[BX+DI+50H]的机器语言编码。
关于寻址方式字节的分析
Reg域:规定一个寄存器操作数,他在指令中作 为源操作数还是目的操作数由D位规定 Mod域:用来区分另一个操作数是在寄存器,还 是在存储器中
关于寻址方式字节的分析
r/m域:受寻址方式mod域所控制。若mod=11为 寄存器寻址,r/m域指出第二个操作数所在寄存器 号;mod=00、01、10时均为存储器寻址方式, r/m域指出应如何求得操作数存放在寄存器中的有 效地址
opcodeDW mod reg 10001010 01 100
r/m 001
disp8 01010000
=8AH、61H、50H
例3:写出ADD AX,[BX+DI+0826H]的机器语言编码。
opcodeDW mod reg 00000011 01 000
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

实验二80X86寻址方式和指令系统
实验目的:
通过实验掌握下列知识:
1、DEBUG命令:G,N,W,L及Q。

2、8086系统中数据在内存中的存放方式和内存操作数的几种寻址方式。

3、8086指令:INC,DEC,LOOP,INT 3,INT 20H,及ADD、SUB等常用指令。

4、8086汇编语言伪操作:BYTE PTR,WORD PTR,DB
5、求累加和程序和多字节加减法程序。

6、淘宝店号530213
实验内容和步骤:
一、内存操作数及各种寻址方式使用:
内容:
MOV AX,1234
MOV [1000],AX
MOV BX,1002
MOV BYTE PTR[BX],20
MOV DL,39
INC BX
MOV [BX],DL
DEC DL
MOV SI,3
MOV [BX+SI],DL
MOV [BX+SI+1],DL
7、MOV WORD PTR[BX+SI+2],2846 淘宝店号530213
步骤:
1)用A命令键入上述程序,并用T命令逐条运行。

2)每运行一条有关内存操作数的指令,要用D命令检查并记录有关内存单元的内容并注明是什么寻址方式。

注意D命令显示结果中右边的ASCII字符及双字节数存放法。

思考:有关指令中BYTE PTR及WORD PTR伪操作不加行不行?试一试。

二、求累加和程序:
程序:
MOV BX,100
MOV CX,10
SUB AX,AX
LOP: ADD AL,[BX]
ADC AH,0
INC BX
J: LOOP LOP
INT 3
步骤:要防止数据冲突,先用R命令将段寄存器改为不同值,例如DS=2000H
8、1)用A命令将程序键入到100H开始的内存中,在键入时记下标号LOP和J 的实际地址,在键入LOOP指令时LOP用实际地址值代替。

淘宝店号530213
2)用命令N AA将此程序命名为文件AA(文件名可任取)。

9、3)用R命令将BX:CX改为程序长度值(即最后一条指令后面的地址减去开始地址) 淘宝店号530213
4)用命令W 100将此程序存到AA命名的磁盘文件中。

10、5)用命令Q退出DEBUG。

淘宝店号530213
6)用命令DEBUG AA再次调入DEBUG和文件AA,可用U命令检查调入程序。

若调入DEBUG时忘了加AA文件名,可用N命令和L命令将文件调入。

7)用E命令在内存地址100H处键入16个数字
8)用命令G=100 J(J用实际地址代替),使程序运行并停在断点J上,检查AX,BX的值是否符合你的预计值。

9)用T命令运行一步,观察程序方向(IP值)和CX值是否与你的估计一样, 若不一样,检查程序是否有错。

10)重复G J与T,再检查AX是否正确。

11)用G命令使程序运行到结束,检查AX值是否正确。

三、多字节加法程序。

程序:
MOV DI,1000
MOV CX,8
MOV SI,2000
CLC
LOP: MOV AL,[SI]
ADC [DI],AL
INC SI
INC DI
LOOP LOP
INT 20
步骤:
1)用命令键入此程序
2)用E命令在1000H开始处键入一个8字节被加数,在2000H开始处键入一个8字节加数,均为低字节在前面。

3)。

用G命令运行此程序,并用D命令检查其结果(存放在哪里?),是否正确?
4)将INT 20H指令改为INT 3,有何区别?若这条指令不加,行不行?试一试。

四、自编程序:
用16位减法指令编一个32位(4字节)数减法程序,两个源数及结果存放地址同上题。

调试并做记录。

实验报告要求:
1、各项实验结果记录。

2、自编程序原稿及调试后修正稿,写出原稿错在那里。

附加题:
1、数据串搬家程序:
1、用A命令键入下列程序:
MOV SI,1000
MOV DI,1500
MOV CX,0F
LOP: MOV AL,[SI]
MOV [DI],AL
INC SI
INC DI
LOOP LOP
INT 20
2、用A命令DB伪指令在1000H键入下列字符串:
‘IBM_PC COMPUTER'
3、用G命令运行此程序,并用D命令检查目的地址处的字符与源串是否一致。

4、若此程序中的目的地址(DI的值)改为1002H,再运行此程序,看能不能把1000H开始的字符串搬到1002H开始的地方去?修改程序以做到这一点。

2、段寄存器概念及字符串传送指令练习:
1、用A命令键入下列程序:
MOV SI,0
MOV DI,0
MOV AX,1000
MOV DS,AX
MOV AX,1500
MOV ES,AX
MOV CX,0F
CLD
REP MOVSB
INT 20
2、用A命令DB伪指令在1000:0000处键入字符串'IBM_PC COMPUTER',并用D命检查之。

3、用D命令检查0F00:1000处内容,看是否一样。

为什么?
4、用G命令运行此程序,检查目的地址1500:0000处内容。

并记下DS与ES 值。

5、修改此程序,使ES与DS为同一值,以减少一条指令,而源物理地址和目的物理地址(是多少?)仍和原来一样。

相关文档
最新文档