NO.5控制转移和程序结构(I)
2021年哈尔滨远东理工学院软件工程专业《计算机组成原理》科目期末试卷B(有答案)

2021年哈尔滨远东理工学院软件工程专业《计算机组成原理》科目期末试卷B(有答案)一、选择题1、假定主存地址为32位,按字节编址,主存和Cache之间采用直接映射方式,主存块大小为4个字,每字32位,采用写回(Write Back)方式,则能存放4K字数据的Cache的总容量的位数至少是()。
A.146KB.147KC.148KD.158K2、存储器采用部分译码法片选时,()。
A.不需要地址译码器B.不能充分利用存储器空间C.会产生地址重叠D.CPU的地址线全参与译码3、有如下C语言程序段:()short si=-32767;unsigned short usi=si;执行上述两条语句后,usi的值为A.-32767B.32767C.32768D.327694、十进制数-0.3125的8位移码编码为()。
A.D8HB.58HC.A8HD.28H5、float型数据通常用IEEE754标准中的单精度浮点数格式表示。
如果编译器将float型变量x分配在一个32位浮点寄存器FR1中,且x=-8.25,则FR1的内容是()。
A.C1040000HB.C2420000HC. C1840000HD.CIC20000H6、总线宽度与下列()有关。
A.控制线根数B.数据线根数C.地址线根数D.以上都不对7、为了对n个设备使用总线的请求进行仲裁,如果使用独立请求方式,则需要()根控制线。
A.nB.log2n+2C.2nD.38、假定编译器对高级语言的某条语句可以编译生成两种不同的指令序列,A、B和C三类指令的CPl和执行两种不同序列所含的三类指令条数见下表。
则以下结论错误的是()。
I.序列一比序列二少l条指令Ⅱ.序列一比序列二的执行速度快Ⅲ.序列一的总时钟周期数比序列二多1个Ⅳ.序列一的CPI比序列二的CPI大A.I、llB.1、ⅢC. ll、1VD.Ⅱ9、()可区分存储单元中在放的是指令还是数据。
A.存储器B.运算C.用户D.控制器10、在无转发机制的五段基本流水线(取指、译码/读寄存器、运算、访存、写回寄存器)中,下列指令序列存在数据冒险的指令对是()。
控制转移类指令.ppt

(IP)←标号的偏移地址 (CS)←标号的段地址 如果标号为本代码段内定义的标号,则该指令同JMP NEAR PTR lable。 说明: ① 也可直接使用数值表达式来给出目标地址,这时可省略FAR属性说明。 JMP 2000H:0100H ② 机器指令代码直接提供了转向地址的段地址和偏移地址,属于直接转 移方式。 ③ 使用绝对地址来表示转移目标地址,因此属于绝对转移。
(2)条件转移指令分为以下四类。
① 单标志位测试转移指令 通过测试单个标志位的状态来决定是否转移的指令。 例:
ADD AX,BX JC LAB1 ;如果 CF = 1,转至 LAB1
CMP CX,DX JE LAB2 ;如果 ZF = 1,转至 LAB2
② 无符号数比较转移指令
该类指令将参与比较的两个数据看作是无符号数,并根据比较运算后 标志位CF和ZF的状态来判断它们之间的大小关系,从而决定是否转移。 例:
说明:
① 8位位移量是带符号数,因此跳转的范围为( -128 --- +127 )。
② 指令中的转移目标地址用相对于当前IP所指向指令的相对位移量来 表示,因此属于相对转移。
例1:
0000H EB 04 0002H B0 01 0004H B3 02 0006H B1 03
┇
例2:
0000H B0 01 0002H B3 02 0004H B1 03 0006H EB F8 0008H B2 04
JBE/JNA 标 CF=1或ZF=1 号
JG/JNLE 标 SF⊕OF=0且
号
ZF=0
带符号数 比较转移
JGE/JNL 号
控制转移指令

