当前位置:文档之家› 8086七种寻址方式

8086七种寻址方式

8086七种寻址方式
8086七种寻址方式

8086/8088七种寻址方式

(一)8086/8088寄存器组

(二)8086/8088寻址方式

(1)立即寻址方式

操作数就包含在指令中,它作为指令的一部分,跟在操作码后存放在代码段。这种操作数称为立即数,立即数可以是8位的也可以是16位的,如果立即数是16位的按“高高低低”的原则。

例如指令:MOV AX,1234H

的存储和执行情况如下图:

图中指令存放在代码段中,OP表示该指令的操作码部分

再例如:MOV AL,5 则指令执行行,(AL)=05H

MOV 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,AX

MOV AL,DH

(3)直接寻址方式

操作数在寄存器中,指令直接包含有操作数的有效地址(偏移地址)。操作数一般存放在数据段

所以操作数的地址由DS加上指令中直接给出的16位偏移得到。

如果采用段超越前缀,则操作数也可含在数据段外的其他段中。

如下图所示:

在汇编语言指令中,可以用符叼地址代替数值地址。

如:MOV AX,VALUE

此时VALUE为存放操作数单元的符号地址。

如写成:MOV AX,[VALUE]

也是可以的,两者是相等的。

如VALUE在附加段中,则应指定段超越前缀如下:

MOV AX,ES:VALUE

或MOV AX,ES:[VALUE]

直接寻址方式常用于处理单个存储器变量的情况。它可实现在64K字节的段内寻找操作数。直接寻址的操作数通常是程序使用的变量。

注意立即寻址和直接寻址书写方法上的不同,直接寻址的地址要放在方括号中。在源程序中,往往用变量名表示。

(4)寄存器间接寻址方式

操作数在存储器中,操作数有效地址在SI,DI,BX,BP这四个寄存器之一中,在一般情况下,如果有效地址在SI,DI和BX中,则以DS段寄存器之内容为段值。如果有效地址在BP中,则以SS段寄存器之内容为段值。

如下图所示:

指令中也可指定段超越前缀来取得其他段中的数据如:

MOV AX,ES:[BX];引用的段寄存器是ES

MOV [SI],AX;目的操作数寄存器间接寻址

MOV [BP],CX;引用的段寄存器是BP

MOV SI,AX;目的操作数寄存器寻址方式

(5)寄存器相对寻址方式

操作数在存储器中,操作数的有效地址是一个基址寄存器(BX,BP)或变址寄存器的(SI,DI)内容加上指令中给定的8位或16位位移量之各。

即:

在一般情况下,如果SI,DI或BX之内容作为有效地址的一部分,那么引用的段寄存器是DS;如果BP之内容作为有效地址的一部分,那么引用的段寄存是百SS。

物理地址=16D*(DS)+(BX)+8

或(SI)或16位位移量

或(DI)

物理地址=16D*(SS)+(BP)+8位位移量

或16位位移量

在指令中给定的8位或16位位移量采用补码形式表示。在计算有效地址时,如位移量是8位,则被带符号扩展成16位。

例如:MOV AX,[DI+1233H]

假设,(DS)=5000H,(DI)=3678H

则物理地址=50000+3678+1223=5489BH (16位的段地址最后未位一定是0)假设该字存储单元的内容如下图,则(AX)=55AAH

下面指令中,源操作数采用寄存器相对寻址,引用的段寄存器是SS:

MOV BX,[BP-4]

下面指令中,目的操作数采用寄存器相对寻址,引用的段寄存器是ES:

MOV ES:[BX+5],AL

指令:MOV AX,[SI+3]与MOV AX,3[SI]是等价的。

(6)基址加变址寻址方式

操作数在存储器中,操作数的有效地址由:基址寄存器之一的内容与变址寄存器之一的内容相加。

(BX) (SI)

即:EA= +

(BP) (DI)

在一般情况下,如果BP之内容作为有效地址的一部分,则以SS之内容为段值,否则以DS之内容为段值.

如下图所示:

下面指令中,目的操作数采用基址加变址寻址.

引用的段寄存器是DS: MOV DS:[BP+SI],AL

下面指令中,源操作数采用基址加变址寻址.

引用的段寄器ES: MOV AX,ES:[BX+SI]

这种寻址方式适用于数组或表格处理.

用基址寄存器存放数组首地址,而用变址寄存器来定位数组中的各元素.

或反之,由于两个寄存器都可改变,所以能更加灵活地访问数组或表格中的元素. 下面的两种表示方法是等价的:

MOV AX,[BX+DI]

MOV AX,[BX][DI]

(7)相对基址加变址寻址方式

操作数在存储器中,操作数的有效地址由基址寄存器之一的内容与变址寄存器之一的内容及指令中给定的8位或16位位移量相加得到.

(BX) (SI) 8位位移量

即:EA= + +

(BP) (SI) 16位位移量

在一般情况下,如果BP之内容作为有效地址的一部分,则以SS段寄存器之内空为段值。

在指令中给定的8位或16位位移量采用补码形式表示。

在计算有效地址时,如果位移量是8位,那么被带符号扩展成16位。

当所得的有效地址超过FFFFH时,就取其64的模。

假如:MOV AX,[BX+DI-2]

假设,(DS)=5000H,(BX)=1223H,(DI)=54H,(51275)=54H,(51276)=76H 那么,存取的物理存储单元是多少呢?

物理地址=50000+1233+0054+FFFE ;

(其中FFFE是-2的32位数值,通过正2各位取反未位加1而来)

=51275H

执行该指令后,(AX)=7654H。

相对基址加变址这种寻址方式的表示方法多种多样,下面四种均是等价的。MOV AX,[BX+DI+1234H] MOV AX,123H[BX][DI]

MOV AX,1234H[BX+DI] MOV AX,1234H[DI][BX]

8086汇编语言指令的寻址方式有哪几类

