寻址方式和指令系统
- 格式:doc
- 大小:104.00 KB
- 文档页数:17
计算机原理_3寻址方式和指令系统寻址方式和指令系统是计算机原理中非常重要的概念,它们决定了计算机能够进行的操作和数据的处理方式。
下面将从寻址方式和指令系统的概念、分类和特点三个方面详细介绍。
一、寻址方式在计算机中,寻址方式是指CPU访问内存中数据的方式。
常见的寻址方式包括直接寻址、间接寻址、变址寻址和相对寻址等。
1、直接寻址直接寻址是指通过给出数据的内存地址来访问数据。
在直接寻址中,指令中给出了待访问的内存地址,CPU直接从该内存地址中读取/写入数据。
2、间接寻址间接寻址是指通过寄存器中的地址来访问数据。
在间接寻址中,指令中给出了一个寄存器的编号,CPU将寄存器中的地址作为内存地址进行读取/写入操作。
3、变址寻址变址寻址是指通过给出基地址和偏移量来计算内存地址的方法。
在变址寻址中,指令中给出了一个基地址和一个偏移量,CPU通过将两者相加来得到最终的内存地址进行操作。
4、相对寻址相对寻址是指通过给出相对于指令计数器的偏移量来计算内存地址的方式。
在相对寻址中,指令中给出了一个偏移量,CPU将偏移量与指令计数器相加来得到最终的内存地址。
二、指令系统指令系统是指计算机可以执行的指令的集合。
根据指令的类型和功能划分,指令系统可以分为以下几种类型。
1、数据传输指令数据传输指令用于在CPU和内存、寄存器之间传输数据。
例如,将内存中的数据传送到寄存器中或将寄存器中的数据传送到内存中等。
2、算术指令算术指令用于进行数值运算,如加、减、乘、除等。
这些指令可以对寄存器或内存中的数据进行算术运算,并将结果存放在寄存器或内存中。
3、逻辑指令逻辑指令用于进行逻辑运算,如与、或、非等。
这些指令可以对寄存器或内存中的数据进行逻辑运算,并将结果存放在寄存器或内存中。
4、控制指令控制指令用于控制程序的执行流程,如跳转、条件分支等。
这些指令可以根据条件改变程序的执行顺序或跳转到指定的地址执行。
指令系统的设计需要考虑指令的种类、格式、寻址方式和作用等因素。
【计算机组成原理】指令系统-寻址⼀、指令和数据的寻址⽅式操作数或指令在存储器中的地址:某个操作数或某条指令存放在某个存储单元时其存储单元的编号在存储器中,操作数或指令字写⼊或读出的⽅式,有地址指定⽅式、相联存储⽅式和堆栈存取⽅式。
寻找⽅式:当采⽤地址指定⽅式时,形成操作数或指令地址的⽅式。
寻址⽅式分为两类:指令寻址和数据寻址。
1)指令寻址:确定下⼀条预执⾏指令的指令地址a、顺序寻址:(PC)+1->PC 程序计数器⾃动加1b、跳跃寻址:由转移指令指出2)数据寻址:确定本条指令的操作数地址指令中所给出的地址码,并不⼀定是操作数的有效地址。
寻址过程就是把操作数的形式地址,变换为操作数的有效地址。
例如:⼀种单地址指令的结构如下所⽰,其中⽤X I D各字段组成该指令的操作数地址。
⼆、寻址⽅式1、隐含寻址(操作数在累加寄存器中)在指令中不明显的给出⽽是隐含着操作数的地址例如:单地址的指令格式,没有在地址字段指明第⼆操作数地址,⽽是规定累加寄存器AL或AX作为第⼆操作数地址,AL或AX对单地址指令格式来说是隐含地址eg: MOV AL ,LSRC_BYTEMUL RSRC_BYTEADD寻址特征A操作数地址隐含在操作码中,(寻址特征指明寻址类型)。
另⼀个操作数隐含在ACC中先在内存中地址为A的地⽅找到⼀个操作数,另⼀个操作数隐含在寄存器ACC⾥,从ACC⾥取出另外⼀个操作数,然后和给出的A 地址中的数相加暂存在ACC中。
2、⽴即寻址形式地址A就是操作数本⾝OP⽴即寻址特性 #A指令执⾏阶段不访存A的位数限制了⽴即数的范围3、直接寻址EA=A直接根据读内存找到操作数,形式地址不需要经过任何处理。
执⾏阶段访问⼀次存储器A的位数决定了该指令操作数的寻址范围MOV AX,[2222H]:将有效地址为2222H的内存单元的内容读到累加器AX中4、间接寻址EA=(A)有效地址由形式地址间接提供,形式地址是操作数的地址的地址OP间接寻址标识 A根据A的内容到内存中寻找到的是操作的数地址,再根据这个地址去找操作数。
寻址⽅式和指令系统《微机原理》复习思考题第3章 8086的寻址⽅式和指令系统3.1 8086汇编语⾔指令的寻址⽅式有哪⼏类?⽤哪⼀种寻址⽅式的指令执⾏速度最快?3.2 直接寻址⽅式中,⼀般只指出操作数的偏移地址,那么,段地址如何确定?如果要⽤某个段寄存器指出段地址,指令中应如何表⽰?3.3 在寄存器间接寻址⽅式中,如果指令中没有具体指明段寄存器,那么,段地址如何确定?3.4 ⽤寄存器间接寻址⽅式时,BX,BP,SI,DI分别针对什么情况来使⽤?这四个寄存器组合间接寻址时,地址是怎样计算的?举例进⾏说明。
3.5 设DS=2100H,SS=5200H,BX=1400H,BP=6200H,说明下⾯两条指令所进⾏的具体操作:MOV BYTE PTR [BP], 2000MOV WORD PTR [BX], 20003.6 使⽤堆栈操作指令时要注意什么问题?传送指令和交换指令在涉及内容操作数时分别要注意什么问题?3.7 下⾯这些指令中哪些是正确的?哪些是错误的?如果是错误的,请说明原因。
XCHG CS, AXMOV [BX], [1000]XCHG BX, IPPUSH CSPOP CSIN BX, DXMOV BYTE[BX], 1000MOV CS, [1000]3.8 8086系统中,当对SS和SP寄存器的值进⾏修改时,有什么特殊规定?这样做的原因是什么?[解答] 凡是遇到给SS寄存器赋值的传送指令时,系统会⾃动禁⽌外部中断,等到本条指令和下条指令执⾏之后,⼜⾃动恢复对SS寄存器赋值前的中断开放情况。
这样做是为了允许程序员连续⽤两条指令分别对SS和SP寄存器赋值,同时⼜防⽌堆栈空间变动过程中出现中断。
3.9 以下是格雷码的编码表0——0000 1——0001 2——0011 3——0010 4——01105——0111 6——0101 7——0100 8——1100 9——1101请⽤换码指令和其他指令设计⼀个程序段,实现格雷码往ASCII的转换。
第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、附加数据段寄存器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)B、DXC、BPD、DI15、设SS=2000H,执⾏下列程序段后SP=()MOV SP,2000HPUSH AXA、21FFEHB、20000HC、22000HD、22002H16、寄存器间接寻址⽅式中,操作数在( )中。
A、通⽤寄存器B、堆栈C、内存单元D、段寄存器17、JMP WORD PTR[DI]是( )A、段内间接转移B、段间间接转移C、段内直接转移D、段间直接转移18、堆栈指针SP的作⽤是( )。
单片机指令系统-第3讲寻址方式单片机指令系统第 3 讲寻址方式在单片机的世界里,指令系统就如同它的语言规则,而寻址方式则是这套规则中至关重要的一部分。
简单来说,寻址方式决定了单片机如何找到操作数,也就是数据在存储器中的位置。
就好像我们在图书馆找一本书,需要知道它在哪个书架、哪一排,这就是“寻址”。
在单片机中,常见的寻址方式有以下几种:1、立即寻址立即寻址是最简单直接的一种方式。
在这种寻址方式中,操作数直接包含在指令中。
比如说,指令“MOV A, 50H”,这里的“50H”就是操作数,它直接跟在指令后面,单片机一看就知道要把 50H 这个值送到累加器 A 中。
这种方式的优点是指令执行速度快,因为操作数就在指令中,不需要再去别的地方找。
但缺点也很明显,就是能表示的操作数范围有限,通常只能是 8 位或 16 位的数值。
2、直接寻址直接寻址就稍微复杂一点了。
在这种方式下,操作数的地址直接出现在指令中。
例如,指令“MOV A, 30H”,这里的 30H 是操作数所在的地址,单片机通过这个地址就能找到存储在 30H 单元中的数据,并把它送到累加器 A 中。
直接寻址可以访问片内 RAM 的 00H 7FH 单元以及特殊功能寄存器(SFR)。
但要注意的是,对于 SFR,只能使用直接寻址方式进行访问。
3、寄存器寻址寄存器寻址就是操作数在寄存器中。
比如指令“MOV A, R0”,就是把寄存器 R0 中的内容送到累加器 A 中。
这种方式的优点是指令短,执行速度快,因为寄存器的访问速度通常比内存快得多。
在 8051 单片机中,寄存器寻址可以使用工作寄存器 R0 R7 以及部分特殊功能寄存器。
4、寄存器间接寻址寄存器间接寻址与寄存器寻址有点类似,但操作数的地址在寄存器中。
比如指令“MOV A, @R0”,这里的 R0 中存放的不是操作数,而是操作数的地址,单片机先从 R0 中取出地址,再根据这个地址找到操作数并送到累加器 A 中。
《微机原理》复习思考题第3章 8086的寻址方式和指令系统3.1 8086汇编语言指令的寻址方式有哪几类?用哪一种寻址方式的指令执行速度最快?3.2 直接寻址方式中,一般只指出操作数的偏移地址,那么,段地址如何确定?如果要用某个段寄存器指出段地址,指令中应如何表示?3.3 在寄存器间接寻址方式中,如果指令中没有具体指明段寄存器,那么,段地址如何确定?3.4 用寄存器间接寻址方式时,BX,BP,SI,DI分别针对什么情况来使用?这四个寄存器组合间接寻址时,地址是怎样计算的?举例进行说明。
3.5 设DS=2100H,SS=5200H,BX=1400H,BP=6200H,说明下面两条指令所进行的具体操作:MOV BYTE PTR [BP], 2000MOV WORD PTR [BX], 20003.6 使用堆栈操作指令时要注意什么问题?传送指令和交换指令在涉及内容操作数时分别要注意什么问题?3.7 下面这些指令中哪些是正确的?哪些是错误的?如果是错误的,请说明原因。
XCHG CS, AXMOV [BX], [1000]XCHG BX, IPPUSH CSPOP CSIN BX, DXMOV BYTE[BX], 1000MOV CS, [1000]3.8 8086系统中,当对SS和SP寄存器的值进行修改时,有什么特殊规定?这样做的原因是什么?[解答] 凡是遇到给SS寄存器赋值的传送指令时,系统会自动禁止外部中断,等到本条指令和下条指令执行之后,又自动恢复对SS寄存器赋值前的中断开放情况。
这样做是为了允许程序员连续用两条指令分别对SS和SP寄存器赋值,同时又防止堆栈空间变动过程中出现中断。
3.9 以下是格雷码的编码表0——0000 1——0001 2——0011 3——0010 4——01105——0111 6——0101 7——0100 8——1100 9——1101请用换码指令和其他指令设计一个程序段,实现格雷码往ASCII的转换。
3.10 用加法指令设计一个简单程序,实现两个16位十进制数的加法,结果放在被加数单元。
3.11 为什么用增量指令或减量指令设计程序时,在这类指令后面不用进位标志CF作为判断依据?3.12 用乘法指令时,特别要注意先判断用有符号数乘法指令还是用无符号数乘法指令,这是为什么?3.13 字节扩展指令和字扩展指令用在什么场合?举例说明。
[解答] 遇到两个字节相除时,要预先执行CBW指令,以便产生一个双倍长度的被除数。
否则就不能正确的执行除法操作。
CWD同理。
例如:CBW MOV AL ,a; CWD MOV AX, X;MOV CL , b; MOV CX, Y;CBW AL; CWD AX;DIV AX, CL; DIV AX, CX;3.14 什么叫BCD码?什么叫组合的BCD码?什么叫非组合的BCD码?8086 汇编语言在对BCD码进行加、减、乘、除运算时,采用什么方法?[解答] 在计算机中,可用4位二进制码表示一个十进制码,这种代码叫BCD码;用一个字节表示2位BCD码就是BCD码;计算机对BCD码进行加、减、乘、除运算,通常采用两种办法:一种是在指令系统中设置一套转专用于BCD码的指令;另一种方法是利用对普通二进制数的运算指令算出结果,然后用专门的指令对结果进行调整,或者反过来,先对数据进行调整,再用二进制数指令进行运算。
(以上7题由陈军解答)3.15 用普通运算指令执行BCD码运算时,为什么要进行十进制调整?具体讲,在进行BCD码的加、减、乘、除运算时,程序段的什么位置必须加上十进制调整指令?[解答] 在BCD码中,只允许0?/FONT>9这10个数字出现,但有时候的运算结果会超过此范围,因此要进行十进制调整。
进行加、件或乘法运算时,调整指令必须紧跟在算术指令后面,在进行除法运算时,调整指令放在除法指令之前。
3.16 普通移位指令(带CF的和不带CF的两类)在执行操作时,有什么差别?在编制乘法程序时,为什么常用移位指令来代替乘除法指令?试编写一个程序段,实现将BX中的数除以10,结果仍放在BX中。
3.17串操作指令使用时特别要注意和SI,DI这两个寄存器及方向标志DF密切相关。
请具体就指令MOVSB/MOVSW、CMPSB/CMPSW、SCASB/SCASW、LODSB/LODSW、STOSB/STOSW列表说明和SI、DI及DF 的关系。
[解答]3.18 用串操作指令设计实现以下功能的程序段:首先将100H个数从2170H处搬到1000H处,然后,从中检索相等于AL中字符的单元,并将此单元值换成空格符。
[解答] BUFF1 EQU,1000HBUFF2 EQU,2170HSTART: MOV SI,OFFSET BUFF2LEA DI,BUFF1MOV CX,100HCYCLE: MOV AL,[SI]MOV [DI],ALINC SIINC DILOOP CYCLEANOTHER:MOV DI,OFFSET BUFF1MOV CX,100CLDAGE: SCASBDEC CXJZ FINJNZ AGEJMP OVERFIN: MOV [DI],20HCMP CX,0JNZ AGEOVER: RET3.19 在使用条件转移指令时,特别要注意它们均为相对转移指令,请解释“相对转移”的含义。
如果要往较远的地方进行条件转移,那么,程序中应该怎样设置?[解答] 只能在从本指令为中心的-128到+127字节范围内转移的称为相对转移。
如果要往较远的地方进行条件转移时,可以先用条件转移指令转到附近一个单元,然后,从此单元起放一条无条件转移指令,再通过这条无条件转移指令转到较远的目的地址。
3.20 带参数的返回指令用在什么场合?设栈顶地址为3000H,当执行RET 0006 后,SP的值为多少?[解答] 带参数的返回指令可用在这样的情况:主程序为某个子程序提供一定的参数或者参数地址先送到堆栈中,通过堆栈传递给子程序。
当栈顶指针SP=3000H,执行RET 0006时,弹出3000H和3001H处的返回地址,腾出3002H?/FONT>3007H的空间,所以SP=3008H。
(以上6题由张丽解答)3.21 用循环控制指令设计程序段,从60H 个元素中寻找一个最大值,结果放在AL中。
[答案] MOV SI, OFFSET DATA1 ; 将数据起始地址送SIMOV CX, 5FH ; 有60H-1次循环MOV AL, [SI] ; 将第一个元素放AL中COMPARE: INC SICMP AL, [SI]JL XCHMAXJMP NEXTXCHMAX: MOV AL, [SI]NEXT: LOOP COMPARE3.22 中断指令执行时,堆栈的内容有什么变化?中断处理子程序的人口地址是怎样得到的? [答案] 中断指令执行时,堆栈内容变化如下:标志寄存器被推入堆栈,且SP减2,然后CPU 将主程序的下一条指令地址即断点地址的段值和偏移量推入堆栈,且SP减4。
某中断处理子程序的入口地址即中断向量,由该中断类型号的4倍为内存地址,在该地址处的4个字节内容即该中断向量。
3.23 中断返回指令IRET和普通子程序返回指令RET 在执行时,具体操作内容什么不同?[答案] IRET须弹出堆栈中标志寄存器的值,而RET则不需要。
3.25 HLT指令用在什么场合?如CPU 在执行HLT 指令时遇到硬件中断并返回后,以下应执行哪条指令?[答案] HLT用在使CPU处于暂停状态而等待硬件中断的场合。
在执行HLT指令遇到硬件中断并返回后将执行HLT后面的一条指令。
3.27 设当前SS=2010H,SP=FE00H,BX=3457H,计算当前栈顶的地址为多少?当执行PUSH BX 指令后,栈顶地址和栈顶2个字节的内容分别是什么?[答案] 当前栈顶的地址 2010H*16+FE00H=2FF00H;执行PUSH BX指令后,堆栈地址指针SP 减2,则栈顶地址为2FEEDH;栈顶2个字节的内容为57H、34H。
3.28 在DS段中有一个从TABLE开始的由160个字符组成的链表,设计一个程序,实现对此表进行搜索,找到第一个非0元素后,将此单元和下一单元清0。
( 以上由王龙输入 )[答案] MOV CX, SEG TABLEMOV DS, CX ;将段地址送DSMOV SI, OFFSET TABLE ;表偏移量送SIMOV CX, 160 ;字节数XOR AL, ALNEXT: CMP AL, [SI]JNE EXIT1INC SILOOP NEXTEXIT1: MOV [SI], ALINC SIMOV [SI], AL3.29 下面的程序段将ASCII码的空格字符填满100个字节的字符表。
阅读这一程序,画出流程,并说明使用CLD指令和REP STOSB指令的作用,再指出REP STOSB指令执行时和那几个寄存器的设置有关?MOV CX, SEG TABLE ; TABLE为字节表表头MOV ES, CXMOV DI, OFFSET TABLE ; DI指向字节表MOV AL, ' 'MOV CX, 64H ; 字节数CALL FILLM ; 调用数子程序......FILLM: JCXZ EXIT ; CX为0则退出PUSH DI ; 保存寄存器PUSH CXCLDREP STOSB ; 方向标志清零POP CX ; 重复填数POP DIEXIT: RET[答案]CLD指令作用:方向标志清0;REP STOSB指令作用:重复CX次将AL中的字节填入[ES:DI]为起始的表内,DI增量、减量根据DF确定:DF=0,DI每次增量;DF=1,DI每次减量。
STOSB 指令执时,与AX、ES、DI寄存器和Flag的DF位设置有关。
流程图:3.30 下程序将一个存储块的内容复制到另一个存储快,进入存储段时,SI中为源区起始地址的偏移量,DI中为目的区起始地址的偏移量,CX中为复制的字节数。
阅读程序并说明具体的REP MOCSB指令使用与那些寄存器有关?PUSH DI ; 保存寄存器PUSH SIPUSH CXCMP DI, SI ; 看源区和目的区的地址哪个高JBE LOWER ; 如目的区地址底,则转移STD ; 如目的区地址高,则设方向标志为1ADD SI, CX ; 从最后一个字节开始复制DEC SI ; 调整源区地址ADD DI, CXDEC DI ; 调整目的区地址JMP MOVEMLOWER: CLD ; 从第一个字节开始复制MOVEM: REP MOVSBPOP CXPOP SIPOP DIRET[答案] REP MOVSB 的作用是重复CX次将[DS:SI]中字节传送到[ES:DI]中。