七种寻址方式

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

七种寻址方式

一、立即寻址方式

操作数作为指令的一部分而直接写在指令中,这种操作数称为立即数,这种寻址方式也就称为立即数寻址方式。

立即数可以是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的值是什么?

解:根据直接寻址方式的寻址规则,把该指令的具体执行过程用下图来表示。

从图中,可看出执行该指令要分三部分:

由于1234H是一个直接地址,它紧跟在指令的操作码之后,随取指令而被读出;访问数据段的段寄存器是DS,所以,用DS的值和偏移量1234H相加,得存储单元的物理地址:21234H;取单元21234H的值5213H,并按“高高低低”的原则存入寄存器BX中。所以,在执行该指令后,BX的值就为5213H。

直接寻址的地址要写在括号“[”,“]”内。在程序中,直接地址通常用内存变量名来表示,如:MOV BX,VARW,其中,VARW是内存字变量。

试比较下列指令中源操作数的寻址方式(VARW是内存字变量):

MOV AX,1234H MOV AX,[1234H];前者是立即寻址,后者是直接寻址

MOV AX,VARW MOV AX,[VARW];两者是等效的,均为直接寻址

四、寄存器间接寻址方式

操作数在存储器中,操作数的有效地址用SI、DI、BX和BP等四个寄存器之一来指定,称这种寻址方式为寄存器间接寻址方式。该寻址方式物理地址的计算方法如下:

在不使用段超越前缀的情况下,有下列规定:

若有效地址用SI、DI和BX等之一来指定,则其缺省的段寄存器为DS;

若有效地址用BP来指定,则其缺省的段寄存器为SS(即:堆栈段)。

例:假设有指令:MOV BX,[DI],在执行时,(DS)=1000H,(DI)=2345H,存储单元12345H的内容是4354H。问执行指令后,BX的值是什么?

解:根据寄存器间接寻址方式的规则,在执行本例指令时,寄存器DI的值不是操作数,而是操作数的地址。该操作数的物理地址应由DS和DI的值形成,即:

PA=(DS)*16+DI=1000H*16+2345H=12345H。

所以,该指令的执行效果是:把从物理地址为12345H开始的一个字的值传送给BX。

五、寄存器相对寻址方式

操作数在存储器中,其有效地址是一个基址寄存器(BX、BP)或变址寄存器(SI、DI)的内容和指令中的8位/16位偏移量之和。其有效地址的计算公式如公式所示。

若有效地址用SI、DI和BX等之一来指定,则其缺省的段寄存器为DS;

若有效地址用BP来指定,则其缺省的段寄存器为SS。

例:假设指令:MOV BX,[SI+100H],在执行它时,(DS)=1000H,(SI)=2345H,内存单元12445H的内容为2715H,问该指令执行后,BX的值是什么?

解:根据寄存器相对寻址方式的规则,在执行本例指令时,源操作数的有效地址EA为:

EA=(SI)+100H=2345H+100H=2445H

该操作数的物理地址应由DS和EA的值形成,即:

PA=(DS)*16+EA=1000H*16+2445H=12445H。

所以,该指令的执行效果是:把从物理地址为12445H开始的一个字的值传送给BX。

六、基址加变址寻址方式

操作数在存储器中,其有效地址是一个基址寄存器(BX、BP)和一个变址寄存器(SI、DI)的内容之和。其有效地址的计算公式如公式所示。

在不使用段超越前缀的情况下,规定:如果有效地址中含有BP,则缺省的段寄存器为SS;否则,缺省的段寄存器为DS。

例:假设指令:MOV BX,[BX+SI],在执行时,(DS)=1000H,(BX)=2100H,(SI)=0011H,内存单元12111H的内容为1234H。问该指令执行后,BX的值是什么?

解:根据基址加变址寻址方式的规则,在执行本例指令时,源操作数的有效地址EA为:

EA=(BX)+(SI)=2100H+0011H=2111H

该操作数的物理地址应由DS和EA的值形成,即:

PA=(DS)*16+EA=1000H*16+2111H=12111H

所以,该指令的执行效果是:把从物理地址为12111H开始的一个字的值传送给BX。

七、相对基址加变址寻址方式

操作数在存储器中,其有效地址是一个基址寄存器(BX、BP)的值、一个变址寄存器(SI、DI)的值和指令中的8位/16位偏移量之和。其有效地址的计算公式如公式所示。

如果有效地址中含有BP,则其缺省的段寄存器为SS;否则,其缺省的段寄存器为DS。指令中给出的8位/16位偏移量用补码表示。

例:假设指令:MOV AX,[BX+SI+200H],在执行时,(DS)=1000H,(BX)=2100H,(SI)=0010H,内存单元12310H的内容为1234H。问该指令执行后,AX的值是什么?

解:根据相对基址加变址寻址方式的规则,在执行本例指令时,源操作数的有效地址EA为:

EA=(BX)+(SI)+200H=2100H+0010H+200H=2310H

该操作数的物理地址应由DS和EA的值形成,即:

PA=(DS)*16+EA=1000H*16+2310H=12310H

所以,该指令的执行效果是:把从物理地址为12310H开始的一个字的值传送给AX。其执行过程如图所示。

用D1[i]来访问一维数组D1的第i个元素,它的寻址有一个自由度,用

D2[i][j]来访问二维数组D2的第i行、第j列的元素,其寻址有二个自由度。多一个可变的量,其寻址方式的灵活度也就相应提高了。

相对基址加变址寻址方式有多种等价的书写方式,下面的书写格式都是正确的,并且其寻址含义也是一致的。

MOV AX,[BX+SI+1000H]MOV AX,1000H[BX+SI]

MOV AX,1000H[BX][SI]MOV AX,1000H[SI][BX]

但书写格式BX[1000+SI]和SI[1000H+BX]等是错误的,即所用寄存器不能在“[“,”]”之外,该限制对寄存器相对寻址方式的书写也同样起作用。

相对基址加变址寻址方式是以上7种寻址方式中最复杂的一种寻址方式,它可变形为其它类型的存储器寻址方式。下表列举出该寻址方式与其它寻址方式之间的变形关系。

汇编语言设计复习题(第2章:8086的寻址方式和指令系统)

1、下列指令属于基址加变址寻址方式的是( MOV DX,DS:[BP][SI] )。 DX 2、当程序顺序执行时,每取一条指令语句,IP指针增加的值是( D )。 DX A.1 B.2 C.3 D.由指令长度决定的 3、下列属于合法的指令是( D ) DX A.MOV DS,ES B.MOV [SI],[DI] C.MOV AX,BL D.MOV [DI], BL 4、若AX=349DH,CX=000FH。则执行指令AND AX,CX后,AX的值是( 000DH )。 DX 5、设DS=8225H,DI=3942H,指令NEG BYTE PTR[DI]操作数的物理地址是 ( 85B92H ) DX 6、下列寄存器组中在段内寻址时可以提供偏移地址的寄存器组是( B ) DX A、AX,BX,CX,DX B、BX,BP,SI,DI C、SP,IP,BP,DX D、CS, DS,ES,SS 7、对寄存器AX的内容乘以4的正确指令序列是( SHL AX,1 SHL,AX, 1 )。 DX 8、执行INC指令除对SF、ZF有影响外,还要影响的标志位是( OF,AF,PF )。 DX 9、设DH=10H,执行NEG DH指令后,正确的结果是( DH=0F0H CF=1 )。 DX 10、下列传送指令中有语法错误的是( A )。 DX A、MOV CS,AX B、MOV DS,AX C、MOV SS,AX D、MOV ES,AX 11、下面指令执行后,改变AL寄存器内容的指令是( D )。 DX A、TEST AL,02H B、OR AL,AL C、CMP AL,BL D、AND AL,BL 12、执行除法指令后,影响的标志位是( AF,CF,OF,PF,SF,ZF都不确定 )。 DX 13、执行下面指令序列后,结果是( AX=0FF82H )。 DX MOV AL,82H CBW 14、与MOV BX,OFFSET VAR指令完全等效的指令是( D )。 DX A、MOV BX,VAR B、LDS BX,VAR C、LES BX,VAR D、LEA BX,VAR 15、在段定义时,如果定位类型用户未选择,就表示是隐含类型,其隐含类型是 ( PARA )。 DX 16、MOV SP,3210H PUSH AX 执行上述指令序列后,SP寄存器的值是( 320EH )。 DX 17、BUF DW 10H DUP(3 DUP(2,10H),3,5) 上述语句汇编后,为变量BUF分配的存储单元字节数是( 100H )。 DX 18、MOV AH,7896H ADD AL,AH 上述指令执行后,标志位CF和OF的值是( CF=1,OF=0 )。 DX 19、完成将带符号数AX的内容除以2的正确指令是( SHR AX,1 )。 DX 20、在汇编语言程序中,对END语句的叙述正确的是( C )。 DX A.END语句是一可执行语句 B.END语句表示程序执行到此结束