1. 8086汇编语言指令的寻址方式有哪几类?用哪一种寻址方式的指令执行速度最快? 寄存器寻址最快 7. 下面这些指令哪些是正确的?哪些是错误的?如是错误的,请说明原因。 XCHG CS , AX ;不能修改CS MOV [BX] , [1000] ;不能在两个内存单元之间直接进行数据传送 XCHG BX , IP ;不能用名字直接访问IP PUSH CS POP CS ;不允许直接修改CS值 IN BX , DX ;输入数据必须使用累加器AL或AX MOV BYTE [BX] , 1000 ;格式错误,且超范围,应为MOV word PTR [BX],1000 MOV CS , [1000];不允许直接修改CS值 20.带参数的返回指令用在什么场合?设栈顶地址为3000H,当执行RET 0006后,SP的值为多少? 利用堆栈传递参数时使用;对于近调用SP=3008H,对于远调用SP=300AH 27.设当前SS=2010H,SP=FE00H,BX=3457H,计算当前栈顶地址为多少?当执行 PUSH BX指令后,栈顶地址和栈顶2个字节的内容分别是什么? 栈顶地址:SS:SP,物理地址为:2FF00H;PUSH 完以后栈顶地址为:SS:SP=2010:FDFEH,即物理地址为:2FEFEH,内容为:57H 34H(由低地址到高地址) B P7 5. 设(DS)=3000H,(BX)=1100H,(CS)=0062H,(S1)=0002H,(31100H)=52H, (31101H)=8FH,(31162H)=6BH,(31163H)=99H,(31103H)=F6H, (32200H)=AAH,(32201H)=B6H,(32800H)=55H,(32801H)=77H,给出下列各指令执行后AX寄存器的内容: (1) MOV AX,BX (2) MOV AX,[BX] (3) MOV AX,4200H (4) MOV AX,[2800H] (5) MOV AX,1100H[BX] (6) MOV AX,[1160H+SI] 9. 分别执行下列各指令组,写出AX的内容: (1) MOV AX,93A4H NEG AX 73A4-8c5c,e689-1977 (AX)=6C5CH (2) XY DW "AB" MOV AX,XY (AX)=4142H (3) MOV AX,2B7EH MOV CX,4DB5H ADD AX,CX (AX)=7933H (4) XA DW 0BD57H MOV AX,0FBCDH AND AX,XA (AX)=B945H (5) STC MOV BX, 0B69FH MOV AX, 43A2H SBB AX, BX

汇编实验报告一 熟悉7种寻址方式

电子信息工程学系实验报告——适用于计算机课程课程名称:IBM-PC汇编语言程序设计 实验项目名称:熟悉7种寻址方式实验时间: 班级:姓名:学号: 一、实验目的: 掌握debug命令,熟悉7种寻址方式。 二、实验环境: ASM轻松汇编 三、实验内容: 1、上机输入以下程序: data segment x db 01,02 y db ?,? z db ?,? w dw 1234h data ends code segment main proc far assume cs:code,ds:data start: push ds xor ax,ax push ax mov ax,data mov ds,ax mov dx,1234h -----无有效地址 mov cl,ds:[0000h] -----0000h mov si,0000h mov di,0002h mov al,[si] ----0000h mov [di],al ----无有效地址 add si,1 add di,1 mov al,[si] mov [di],al mov si,0000h mov di,0000h mov al,x[si] mov y[di],al 成绩: 指导教师(签名):

add si,1 add di,1 mov al,x[si] -----0001h mov y[di],al mov si,0000h mov di,0000h mov bx,0000h mov bp,0004h mov al,[bx][si] ----0000h mov ds:[bp][di],al add si,1 add di,1 mov al,[bx][si] mov ds:[bp][di],al ret main endp code ends end start 2、写出上面汇编程序中字体为红色的指令的源操作数的寻址方式以及源操作数的有效地址。 指令寻址方式有效地址mov dx,1234h立即寻址方式无有效地址mov cl,ds:[0000h]直接寻址方式0000h mov al,[si]寄存器间接寻址方式0000h mov [di],al寄存器寻址方式无有效地址 mov al,x[si] 寄存器相对寻址方式0001h mov al,[bx][si]基址变址寻址方式0000h 画图说明数据段中变量所分配的存储空间及初始化的数据值。 14F2:0000 0001 0002 0003 0004 0005 0006 0007 01 02 01 02 00 00 34 12

实验7 寻址方式在结构化数据访问中的应用

计算机学院实验报告 课程汇编语言 实验名称实验7 寻址方式在结构化数据访问中的应用 专业计算机科学与技术 2018年 12 月 24 日 一、实验目的 1.定位内存单元的寻址方式汇总 2.寻址方式的综合应用

3.转移指令的分类和原理 4.熟悉在显存中编程的方法 二、实验内容及要求 ( 一) 寻址方式的汇总及综合应用 1.定位内存单元的寻址方式有几种,并举例说明。 2.寻址方式在结构化数据访问中的应用。 Power idea 公司从 1975 年成立一直到 1995 年的基本情况如下。 年份收入 ( 千美元 )雇员人均收入 ( 千美元 ) 1975163? 1976227? 19773829? 1978135613? 1979239028? 1980800038? 1995593700017800? 下面的程序中,已经定义好了这些数据: assume cs:codesg data segment db '1975','1976','1977','1978','1979','1980','1981','1982','1983' db '1984','1985','1986','1987','1988','1989','1990','1991','1992' db '1993','1994','1995' ;年份 dd16,22,382,1356,2390,8000,16000,24486,50065,97479,140417,197514 dd 345980,590827,803530,1183000,1843000,2759000,3753000,4649000,5937000 ; 公司总收入 dw 3,7,9,13,28,38,130,220,476,778,1001,1442,2258,2793,4037,5635,8226 dw 11542,14430,15257,17800 ;公司雇员人数 data ends table segment db 21 dup('year summ ne ??') table ends

第二章8086习题答案