;行号偏移量机器码程序
1 0000 CODE SEGMENT
2 ASSUME CS:CODE
3 0000 0405 PROG_S:ADD AL, 05H
4 0002 90 NOP
5 0003 EBFB JMP SHORT PROG_S
段内间接转移指令
这类指令转向的16位有效地址存放在一个16位寄存器或字存储单元中
用寄存器间接寻址的段内转移指令,要转向的有效地址存放在寄存器中,执行的操作是寄存器的内容送到IP中
例
JMP BX
若该指令执行前BX=4500H,则指令执行时,将当前IP修改成4500H,程序转到段内偏移地址为4500H处执行
返回地址的IP入栈
由于存放CALL指令的内存首地址为CS:IP=2000:1050H,该指令占3个字节,所以返回地址为2000:1053H,即IP=1053H.于是1053H被推入堆栈
根据当前IP值和位移量DISP计算出新的IP值,作为子程序的入口地址,即:
IP=IP+DISP=1053H+1234H=2287H
中断:INT—中断、INTO—溢出中断、IRET—中断返回
1、无条件转移和过程调用指令
1)JMP无条件转移指令
指令格式:JMP目的
指令功能:使程序无条件转移到指令中指定的目的地址去执行。
这类指令又分为两种类型:
第一种类型:段内转移或近(NEAR)转移,转移指令目的地址和JMP指令在同一代码段中,转移时仅改变IP寄存器的内容,段地址CS的值不变。
JMP DWORD PTR[SI+0125H]
设指令执行前,CS=1200H,IP=05H,DS=2500H,SI=1300H,内存单元(26425H)=4500H,(26427H)=32F0H.而指令中的位移量DISP=0125H,其中高位部分为DISP_H=01H,低位部分DISP_L=25H
单片机标准课程

《单片机原理与应用》课程标准1、课程概述课程名称:单片机原理及应用课程类型:专业核心课适用专业:电子信息工程课程编号:课程学时: 104 课程学分:4主用教材:苏艳萍主编单片机原理与应用国防科技大学出版社2、前言2.1.课程性质该课程是电类专业的必修课,是培养学生单片机基础应用能力和程序设计能力的核心课程,为专业培养适应于电子产品设计、电子产品检测维修、销售及技术服务第一线需要,具有较强电子技术应用能力,熟悉基于单片机电路的应用技术设计,又具有自动化设备安装、调试、维护能力和良好的职业素质的高素质技能型专门人才的培养目标服务。
本课程培养学生的MCS-51单片机的应用、电子电路分析、测试、制作与调试能力,仪器仪表的使用能力及创新意识,为后续智能电子产品设计与测试、设备的维护等打下坚实的基础。
本课程的前导课程有:《电工实训》、《电子实训》、《单片机应用技术》、《模拟电子技术》、《数字电子技术》。
2.2.课程设计理念及思路课程设计理念:课程的设计改变了学科体系模式,打破了原来学科体系的框架,将学科的内容按项目进行知识和技能的整合,力求体现“做中学”、“学中做”的教学理念。
内容的选择上本着够用、适用的原则,突出实际应用,注重培养学生的应用能力和解决问题的实际工作能力。
本课程的项目以职业实践活动为导向,以提高综合职业能力为核心,采用理论与实践一体化教学,培养学生的综合素质发展。
课程设计思路:注重培养学生分析问题、解决问题的能力,强化学生动手实践能力。
在内容组织形式上强调学生的主体性学习,将教学活动设计成若干项目或工作情景,以项目为单位组织教学,并以典型设备为载体,先提出学习目标,再进行任务分析,学生针对项目的各项任务进行相关知识的学习,然后进行项目实施以实现学习目标,最后根据多元化的评价标准进行多元评价。
通过项目实施,使学生在技能训练过程中加深对专业知识、技能的理解和应用,培养学生的综合职业能力,满足学生职业生涯发展的需要。
控制转移类指令