实验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

作业习题 寻址方式和指令

寻址方式和指令习题 一、选择题 1、MOVX A,@DPTR指令中源操作数的寻址方式是() (A)寄存器寻址(B)寄存器间接寻址(C)直接寻址(D)立即寻址 2、ORG 0003H LJMP 2000H ORG 000BH LJMP 3000H 当CPU响应外部中断0后,PC的值是() (A)0003H (B)2000H (C)000BH (D)3000H 3、执行PUSH ACC指令,MCS-51完成的操作是() (A)SP+1 SP (ACC)(SP)(B)(ACC)(SP)SP-1 SP (C)SP-1 SP (ACC)(SP) (D)(ACC)(SP)SP+1 SP 4、LCALL指令操作码地址是2000H,执行完相子程序返回指令后,PC=() (A)2000H (B)2001H (C)2002H (D)2003H 5、51执行完MOV A,#08H后,PSW的哪一位被置位() (A)C (B)F0 (C)OV (D)P 6、下面条指令将MCS-51的工作寄存器置成3区() (A)MOV PSW,#13H (B)MOV PSW,#18H (C)SETB PSW.4 CLR PSW.3 (D) SETB PSW.3 CLR PSW.4 7、执行MOVX A,@DPTR指令时,MCS-51产生的控制信号是()(A)/PSEN (B)ALE (C)/RD (D)/WR 8、MOV C,#00H的寻址方式是() (A)位寻址(B)直接寻址(C)立即寻址(D)寄存器寻址 9、ORG 0000H AJMP 0040H ORG 0040H MOV SP,#00H 当执行完上面的程序后,PC的值是()

第二章8086习题答案

第二章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,则该数据所在内存单元

汇编实验报告一 熟悉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

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 标志值填充。 各移位操作过程如图所示。

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

第二章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,则该数据所在内存单元