微机原理第二章习题与分析解答 1.单项选择题 (1)8086工作最大方式时应将引脚MN/MX接() A.负电源 B.正电源 C.地 D.浮空 分析:8086规定工作在最小方式下MN/MX接+5V,工作在最大方式下MN/MX 接地。 答案:C (2)8086能寻址内存储器的最大地址范围为() A.64KB B.1MB C.16MB D.16KB 分析:8086有A 0~A 19 20条地址总线,220=1MB。 答案:B (3)在总线周期,8086CPU与外设需交换() A.地址信息 B.数据信息 C.控制信息 D.A、B、C 分析在总线周期,CPU必须发出地址信息的控制信息以后,才能实现与外设进行交换数据。 答案:D (4)8086用哪种引脚信号来确定是访问内存还是访问外设() A.RD B.WR C.M/IO D.INTA 分析:引脚信号M/IO是Memory or Input Output的缩写,当M/IO=0时,用以访问外设;当M/IO=1,用以访问外设。 答案:C (5)在8086指令系统中,下列哪种寻址方式不能表示存储器操作数()A.基址变址寻址B.寄存器寻址C.直接寻址D.寄存器间接寻址 分析:8086指令系统共有七种寻址方式,只有立即寻址方式和寄存器寻址方式不是表示存储器操作数的。 答案:B (6)当CPU时钟频率为5MHz,则其总线周期() A.0.8 s B.500ns C.200ns D.200μs 分析:时钟周期T=1/?=200ns,而一个总路线周期通常由4个T状态组成,有4╳T=4╳200ns=0.8μs. 答案:A (7)8086工作在最大方式下,总路线控制器使用芯片() A.8282 B.8286 C.8284 D.8288 分析:在最大方式下,系统中主要控制信号是由总路线控制器产生,而只有芯片8288才有这方面的功能。 答案:D (8)取指令物理地址=() A.(DS)╳10H+偏移地址 B.(ES)╳10H+偏移地址 C.(SS)╳10H+(SP) D.(CS)╳10H+(IP) 分析:每当8086CPU取指令时,总是根据CS:IP的所指的存贮单元去取指令。 答案:D (9)一个数据的有效地址是2140H、(DS)=1016H,则该数据所在内存单元

ARM处理器9种基本寻址方式

寻址方式是根据指令中给出的地址码字段来实现寻找真实操作数地址的方式,ARM处理器有9 种基本寻址方式。 1.寄存器寻址 操作数的值在寄存器中,指令中的地址码字段给出的是寄存器编号,寄存器的内容是操作数,指令执行时直接取出寄存器值操作。 例如指令: MOV R1,R2 ;R1←R2 SUB R0,R1,R2 ;R0←R1- R2 2.立即寻址 在立即寻址指令中数据就包含在指令当中,立即寻址指令的操作码字段后面的地址码部分就是操作数本身,取出指令也就取出了可以立即使用的操作数(也称为立即数)。立即数要以“#”为前缀,表示16进制数值时以“0x”表示。 例如指令: ADD R0,R0,#1 ;R0←R0 + 1 MOV R0,#0xff00 ;R0←0xff00 3.寄存器移位寻址 寄存器移位寻址是ARM指令集特有的寻址方式。第2个寄存器操作数在与第1个操作数结合之前,先进行移位操作。 例如指令: MOV R0,R2,LSL #3 ;R2的值左移3位,结果放入R0,即R0=R2 * 8 ANDS R1,R1,R2,LSL R3 ;R2的值左移R3位,然后和R1相与操作,结果放入R1 可采用的移位操作如下: LSL:逻辑左移(Logical Shift Left),寄存器中字的低端空出的位补0。 LSR:逻辑右移(Logical Shift Right),寄存器中字的高端空出的位补0。 ASR:算术右移(Arithmetic Shift Right),移位过程中保持符号位不变,即如果源操作数为正数,则字的高端空出的位补0,否则补1 ROR:循环右移(Rotate Right),由字的低端移出的位填入字的高端空出的位 RRX:带扩展的循环右移(Rotate Right extended by 1 place),操作数右移一位,高端空出的位用原C 标志值填充。 各移位操作过程如图所示。

汇编语言复习题(附答案)

汇编语言复习题 注:蓝色标记的为答案,此答案仅供参考,大家自己做一下或看以一下,认为不对的地方,可以提出来一起讨论一下,另外看一下课后老师布置的相应作业。在此文档最后最后附有课 后四、六章的答案,大家抓紧时间复习哦! 一、选择题 1. 把要执行的程序与库文件连接起来形成可执行文件的系统程序是(B )。 A. 汇编程序 B. 连接程序 C. 机器语言程序 D.源代码程序 2. 在8088/8086的寄存器组中,CPU确定下一条指令的物理地址时需要用到的寄存器对是 (C )。 A..SS 和SP B.DS 和DI C.CS 和IP D.ES 和SI 3. 为了使主机访问外设方便起见,外设中的每个寄存器给予一个(C )。 A.物理地址 B. 逻辑地址 C. 端口地址 D. 段地址 4. MOV AX, 3064H,该指令中源操作数采用的寻址方式是(A )。 A.立即 B. 直接 C. 寄存器相对 D. 寄存器间接 5. 换码指令的助记符是(C )。 A. XCHG B. LEAS C.XLAT D. MOV 6. 如果A> B (A、B有符号数)发生转移,应选择的条件转移指令是(JGE )。 7. 下列符号中,可用作标识符的是(C )。 A.MOV B.AX C.MSG1 D.1ABC 8. X DB 10H DUP (1 , 2)内存变量定义语句拥有了( A )个字节的存储空间。 A.20D B.10D C.20H D.10H 9. 当DF=0时,执行串操作指令MOVSB变址寄存器SI、DI的值将(C )。 A.不变 B. 减1 C. 加1 D. 无法确定 10. 如下指令可将AX寄存器内容改变的是(A )。 A. AND AX , BX B . TEST AX , BX C. CMP AX , BX D . XCHG AX , AX 11.16位CPU支持的I/O 地址范围是(D )。 A. 0~0FFFFFH B. 0~0FFFFH C. 0~0FFFH D. 0~0FFH 12. MUL CL指令实现的功能是(A )。 A.无符号乘法:AX AL X CL B.有符号乘法:AX AL X CL C.无符号乘法:DX AL X CL D .有符号乘法:DX AL X CL 13. DOS系统功能调用(INT 21H )中,显示字符串的功能号是(D )。 A.01H B.02H C.08H D. 09H 14. 在16位CPU读取指令时,需要用到的寄存器对是(C )。 A.SS 和SP B.DS 和DI C.CS 和IP D.ES 和SI 15. 下列指令中,源操作数(既第2操作数)属于基址加变址寻址方式是(B )。 A.MOV AX,23H B. MOV AX,[BX+SI] C.SUB AX,[BX] D. ADD AX,BX 16. 有内存变量定义语句:VAR DW 10 DUP(1 , 2), 1234H, VAR的属性TYPE LENGTH和