控制转移类指令✧用于实现分支、循环、过程等程序结构,是仅次于传送指令的最常用指令.✧控制转移类指令通过改变IP(和CS)值,实现程序执行顺序的改变说明✧只有中断返回指令(IRET)改变控制标志位✧许多转移指令受状态标志位的影响1.无条件转移指令(JMP 操作数;程序转向label标号指定的地址)◆寻址方式:直接寻址方式转移地址象立即数一样,直接在指令的机器代码中,就是直接寻址方式间接寻址方式转移地址在寄存器或主存单元中,就是通过寄存器或存储器的间接寻址方式◆目标地址范围✓段内(注意转移范围是+ -,即前后都可以转移!当向地址增大方向转移时,位移量为正;向地址减小方向转移时,位移量为负)✡段内转移——近转移(near)⏹转移范围用二个字节表达,在当前代码段64KB范围内转移(±32KB范围)⏹不需要更改CS段地址,只要改变IP偏移地址,由16位带符号数给出。
✡段内转移——短转移(short)⏹转移范围用一个字节表达,在当前代码段256B范围内转移(-128~+127范围),只改变IP的值,由8位带符号数给出。
✓段间段间转移——远转移(far)从当前代码段跳转到另一个代码段,可以在1MB范围需要更改CS段地址和IP偏移地址目标地址必须用一个32位数表达,叫做32位远指针,它就是逻辑地址。
段间间接转移指令中,目的地址存放在连续4个存储单元字节中,低字节两个单元的内容代替IP,高字节两个单元的内容代替CS。
注:实际编程时,汇编程序会根据目标地址的距离,自动处理成短转移、近转移或远转移程序员可用操作符short、near ptr或far ptr强制.✌思考:如果转移超过16BIT,怎么办?答:变成段间转移。
JMP 1234H 这个指令对否?JMP 12345678H呢?2、条件转移指令(Jcclable;条件满足,发生转移:IP←IP+8位位移量;条件不满足,顺序执行)注意:1.Jcc本身不是一条指令,它是条件转移指令的统称。
ABB机器人标准指令详解

ABB机器人标准指令详解一、 RAPID程序控制指令1、1程序开始/结束控制指令1) PROGRAM START/END1、指令格式: PROGRAM <程序名> <属性> ;2、描述:此指令标识一个机器人程序的开始或结束。
在这里,<程序名>是你给程序取的名字,<属性>是可选的,表示程序的属性(如:INTERLOCK, NO_INTERLOCK, NOPROGRAM等)。
2) JOB START/END1、指令格式: JOB <作业名> <属性> ;2、描述:此指令标识一个作业的开始或结束。
在这里,<作业名>是你给作业取的名字,<属性>是可选的,表示作业的属性(如:INTERLOCK, NO_INTERLOCK, NOPROGRAM等)。
1、2程序转移指令1) GOTO1、指令格式: GOTO <行号>;2、描述:此指令将程序执行转移到指定的行号。
2) GOSUB1、指令格式: GOSUB <行号>;2、描述:此指令将程序执行转移到指定的行号,并在返回时继续执行当前行。
3) RETURN1、指令格式: RETURN;2、描述:此指令将程序执行从 GOSUB转移到父程序,并从 GOTO转移到原程序行。
1、3条件判断指令1) IF/THEN/ELSE/ENDIF;1、指令格式: IF <条件> THEN <表达式> ELSE <表达式> ENDIF;2、描述:如果满足条件<条件>,则执行 THEN后面的表达式;否则执行 ELSE后面的表达式。
2) CASE/ESAC/ENDCASE;1、指令格式: CASE <变量> IN <表达式1> / <表达式2> /... / ENDCASE;2、描述:此指令根据变量<变量>的值选择要执行的表达式。
微机原理6_控制转移类指令

还可用SAR、ROR和RCR指令
;将AX的最低位D0移进CF
jnc even
;标志CF=0,即D0=0:AX内是偶数,程序转移
add ax,1
;标志CF=1,即D0=1:AX内的奇数,加1
even: shr ax,1
;AX←AX÷2
第2章:例题2.22解答3 用JNS指令实现
mov bx,ax
ror bx,1
done: ……
第2章:例2.24 偶校验
;对DL寄存器中8位数据进行偶校验 ;校验位存入CF标志
2:将最低位用移位指令移至进位标志,判断进位标志是0, AX就是偶数;否则,为奇数
3:将最低位用移位指令移至最高位(符号位),判断符号 标志是0,AX就是偶数;否则,为奇数
第2章:例题2.22解答1 用JZ指令实现
test ax,01h
;测试AX的最低位D0(不用AND指令,以免改变AX)
jz even
第2章:无条件转移指令JMP(jump)
JMP label
;段内转移、相对寻址
;IP←IP+位移量
演示
JMP r16/m16
;段内转移、间接寻址
;IP←r16/m16
演示 演示
JMP far ptr label ;段间转移、直接寻址
;IP←偏移地址,CS←段地址
演示
JMP far ptr mem ;段间转移,间接寻址
第2章:例题2.22
题目:将AX中存放的无符号数除以2,如果是奇 数则加1后除以2 问题:如何判断AX中的数据是奇数还是偶数? 解答:判断AX最低位是“0”(偶数),还是“1” (奇数)。可以用位操作类指令
1:用逻辑与指令将除最低位外的其他位变成0,保留最低位 不变。判断这个数据是0,AX就是偶数;否则,为奇数
3.5 控制转移和位操作指令(8)