单片机寻址方式

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、为了缩短指令中地址码的位数,应采用( 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,某机具有先变址再主存间址的寻址方式,则这种寻

七种寻址方式

七种寻址方式 一、立即寻址方式 操作数作为指令的一部分而直接写在指令中,这种操作数称为立即数,这种寻址方式也就称为立即数寻址方式。 立即数可以是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的值是什么? 解:根据直接寻址方式的寻址规则,把该指令的具体执行过程用下图来表示。

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

7种寻址方式

七种寻址方式 1、(直接寻址方式) 指令所要的操作数存放在内存中,在指令中直接给出该操作数的有效地址,这种寻址方式为直接寻址方式。在通常情况下,操作数存放在数据段中,所以,其物理地址将由数据段寄存器DS和指令中给出的有效地址直接形成,但如果使用段超越前缀,那么,操作数可存放在其它段。例:假设有指令:MOV BX, [1234H],在执行时,(DS)=2000H,内存单元21234H的值为5213H。问该指令执行后,BX的值是什么?解:根据直接寻址方式的寻址规则,把该指令的具体执行过程用下图来表示。从图中,可看出执行该指令要分三部分: 由于1234H是一个直接地址,它紧跟在指令的操作码之后,随取指令而被读出;访问数据段的段寄存器是DS,所以,用DS的值和偏移量1234H 相加,得存储单元的物理地址:21234H;取单元21234H的值5213H,并按“高高低低”的原则存入寄存器BX中。所以,在执行该指令后,BX的值就为5213H。由于数据段的段寄存器默认为DS,如果要指定访问其它段内的数据,可在指令中用段前缀的方式显式地书写出来。下面指令的目标操作数就是带有段前缀的直接寻址方式。 MOV ES:[1000H], AX 直接寻址方式常用于处理内存单元的数据,其操作数是内存变量的值,该寻址方式可在64K字节的段内进行寻址。注意:立即寻址方式和直接寻址方式的书写格式的不同,直接寻址的地址要写在括号“[”,“]”内。在程序中,直接地址通常用内存变量名来表示,如:MOV BX, VARW,其中,VARW是内存字变量。试比较下列指令中源操作数的寻址方式(VARW是内存字变量): MOV AX, 1234H MOV AX, [1234H] ;前者是立即寻址,后者是直接寻址 MOV AX, VARW MOV AX, [VARW] ;两者是等效的,均为直接寻址 2、(寄存器间接寻址方式) 操作数在存储器中,操作数的有效地址用SI、DI、BX和BP等四个寄存器之一来指定,称这种寻址方式为寄存器间接寻址方式。该寻址方式物理地址的计算方法如下:

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中的段基址运算得物理地址取得操作数。

step7寻址方式

完整的一条指令,应该包含指令符+操作数(当然不包括那些单指令,比如NOT等)。其中的操作数是指令要执行的目标,也就是指令要进行操作的地址。我们知道,在PLC中划有各种用途的存储区,比如物理输入输出区P、映像输入区I、映像输出区Q、位存储区M、定时器T、计数器C、数据区DB和L等,同时我们还知道,每个区域可以用位(BIT)、字节(BYTE)、字(WORD)、双字(DWORD)来衡量,或者说来指定确切的大小。当然定时器T、计数器C不存在这种衡量体制,它们仅用位来衡量。由此我们可以得到,要描述一个地址,至少应该包含两个要素:1、存储的区域2、这个区域中具体的位置比如:A Q2.0 其中的A是指令符,Q2.0是A的操作数,也就是地址。这个地址由两部分组成:Q:指的是映像输出区2.0:就是这个映像输出区第二个字节的第0位。由此,我们得出,一个确切的地址组成应该是:〖存储区符〗〖存储区尺寸符〗〖尺寸数值〗.〖位数值〗,例如:DBX200.0。DB X 200 . 0 其中,我们又把〖存储区符〗〖存储区尺寸符〗这两个部分合称为:地址标识符。这样,一个确切的地址组成,又可以写成:地址标识符+ 确切的数值单元【间接寻址的概念】寻址,就是指定指令要进行操作的地址。给定指令操作的地址方法,就是寻址方法。在谈间接寻址之前,我们简单的了解一下直接寻址。所谓直接寻址,简单的说,就是直接给出指令的确切操作数,象上面所说的,A Q2.0,就是直接寻址,对于A这个指令来说,Q2.0就是它要进行操作的地址。这样看来,间接寻址就是间接的给出指令的确切操作数。对,就是这个概念。比如:A Q[MD100] ,A T[DBW100]。程序语句中用方刮号[ ] 标明的内容,间接的指明了指令要进行的地址,这两个语句中的MD100和DBW100称为指针Pointer,它指向它们其中包含的数值,才是指令真正要执行的地址区域的确切位置。间接由此得名。西门子的间接寻址方式计有两大类型:存储器间接寻址和寄存器间接寻址。【存储器间接寻址】存储器间接寻址的地址给定格式是:地址标识符+指针。指针所指示存储单元中所包含的数值,就是地址的确切数值单元。存储器间接寻址具有两个指针格式:单字和双字。单字指针是一个16bit的结构,从0-15bit,指示一个从0-65535的数值,这个数值就是被寻址的存储区域的编号。双字指针是一个32bit的结构,从0-2bit,共三位,按照8进制指示被寻址的位编号,也就是0-7;而从3-18bit,共16位,指示一个从0-65535的数值,这个数值就是被寻址的字节编号。指针可以存放在M、DI、DB和L区域中,也就是说,可以用这些区域的内容来做指针。单字指针和双字指针在使用上有很大区别。下面举例说明:L DW#16#35 //将32位16进制数35存入ACC1 T MD2 //这个值再存入MD2,这是个32位的位存储区域L +10 //将16位整数10存入ACC1,32位16进制数35自动移动到ACC2 T MW100 //这个值再存入MW100,这是个16位的位存储区域OPN DBW[MW100] //打开DBW10。这里的[MW100]就是个单字指针,存放指针的区域是M区,MW100中的值10,就是指针间接指定的地址,它是个16位的值!-------- L L#+10 //以32位形式,把10放入ACC1,此时,ACC2中的内容为:16位整数10 T MD104 //这个值再存入MD104,这是个32位的位存储区域A I[MD104] //对I1.2进行与逻辑操作!=DIX[MD2] //赋值背景数据位DIX6.5!-------- A DB[MW100].DBX[MD2] //读入DB10.DBX6.5数据位状态=Q[MD2] //赋值给Q6.5 -------- A DB[MW100].DBX[MD2] //读入DB10.DBX6.5数据位状态=Q[MW100] //错误!!没有Q10这个元件--------------------------------------------------------------------------------------------------- 从上面系列举例我们至少看出来一点:单字指针只应用在地址标识符是非位的情况下。的确,单字指针前面描述过,它确定的数值是0-65535,而对于byte.bit这种具体位结构来说,只能用双字指针。这是它们的第一个区别,单字指针的另外一个限制就是,它只能对T、C、DB、FC 和FB进行寻址,通俗地说,单字指针只可以用来指代这些存储区域的编号。相对于单字指针,双字指针就没有这样的限制,它不仅可以对位地址进行寻址,还可以对BYTE、WORD、DWORD寻址,并且没有区域的限制。不过,有得必有失,在对非位的区域进行寻址时,

汇编语言——7种寻址方式

电子信息工程学系实验报告——适用于计算机课程 课程名称:汇编语言程序设计Array实验项目名称:熟悉debug命令,以mov指令为例掌握不同的寻址方式 实验时间: 2012.9.20 班级:姓名:学号: 实验目的: 掌握debug命令,熟悉7种寻址方式。 实验环境: Win7,masm,link 实验内容及过程: 输入给出的程序,通过对程序的调试和运行了解指令操作数的寻址方式以及它的有效地址。 实验结果及分析: 2. 代码寄存器的值寻址方式有效地址 --------------------------------------------------------------------------------------------------------- mov dx,1234h (dx)=1234h 立即寻址无 mov cl,ds:[0000h] (cl)=01h 直接寻址 0000h mov al,[si] (al)=01h 寄存器间接寻址 0000h mov [di],al [di]=01h 寄存器寻址无 mov al,x[si] (al)=01h 寄存器相对寻址 0001h mov al,[bx][si] (al)=01h 基址变址寻址 0000h 3. 初始化: 程序执行后:

实验心得: 通过此次实验。掌握了debug的基本使用方法,知道了几个常用的命令及其结果代表的含义,了解从源代码到可执行文件会经过编译跟链接阶段。明白了编写汇编程序及其调试的步骤和方法。 附录: 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] mov si,0000h mov di,0002h mov al,[si] 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] mov y[di],al mov si,0000h mov di,0000h mov bx,0000h mov bp,0004h mov al,[bx][si] 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 备注:以上各项空白处若填写不够,可自行扩展

相关文档
最新文档