8086汇编语言复习题解答

8086/8088汇编语言习题解答 第一章 1.1、试根据自己使用计算机的经历,列举几个必须使用或最好是使用汇编 语言编制程序的事例。 1.2、试完成下列数制间的转换 ⑴、十进制数转换为8位二进制数 十进制:100 对应二进制:01100100B 十进制:56 对应二进制:00111000B 十进制:111 对应二进制:01101111B 十进制: 120 对应二进制:01111000B 十进制: 70 对应二进制:01000110B ⑵、8位二进制数(无符号数)转换为十进制数 二进制:01010101B 对应十进制:85 二进制:10101010B 对应十进制:170 二进制:11110000B 对应十进制:240 二进制:00001111B 对应十进制:15 ⑶、十进制数转换为十六进制数 十进制:40 对应二进制:00101000B 十进制:80 对应二进制:01010000B 十进制:105 对应二进制:01101001B 十进制: 114 对应二进制:01101101B 十进制: 207 对应二进制:11001111B

1.3、试把下面用补码表示的二进制数转换为对应的十进制真值 二进制补码:01111000 对应的十进制值数真值:+120 二进制补码:11011001 对应的十进制值数真值:-39 二进制补码:10000001 对应的十进制值数真值:-127 二进制补码:10001000 对应的十进制值数真值:-120 二进制补码:00100111 对应的十进制值数真值:+39 二进制补码:11110000 对应的十进制值数真值:-16 1.4、由键盘输入字符通常都是以该字符的ASCII码形式表示的。若现在从键盘上输入十六进制数0~F,那么应如何处理才能把十六进制转换为4位二进制数0000~1111. 答:将键盘输入的数0~F的ASCII码,每输入一个字符,减去30H后,再存入内存,这样就完成了把从键盘上输入的十六进制ASCII码转换为4位二进制数0000~1111. 1.5、试分别判断下列各组数据中哪个数据最大?哪个最小? ①、A=0.101B B=0,101D C=0,101H ②、A=1011B B=1011D C=1011H 答:第①组:A=1×21-+1×23-=0.625 B=0.101 C=1×161-+163-=0.0625+0.00024414=0.06274414 所以A最大,C最小 第②组,B最大,A=B最小 1.6、现有一个二进制数10110110.若将该数看着是无符号数、原码表示的带符号数、补码表示的带符号数,它对应的十进制数的真值是多少?

单片机的寻址方式

单片机的寻址方式 指令给出参与运算的数据方式称为寻址方式。换句话说,寻址方式就是寻找确定参与操作的数的真正地址。 在MCS-51 系列单片机的指令系统中寻址方式共有7 种, 立即寻址方式,mcs-51 单片机的一种寻址方式,操作数就写在指令中,和操作码一起放在程序存贮器中。把“#”号放在立即数前面,以表示该寻址方式为 立即寻址,如#20H,立即寻址方式通常用于对通用寄存器或内存单元赋初值。直接寻址方式,指令操作数域给出的是参加运算的操作数地址。在MCS-51 单片机中,直接地址只能用来表示特殊功能寄存器、内部数据寄存器和位地址空间。其中,特殊功能寄存器和位地址空间只能用直接寻址方式访问。 寄存器寻址方式,操作数在寄存器中,由指令操作码中的rrr 三位的值和PSW 中RS1 及RS0 的状态,选中某个工作寄存器区的某个寄存器,然后进行相应的指令操作。指令所要的操作数已存储在某寄存器中,或把目标操作数存入寄存器。把在指令中指出所使用寄存器(即:寄存器的助忆符)的寻址方式 称为寄存器寻址方式。 间接寻址方式,指令操作数给出的是存放操作数地址的寄存器。在MCS-51 指令系统中,可作为寄存器间接寻址的寄存器有工作寄存器R0~R1、堆栈批示器SP 和地址寄存器DPTR。在指令助记符中,间接寻址用符号@来表示。 相对寻址方式,以当前程序计数器pc 的内容为基址,加上指令给出的一字 节补码数(偏移量)形成新的pc 值的寻址方式称为相对寻址。 变址寻址方式,在通用寄存器中,有些寄存器可作为变址寄存器。把变址寄存器的内容(通常是首地址)与指令地址码部分给出的地址(通常是位移量)之和作为操作数的地址来获得所需要的操作数就称为变址寻址。

单片机寻址方式

51单片机的寻址方式 寻址方式:指定操作数所在单元的方法。 在我们学习的8051单片机中,有7种寻址方法,下面我们将逐一进行分析。 一、立即寻址 用“#”作前缀 MOV A,#20H 在这种寻址方式中,指令多是双字节的。立即数就是存放在程序存储器中的常数,换句话说就是操作数(立即数)是包含在指令字节中的。 例如: MOV A,#3AH 这条指令的指令代码为74H、3AH,是双字节指令,这条指令的功能是把立即数3AH送入累加器A中。 MOV DPTR,#8200H在前面学单片机的专用寄存器时,我们已学过,DPTR 是一个16位的寄存器,它由DPH及DPL两个8位的寄存器组成。这条指令的意思就是把立即数的高8位(即82H)送入DPH寄存器,把立即数的低8位(即00H)送入DPL寄存器。 二、直接寻址