2、条件转移指令 条件转移就是程序转移是有条件的。执行条件转移指 令时,如指令中规定的条件满足,则进行程序转移,否则 程序顺序执行。条件转移有如下指令: (1)累加器判零转移指令:JZ rel和 JNZ rel指令 这两条指令都是二字节指令,是有条件的相对转移指令, 以rel为偏移量。 (2)数值比较条件转移指令 数值比较条件转移指令把两个操作数进行比较,比较 结果作为条件来控制程序转移。共有四条指令: CJNE A,#data,rel;累加器内容与立即数不等转移 CJNE A,direct,rn ,#data,rel ;寄存器内容与立即数不等转移 CJNE @Ri,#data,rel ;内部RAM前128单元内容与立 即数不等转移。
汇编语言程序中,为等待中断或程序结束,常使程 序“原地踏步” ,对此可使用SJMP指令完成:HERE: SJMP HERE 或 HERE:SJMP $指令机器码为 80FEH。在汇编语言中,以“$”代表PC的当前值。 执行指令:L00P:SJMP L00P1,如果L00P的标 号值为0100H(即SJMP这条指令的机器码存于0100H 和0101H两个单元之中),标号L00P1值为0123H,即 跳转的目标地址为0123H,则指令的第二个字节(相对 偏移量)应为:rel=0123H一0102H=21H 。 (4)基址加变址寻址转移(变址转移)指令: JMP @A+DPTR ; (PC)←(A)+(DPTR) 这是一条一字节转移指令,转移的目的地址=(A) +(DPTR)。指令以DPTR内容为基址,而以A的内容 作变址。只要把DPTR的值固定,而给A赋以不同的值, 即可实现程序的多分支转移。键盘译码程序就是本指令 的一个典型应用。 (如P113例3.30)
2、位置位、复位指令 SETB C ; (Cy)←l SETB bit ; (bit)←1 CLR C ; (Cy)←0 CLR bit ; (bit)←0 3、位运算指令 ANL C,bit ; (Cy)←(Cy)∧(bit) ANL C,/ bit ; (Cy)←(Cy)∧/( bit ) ORL C,bit ; (Cy)←(Cy)∨(bit) ORL C,/ bit ; (Cy)←(Cy)∨/( bit ) CPL C ; (Cy)←/(Cy) CPL bit ; (bit)←/(bit)(P120例3.37) 4、位控制转移指令 位控制转移指令就是以位的状态作为实现程序转移的 判断条件。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
JMP指令的4种类型
1. 段内转移、相对寻址 • 标号指明目标地址,指令代码包含位移量 2. 段内转移、间接寻址 • 通用寄存器或主存单元包含目标指令的偏移 地址 MASM会根据存储模式等信息自动识别 3. 段间转移、直接寻址 • 标号包含目标指令的段地址和偏移地址 4. 段间转移、间接寻址 • 16位段用双字存储单元包含目标地址 • 32位段用3字存储单元包含目标地址
[例题5-2]实现指令CBW功能的程序-2
mov al,bvar ;取出要判断的数据 test al,80h ;测试最高位 等于零转移 jz next1 ;最高位为0(ZF=1),转移到标号NEXT1 mov ah,0ffh ;最高位为1,顺序执行:设置AH=FFH jmp done ;无条件跳过另一个分支 mov ah,0 ;最高位为0转移到此执行:设置AH=0
[例题5-1]无条件转移程序-1
0000 0000 nvar
0010 EB 01 0012 90 0013 B8 FF02 labl1: 0016 E9 0001 0019 90 001A B8 0020 R labl2: 001D FF E0 001F 90 0020 B8 002B R labl3: 0023 A3 0000 R 0026 FF 26 0000 R 002A 90 ;数据段 dw ? ;代码段 jmp labl1 相对短转移 nop mov ax,type labl1 jmp near ptr labl2 nop 相对近转移 mov ax,offset labl3 jmp ax 寄存器间接近转移 nop mov ax,offset labl4 mov nvar,ax jmp nvar 存储器间接近转移 nop
5.2.1条件转移指令Jcc
• 根据指定的条件确定程序是否发生转移 Jcc label ;条件满足,发生转移;否则,顺序执行下一条指令 • LABEL表示目标地址,采用段内相对寻址方式 • 16位80x86微处理器:只是-128~+127间的短转移 • 32位IA-32微处理器:达到32位的全偏移量 • 条件转移指令不影响标志,但要利用标志 • cc表示利用标志判断的条件,16种、两类 • 单个标志状态作为条件 • 两数大小关系作为条件
next2: done:
jnp done
何不合二为一
[例题5-4]统计“1”位个数程序-1
mov ah,1 int 21h ;输入一个字符 xor ah,ah ;用AH寄存器记录1的个数,故先清0 mov ecx,8 ;ASCII码有8位,进行8次循环判断 shl al,1 ;从高位开始 jnc next ;不为1,无需处理 inc ah ;为1,个数加1 loop again
[例题5-3]实现奇校验程序-2
mov ah,1 ;1号功能 int 21h ;键盘输入,返回值在AL 个数为奇数转移 and al,7fh ;最高位置“0”,标志PF反映“1”的个数 jnp next1 ;个数为奇数,则转向NEXT1 or al,80h ;最高位置“1”、其他位不变 mov Tdata,al ;保存待发送的数据 功能编号 AH=01H 出口参数 AL=ASCII字符
5.1.3无条件转移指令
• 无条件转移:程序无条件改变执行顺序 • JMP指令相当于高级语言的goto语句 JMP label ;程序转向label标号指定的地址 ;段内相对寻址,段间直接寻址 JMP reg16/reg32 ;程序转向寄存器指定的地址 ;寄存器间接寻址 JMP mem16/mem32 ;程序转向存储单元指定的地址 ;存储器间接寻址
again:
next:
[例题5-4]统计“1”位个数程序-2
mov ah,1 int 21h ;输入一个字符 xor ah,ah ;用AH寄存器记录1的个数,故先清0 cmp al,0 ;也可用“TEST AL,0FFH” je done shr al,1 ;从低位开始 jnc next ;不为1,无须处理 inc ah ;为1,个数加1 jmp again
转移条件cc:单个标志状态
JZ/JE JNZ/JNE JS JNS JP/JPE JNP/JPO JO JNO JC JNC ZF=1 ZF=0 SF=1 SF=0 PF=1 PF=0 OF=1 OF=0 CF=1 CF=0 Jump if Zero/Equal Jump if Not Zero/Not Equal Jump if Sign Jump if Not Sign Jump if Parity/Parity Even Jump if Not Parity/Parity Odd Jump if Overflow Jump if Not Overflow Jump if Carry Jump if Not Carry
5.1.2寻址方式
• 相对寻址方式 • 提供目标地址相对于当前指令指针EIP的位移量 • 目标地址(转移后的EIP)=当前EIP+位移量 • 相对寻址都是段内转移,最常用、最灵活 • 直接寻址方式 • 直接提供目标地址 • 目标地址(转移后的CS和EIP)=指令操作数 • 间接寻址方式 • 指示寄存器或存储单元 • 目标地址来自寄存器或存储单元、间接获得 • 寄存器间接寻址:用寄存器保存目标地址 • 存储器间接寻址:用存储单元保存目标地址
5.1 目标地址寻址方式
• 程序代码在代码段 • CS:指明代码段在主存中的开始位置、即段基地址 • EIP:给出将要执行指令的偏移地址 • 程序顺序执行,微处理器自动增量EIP • 程序控制转移,EIP随之改变 • 程序转移到另外的代码段, EIP和CS都将改变 • 控制转移类指令:改变EIP(有些也改变CS),即改 变程序执行顺序(实现程序控制转移)的指令 • 目标地址寻址方式:改变CS和EIP寄存器,或者说如 何指明目的地、即目标地址的方法 目标地址=目的地址=转移地址
转移条件cc:两数大小关系
JB/JNAE CF=1 Jump if Below/Not Above or Equal JNB/JAE CF=0 Jump if Not Below/Above or Equal JBE/JNA CF=1或ZF=1 Jump if Below/Not Above JNBE/JA CF=0且ZF=0 Jump if Not Below or Equal/Above JL/JNGE JNL/JGE JLE/JNG JNLE/JG SF≠OF Jump if Less/Not Greater or Equal SF=OF Jump if Not Less/Greater or Equal ZF≠OF或ZF=1Jump if Less or Equal/Not Greater SF=OF且ZF=0 Jump if Not Less or Equal/Greater
next1:
ቤተ መጻሕፍቲ ባይዱ
功能说明 键盘输入一个字符(回显)
[例题5-3]实现奇偶校验程序-3
mov ah,1 ;1号功能 int 21h ;键盘输入,返回值在AL 个数为偶数转移 and al,7fh ;最高位置“0”,标志PF反映“1”的个数 jp next2 ;个数为偶数,转向NEXT2 jmp done ;个数为奇数,转向保存 or al,80h ;最高位置“1”、其他位不变 mov Tdata,al ;保存待发送的数据
next3: done:
[例题5-3]实现奇偶校验程序-1
• 奇偶校验是数据通信、存储等过程中最常用的 校验方法 • 奇校验:使包括校验位在内的数据中为“1”的 个数恒为奇数 • 偶校验:使包括校验位在内的数据中为“1”的 个数恒为偶数(包括0) • 奇偶校验只能检测出奇数个位出错的情况,不 能纠错 • 实现奇偶校验非常简单 • 硬件上使用异或等电路 • 软件上使用异或等指令,奇偶校验标志PF
next2: done:
[例题5-2]实现指令CBW功能的程序-4
mov al,bvar ;取出要判断的数据 cmp al,0 ;与0比较 符号为正转移 jns next3 ;最高位为0(SF=0),转移到标号NEXT3 mov ah,0ffh ;最高位为1,顺序执行:设置AH=FFH jmp done ;无条件跳过另一个分支 mov ah,0 ;最高位为0转移到此执行:设置AH=00H
next1: done:
[例题5-2]实现指令CBW功能的程序-3
mov al,bvar ;取出要判断的数据 test al,80h ;测试最高位 不等于零转移 jnz next2 ;最高位为1(ZF=0),转移到标号NEXT2 mov ah,0 ;最高位为0,顺序执行:设置AH=00H jmp done ;无条件跳过另一个分支 mov ah,0ffh ;最高位为1转移到此执行:设置AH=FFH
002B B8 FF05 labl4: 002E EA ---- 0034 R 0033 90 0034 B8 0047 R labl5: 0037 A3 0002 R 003A BA ---- R 003D 89 16 0004 R 0041 FF 2E 0002 R 0045 90 0046
5.2分支程序结构
[例题5-2]实现指令CBW功能的程序-1
• 8086指令CBW(等于IA-32指令MOVSX AX,AL) • 如果AL最高位为0,则设置AH=0 • 如果AL最高位为1,则设置AH=FFH • 如何判断AL最高位是“0”,还是“1” • 涉及一个位,可采用位操作类指令 • 保留最高位不变,其他位变成0 • 逻辑与“80H”结果为0,AL最高位=0;否则 是1 • 运算结果是否为0,零位标志ZF反映 • JZ或JNZ指令判断并转移 TEST指令生成条件
上节内容回顾
• • • • • • • • • • 寄存器相对寻址、 基址变址、 相对基址变址、 带比例存储器寻址 XCHG,XLAT;NEG,CMP,LEA, MUL,IMUL AND,OR,XOR,TEST SHL/SAL,SHR/SAR;ROL/ROR,RCL/RCR CLC,STC;CLD,STD; MOVS,STOS,REP