指令中直接给出操作数的地址。 MOV A,30H;这条指令中操作数就在30H单元中,也就是30H是操作数的地址,并非操作数。 MOV 30H,DPH 在80C51单片机中,直接地址只能用来表示内部数据存储器、位地址空间以及特殊功能寄存器,具体的说就是: 1、内部数据存储器RAM低128单元。在指令中是以直接单元地址形式给出。 我们知道低128单元的地址是00H-7FH。在指令中直接以单元地址形式给出这句话的意思就是这0-127共128位的任何一位,例如0位是以00H这个单元地址形式给出、1位就是以01H单元地址给出、127位就是以7FH 形式给出。 2、位寻址区。20H-2FH地址单元。 3、特殊功能寄存器。专用寄存器除以单元地址形式给出外,还可以以寄存器符号形式给出。例如下面我们分析的一条指令 MOV IE,#85H 前面的学习我们已知道,中断允许寄存器IE的地址是80H,那么也就是此指令也可以以 MOV 80H,#85H的形式表述。

8086 CPU寻址方式

8086 CPU的七种基本的寻址方式 分别是:立即寻址、寄存器寻址、直接寻址、寄存器间接寻址、寄存器相对寻址、基址加变址寻址、相对基址加变址寻址 1. 立即寻址:操作数包含在指令中,是指令的一部分。此时的操作数称为立即数 MOV AX, 1234H 2. 寄存器寻址:操作数在CPU寄存器中,指令中指定寄存器编号 MOV SI, AX MOV AL, AH 3. 直接寻址:操作数在存储器中,指令直接包含操作数的有效地址。此时操作数一般存放在数据段DS中,采用换段前缀可以使用其它段寄存器。 MOV AX, [1234H] 4. 寄存器间接寻址:操作数在存储器中,操作数有效地址在SI、DI、BX、BP之一种。在不使用换段前缀的情况下,若有效地址在SI/DI/BX中,则以DS的值为段值;若有效地址在BP中,则以段寄存器SS的值为段值。 MOV AX, [SI] MOV [BP], CX 5. 寄存器相对寻址:操作数在存储器中,操作数的有效地址是一个基址寄存器(BX、BP)或变址寄存器(SI、DI)内容加上指令中给定的8位或16位位移量之和。即:EA = (BX/BP/SI/DI) + (8/16位位移量) 在不使用换段前缀的情况下,若SI/DI/BX的内容作为有效地址的一部分,则以DS的值为段值;若BP的内容作为有效地址的一部分,则以段寄存器SS的值为段值。 在指令中给定的8位或16位位移量以补码形式表示。在计算有效地址时,若位移量是8位,则将其有符号扩展为16位,当有效地址超过FFFFH,则对其进行64K取模。 例如:MOV AX, [DI+1223H] MOV BX, [BP-4] MOV ES:[BX+5], AL 注意:书写时基址或变址寄存器名一定要放在方括号中,而位移可以不写在方括号中。下面两条指令是等价的: MOV AX, [SI+3] 等价于MOV AX, 3[SI] 6. 基址加变址寻址:操作数在存储器中,操作数的有效地址由基址寄存器之一的内容与变址寄存器之一的内容相加得到。 EA = (BX/BP) + (SI/DI) 在不使用换段前缀的情况下,若BP的内容作为有效地址的一部分,则以SS的值为段值;否则以DS的值为段值。有效地址超过FFFFH,则对其进行64K取模。例如:MOV AX, [BX+DI] 等价形式MOV AX, [DI][BX] MOV AX, ES:[BX+SI] MOV DS:[BP+SI], AL

寄存器与7种寻址方式

一、寄存器 总共有14个16位寄存器,8个8位寄存器 通用寄存器: 数据寄存器: AH(8位) AL(8位) AX(16位) (AX和AL又称累加器) BH(8位) BL(8位) BX(16位) (BX又称基址寄存器,唯一作为存储器指针使用寄存器) CH(8位) CL(8位) CX(16位) (CX用于字符串操作,控制循环的次数,CL 用于移位) DH(8位) DL(8位) DX(16位) (DX一般用来做32位的乘除法时存放被除数或者保留余数) 指针寄存器: SP 堆栈指针(存放栈顶地址) BP 基址指针(存放堆栈基址偏移) 变址寄存器:主要用于存放某个存储单元地址的偏移,或某组存储单元开始地址的偏移, 即作为存储器(短)指针使用。作为通用寄存器,它们可以保存16位算术逻辑运算中的操 作数和运算结果,有时运算结果就是需要的存储单元地址的偏移. SI 源地址(源变址寄存器) DI 目的地址(目的变址寄存器) 控制寄存器: IP 指令指针 FLAG 标志寄存器 ①进位标志CF,记录运算时最高有效位产生的进位值。

②符号标志SF,记录运算结果的符号。结果为负时置1,否则置0。 ③零标志ZF,运算结果为0时ZF位置1,否则置0。 ④溢出标志OF,在运算过程中,如操作数超出了机器可表示数的范围称为溢出。溢出时OF位置1,否则置0。 ⑤辅助进位标志AF,记录运算时第3位(半个字节)产生的进位值。 ⑥奇偶标志PF,用来为机器中传送信息时可能产生的代码出错情况提供检验条件。当结果操作数中1的个数为偶数时置1,否则置0。 段寄存器 CS 代码段IP DS 数据段 SS 堆栈段SP BP ES 附加段 二、七种寻址方式: 1、立即寻址方式: 操作数就包含在指令中。作为指令的一部分,跟在操作码后存放在代码段。 这种操作数成为立即数。立即数可以是8位的,也可以是16位的。 例如: 指令: MOV AX,1234H 则: AX = 1234H 2、寄存器寻址方式: 操作数在CPU内部的寄存器中,指令指定寄存器号。 对于16位操作数,寄存器可以是:AX、BX、CX、DX、SI、DI、SP和BP等。对于8位操作数,寄存器可以是AL 、AH、BL、BH、CL、CH、DL、DH。 这种寻址方式由于操作数就在寄存器中,不需要访问存储器来取得操作数 因而可以取得较高的运算数度。

第六章_寻址方式和指令系统

1

第 6章 寻址方式和汇编指令 第6章
6.1、寻址方式 6.2、汇编语言指令集 6.3、汇编源程序

第 6章 寻址方式和汇编指令 第6章
6 . 1 寻址方式
▲ 汇编指令是可执行指令,每条指令对应一条机器 码,用以控制处理器中的执行部件进行各种操 作。 ▲ TMS320F281X系列的汇编指令有150多条。 ▲ 它们支持各种信号处理运算,同时也提供了应用 中所需要的多级处理和过程控制功能。 ▲ 寻址方式是指寻找指令中操作数地址的方式。

第 6章 寻址方式和汇编指令 第6章
6 . 1 寻址方式
TMS320C28x指令集采用7种存储器寻址方式: ▲ 直接寻址方式 ▲ 堆栈寻址方式 ▲ 间接寻址方式 ▲ 寄存器寻址方式 ▲ 数据/程序/IO空间立即寻址方式 ▲ 程序空间间接寻址 ▲ 字节寻址方式

第 6章 寻址方式和汇编指令 第6章
6 . 1 寻址方式
F2812 的大多数指令利用操作码中的8位字段来选择寻 址方式和对寻址方式进行修改.在 F2812 指令系统中,这个8 位字段用于以下寻址方式: (1)loc16 。 为16位数据访问选择直接/堆栈/间接/寄存器寻址方
式。
(2)loc32 。 为32位数据访问选择直接/堆栈/间接/寄存器寻址方
式。
以上7种寻址方式都与“loc16/loc32”组合起来使用。

第 6章 寻址方式和汇编指令 第6章
6 . 1 寻址方式
寻址方式选择位
由 于 F2812 提 供 了 多 种 寻 址 方 式 , 因 此 用 寻 址 方 式 选 择 位 ( AMODE )来选择8位字段( loc16/loc32 )的解码。该 位属于状态寄存器ST1。寻址方式可以大致归类如下: ▲ AMODE=0——该方式是复位后的默认方式,也是F2812的C/C++编译
器使用的方式。这种方式与C2xLP CPU的寻址方式不完全兼容。数据页指针 偏移量是6位(在C2xLP CPU中是7位),并且不支持所有的间接寻址方式。
▲ AMODE=1——该方式包括的寻址方式完全与C2xLP 器件的寻址方式
兼容。数据页指针的偏移量是7位并支持所有C2xLP 支持的间接寻址方式。
对与loc16或者loc32字段,其可用的寻址方式总结如P375所示

课后习题六(第七章)

课后习题(第七章) 1、为了缩短指令中地址码的位数,应采用( B )寻址。 A、立即数 B、寄存器 C、直接 D、间接 2、指令系统中采用不同寻址方式的目的主要是( B ) A. 可降低指令译码难度 B. 缩短指令字长、扩大寻址空间、提高编程灵活性 C. 实现程序控制 D. 提高指令执行速度 3、零地址运算指令在指令格式中不给出操作数地址,它的操作数来源自( C ) A. 立即数和栈顶 B. 暂存器 C. 栈顶或隐含约定的位置 D. 存储器 4、单地址指令中,为完成两个数的算术运算,除地址译码指明的一个操作数外,另一个数常采用( C ) A. 堆栈寻址方式 B. 立即寻址方式 C. 隐含寻址方式 D. 基址寻址方式 5、二地址指令中,操作数的物理位置安排,描述正确的是( C ) A. 两个主存单元(且依然在现指令系统中采用) B. 栈顶和次栈顶 C. 主存单元或寄存器 D. 两个同时为寄存器不允许使用 6、操作数在寄存器中的寻址方式称为( C )寻址 A. 直接 B. 立即 C. 寄存器直接 D. 寄存器间接 7、寄存器间接寻址方式中,操作数在( C ) A. 通用寄存器 B. 堆栈 C. 主存单元 D. I/O外设中 8、变址寻址方式中,操作数的有效地址是( C ) A. 基址寄存器内容加上形式地址 B. 程序计数器内容加上形式地址 C. 变址寄存器内容加上形式地址 D. 形式地址本身 9、采用基址寻址可扩大寻址范围,且( B ) A. 基址寄存器内容由用户确定,在程序执行过程中一般不可变 B. 基址寄存器内容由操作系统确定,在程序执行过程中一般不可变 C. 基址寄存器内容由用户确定,在程序执行过程中可随意变化 D. 基址寄存器内容由操作系统确定,在程序执行过程可随意变化 10、变址寻址和基址寻址的有效地址形成方式类似,但是( C ) A. 变址寄存器内容在程序执行过程中是不可变的 B. 在程序执行过程中,变址寄存器和基址寄存器的内容可以随意变化 C. 在程序执行过程中,变址寄存器的内容可随意变化 D. 以上均不对 11、堆栈寻址中,设A为累加器,SP为栈顶指针,[SP]为其指向的栈顶单元,如果进栈的动作顺序是(SP)-1→SP,(A)→[SP],那么出栈的动作顺序是( A ) A. [SP] →(A),(SP)+1→SP B. (SP)+1→SP,[SP] →(A) C. (SP)-1→SP,[SP] →(A) D. [SP] →(A),(SP)-1→SP 12、设变址寄存器为X,形式地址为D,某机具有先变址再主存间址的寻址方式,则这种寻

8086汇编各种寻址方式大全

各种寻址方式 1. 立即寻址:直接放在指令中的常数称为立即数,立即数只能是源操作数,立即数存放在指令操作码之后的存储单元中。 例:MOV AL,50H MOV DS, 1250H 错误 2. 寄存器寻址:存放在寄存器中的数据为操作数,寄存器操作数可以是源操作数,也可以是目的操作数。 例:MOV AL,BL MOV CL, BX 错误 以下寻址方式3~8,操作数都在存储器中。存储器操作数具有类型属性,如字节(BYTE)、字(WORD)、双字(DWORD)等,反映了数据占用存储单元的字节数,指令书写中,约定用方括号内容表示存储 器操作数的偏移地址;用类型名 PTR 偏移地址的形式说明指令中存储器操作数的类型,例:WORD PTR [1000H];用变量名DB/DW/DD数据序列的形式分别定义具有“变量名”的字节、字或双字存 储器操作数,如BUF DB 10H,20H。 3. 存储器寻址 (1)直接寻址:存储器操作数的16位偏移地址直接包含在指令的方括号中。 例:MOV AL,[1000H] 约定由DS提供段地址 MOV AL,CS:[1000H] ;段超越,由CS提供段地址 MOV AL,SS:[1000H] ;段超越,由SS提供段地址 例:MOV AX, [2000H] 如果(DS)= 3000H,则AX的物理首地址为:3000*10+2000 (2)寄存器间接寻址:操作数所在的存储单元的偏移地址放在指令给出的寄存器中。可用于这种寻址方式的寄存器只能是SI、DI、BP和BX。其中,SI、DI、BX约定的段寄存器是DS,而BP约定的段寄存器SS。 例:MOV AX,[SI] ;AX←DS:[SI] MOV [BX],AX ;DS:[BX]←AX 例:MOV AX, [BX] 如果(DS)= 2000H, (BX)= 1000H, 则物理地址 = 20000H + 1000H = 21000H (3)寄存器相对寻址 这种寻址方式通过基址寄存器BX、BP或变址寄存器SI、DI与一个位移量相加形成有效地址,计算物理地址的缺省段仍然是SI、DI和BX为DS,BP为SS。 例:MOV AX, COUNT[SI](也可表示为MOV AX, [COUNT+SI]) 其中COUNT为16位位移量的符号地址。 如果(DS)= 3000H,(SI)= 2000H,COUNT = 3000H 则物理地址 = 30000H + 2000H + 3000H = 35000H (4)基址寻址:操作数的有效地址是指令给定的位移量(8位或16位)与BX、BP内容之和,段寄存器约定同寄存器间接寻址,允许段超越。 例:MOV AX,[BX+3AH] ;AX←DS:[BX+3AH] MOV [BP+4EB3H],AX;SS:[BP+4EB3H]←AX (5)变址寻址:操作数的有效地址是指令给定的位移量与寄存器SI或DI内容之和,段寄存器约定在DS 中,允许段超越。 例:MOV [DI+12H],AX ;DS:[DI+12H] ←AX

8086寻址方式

成绩评定 教师签名 嘉应学院计算机学院 实验报告 课程名称:汇编语言程序设计 开课学期:2017-2018学年第1学期班级: 指导老师: 实验题目:80x86的寻址方式 学号: 姓名:

一、实验目的: 通过debug实验理解80x86的寻址方式 二、实验内容 实例实验7种重要的寻址方式 三、实验过程描述3 1.立即寻址方式(immediate addressing) 操作数直接存放在指令中 2.寄存器寻址方式(register addressing) 操作数在寄存器中,指令指定寄存器号 3.直接寻址方式(direct addressing) 操作数的有效地址只包含位移量,段地址带DS中 4.寄存器间接寻址方式(register indirect addressing) 操作数的有效地址只包含基址寄存器或变址寄存器内容一种成分

5.寄存器相对寻址方式(register relative addressing) 操作数的有效地址为基址寄存器或变址寄存器的内容和指令中指定的位移量之和 6.基址变址寻址方式(based indexed addressing) 操作数的有效地址是一个基址寄存器和一个变址寄存器的内容之和 7.相对基址变址寻址方式(relative based indexed addressing)操作数的有效地址是一个基址寄存器和变址寄存器的内容和指令中指定的位移量之和 四、实验小结 本实验实现了7种与数据有关的寻址方式,立即寻址与寄存器寻

址方式的操作数都在代码段中,剩下五种的操作数都在代码段外,通过取得操作数的偏移地址即有效地址与DS中的段基址运算得物理地址取得操作数。

七种寻址方式

七种寻址方式 一、立即寻址方式 操作数作为指令的一部分而直接写在指令中,这种操作数称为立即数,这种寻址方式也就称为立即数寻址方式。 立即数可以是8位、16位或32位,该数值紧跟在操作码之后。如果立即数为16位或32位,那么,它将按“高高低低”的原则进行存储。例如: MOV AH,80H ADD AX,1234H MOV ECX,123456H MOV B1,12H MOV W1,3456H ADD D1,32123456H 其中:B1、W1和D1分别是字节、字和双字单元。 以上指令中的第二操作数都是立即数, 立即数寻址方式通常用于对通用寄存器或内存单元赋初值。 二、寄存器寻址方式 指令所要的操作数已存储在某寄存器中,或把目标操作数存入寄存器。把在指令中指出所使用寄存器(即:寄存器的助忆符)的寻址方式称为寄存器寻址方式。 指令中可以引用的寄存器及其符号名称如下: 8位寄存器有:AH、AL、BH、BL、CH、CL、DH和DL等; 16位寄存器有:AX、BX、CX、DX、SI、DI、SP、BP和段寄存器等; 32位寄存器有:EAX、EBX、ECX、EDX、ESI、EDI、ESP和EBP等。 寄存器寻址方式是一种简单快捷的寻址方式,源和目的操作数都可以是寄存器。 1、源操作数是寄存器寻址方式 如:ADD VARD,EAX ADD VARW,AX MOV VARB,BH等。 其中:VARD、VARW和VARB是双字,字和字节类型的内存变量。在第4章将会学到如何定义它们。 2、目的操作数是寄存器寻址方式 如:ADD BH,78h ADD AX,1234h MOV EBX,12345678H等。 3、源和目的操作数都是寄存器寻址方式 如:MOV EAX,EBX MOV AX,BX MOV DH,BL等。 三、直接寻址方式 指令所要的操作数存放在内存中,在指令中直接给出该操作数的有效地址,这种寻址方式为直接寻址方式。 在通常情况下,操作数存放在数据段中,所以,其物理地址将由数据段寄存器DS和指令中给出的有效地址直接形成,但如果使用段超越前缀,那么,操作数可存放在其它段。 例:假设有指令:MOV BX,[1234H],在执行时,(DS)=2000H,内存单元21234H 的值为5213H。问该指令执行后,BX的值是什么? 解:根据直接寻址方式的寻址规则,把该指令的具体执行过程用下图来表示。

第3章 8086寻址方式和指令系统-题

第3章8086寻址方式和指令系统 一、单项选择题(共50小题) 1、指令MOV AX,[3070H]中源操作数的寻址方式为() A、寄存器间接寻址 B、立即寻址 C、直接寻址 D、变址寻址 2、DS是() A、数据段寄存器 B、代码段寄存器 C、堆栈段寄存器 D、附加数据段寄存器 3、CF是() A、进位标志位 B、辅加进位标志位 C、符号标志位 D、全零标志位 4、SS是_() A、数据段寄存器 B、代码段寄存器 C、堆栈段寄存器 D、附加数据段寄存器 5、指令MOV [BX],AX中 A、目的操作数是寄存器操作数 B、源操作数是存储器操作数 C、目的操作数是存储器操作数 D、源操作数是立即操作数 6、CS是() A、数据段寄存器 B、代码段寄存器 C、堆栈段寄存器 D、附加数据段寄存器 7、指令MOV AX,[BP]中 A、源操作数存于数据段 B、源操作数存于堆栈段 C、目的操作数存于数据段 D、目的操作数存于堆栈段 8、BX是() A、8位通用寄存器 B、16位通用寄存器 C、16位段寄存器 D、16位变址寄存器 9、ZF是() A、进位标志 B、方向标志 C、符号标志 D、零标志 10、IP是() A、指令指针寄存器 B、堆栈指针寄存器 C、通用寄存器 D、变址寄存器 11、SI是() A、8位通用寄存器 B、16位通用寄存器 C、16位段寄存器 D、指令指针寄存器 12、DL是() A、16位段寄存器 B、16位通用寄存器 C、8位通用寄存器 D、16位标志寄存器 13、指令IDIV BX 的含义是() A、(AX)/(BX) B、(DX:AX)/(BX) C、(AL)/(BX) D、(AL)/(BL) 14、下面4个寄存器中,不能作为间接寻址的寄存器是() A、BX B、DX C、BP D、DI 15、设SS=2000H,执行下列程序段后SP=() MOV SP,2000H

寻址方式

寻址方式:1.立即寻址:操作数直接出现在指令中,紧跟在操作码的后面,作为指令的一部分于操作码一起存放在程序储存器中,可以立即得到并执行,不需要经过别的途径去寻找,在数前常冠以#作为前缀。2.寄存器寻址:在指令选定的某寄存器中存放或读取操作数3,寄存器间接寻址:由指令指出某一寄存器的内容,常有@前缀。4,直接寻址:指令中直接给出操作数所在的存储器地址。5,变址寻址:基址寄存器加变址寄存器间接寻址,MOVC A,@A+DPTR.6,相对寻址:以当前程序计数器PC值加上指令中给出的偏移量rel而构成实际操作数地址的寻址方法,它用于访问程序存储器,常出现在相对转移指令中。7,位寻址:在位操作指令中直接给出位操作数的地址可以对片内RAM中128个位和特殊功能寄存器SFR中的93个位进行寻址。 数据传送类指令:一、以累加器为目的操作数的指令 MOV A, Rn ; (Rn)→A,n=0~7 MOV A, @Ri ; ((Ri))→A,i=0,1 MOV A, direct ;(dir ect)→A MOV A, #data ; #data→A 二、以Rn为目的操作数的指令 MOV Rn, A ; (A)→Rn, n=0~7 MOV Rn, direct ;(direct)→Rn, n=0~7 MOV Rn, #data ; #data→Rn, n=0~7 三、以直接地址direct为目的操作数的指令 MOV direct, A ; (A)→direct MOV direct, Rn ;(Rn)→direct, n=0~7 MOV direct1, direct2; MOV direct, @Ri ;((Ri))→direct MOV direct, #data ; #data→direct 四、以寄存器间接地址为目的操作数的指令 MOV @Ri, A ;(A)→((Ri)),i=0,1 MOV @Ri, direct ;(direct)→((Ri)) MOV @Ri, #data ; #data→((Ri)) 五、16位数传送指令 MOV DPTR, #data16 ; #data16→DPTR 唯一的16位数据的传送指令, 立即数的高8位送入DPH, 立即数的低8位送入DPL。 六、堆栈操作指令 内部RAM中可以设定一个后进先出(LIFO-Last In First Out)的区域称作堆栈,堆栈指针SP始终指向堆栈的 栈顶位置。 1、进栈指令 PUSH direct 先将栈指针SP加1,然后把direct中的内容送到SP指示的内部RAM单元中 2、出栈指令 POP direct SP指示的栈顶(内部RAM单元)内容送入direct字节单元 中,栈指针SP减1 七、累加器A与外部数据存储器传送指令 MOVX A, @DPTR ;((DPTR))→A,读外部RAM/IO

相关主题
文本预览
相关文档 最新文档