收藏 分享(赏)

第5章 指令与指令系统和汇编语言程序设计.ppt

上传人:myw993772 文档编号:6009828 上传时间:2019-03-24 格式:PPT 页数:35 大小:335.50KB
下载 相关 举报
第5章 指令与指令系统和汇编语言程序设计.ppt_第1页
第1页 / 共35页
第5章 指令与指令系统和汇编语言程序设计.ppt_第2页
第2页 / 共35页
第5章 指令与指令系统和汇编语言程序设计.ppt_第3页
第3页 / 共35页
第5章 指令与指令系统和汇编语言程序设计.ppt_第4页
第4页 / 共35页
第5章 指令与指令系统和汇编语言程序设计.ppt_第5页
第5页 / 共35页
点击查看更多>>
资源描述

1、第5章,指令、指令系统和汇编 语言程序设计,本章主要内容,指令格式与寻址方式概述汇编语言程序设计,计算机系统由硬件和软件两部分组成。硬件指由中央处理机、存储器以及外部设备等组成的实际装置。软件是为便于用户使用计算机而编写的各种程序,是由一系列机器指令组成的。指令是用户使用计算机和计算机运行的最小的功能单位,一台计算机支持(或称使用)的全部指令构成该计算机的指令系统,它对计算机本身的硬件结构的复杂程度和运行性能,对用户完成程序设计的难易程度和工作效率,有非常重要的影响,必须对设计指令系统的工作给以足够的重视,慎重确定。,指令与指令系统概述,对指令系统的要求,完备性: 指令齐全,编程方便 高效性:

2、占内存少,运行省时 规整性:指令与运算规则统一 兼容性:新旧机指令软件兼容,当前的计算机指令系统,从其构成的复杂和完备程度,或者说设计中追求的不同的目标区分,可分为 CISC 和RISC 两类:RISC(Reduced Instruction Set Computer),通常称为精简指令系统的计算机,提供数目较少、格式与功能简单、运行高效的指令,追求的是计算机控制器实现简单,运行高速,更容易在单块超大规模集成电路的芯片内制做出来。CISC (Complex Instruction Set Computer),通常称为复杂指令系统的计算机,是相对于 RISC 一词而提出来的一种说法。其特点是:指

3、令条数多,格式多样,寻址方式复杂,每条指令的功能强,优点是汇编程序设计容易些,但计算机控制器的实现困难多,很多指令被使用的机会并不多。,指令格式与寻址方式,指令 : 功能 定义 用法,指令格式:,操作码 操作数地址,固定长度 可变长度 交叉安排,无地址 一地址 二地址 多地址,2. 寻址方式,外设寻址,入 / 出端口地址方式,统一映象方式,主存寻址,寄存器寻址,直接寻址,变址寻址,寄存器间址,间接寻址,相对寻址,基地址寻址,立即数寻址,堆栈寻址,1. 指令与指令格式,指令:功能、定义、用法,指令格式: 操作码 操作数地址,固定长度(IBM/ PC),扩展长度(PDP-11),交叉安排(NOVA

4、),无地址 一地址 二地址 多地址,三种方案,按操作数 个数划分,教学计算机的操作码:TEC-2000 16位机采用 8 位固定长度TEC-2000 8 位机采用 逐段扩展长度,指令格式,寻址方式(又称编址方式)指的是确定本条指令的数据地址及下一条要执行的指令地址的方法。不同的计算机系统,使用数目和功能不同的寻址方式,其实现的复杂程度和运行性能各不相同。有的计算机寻址方式较少,而有些计算机采用多种寻址方式。通常需要在指令中为每一个操作数专设一个地址字段,用来表示数据的来源或去向的地址。在指令中给出的操作数(或指令)的地址被称为形式地址,使用形式地址信息并按一定的规则计算出来的一个数值才是数据(

5、或指令)的实际地址。在指令的操作数地址字段,可能要指出: 运算器中的累加器的编号或专用寄存器名称(编号) 输入/输出指令中用到的 I/O 设备的入出端口地址 内存储器的一个存储单元(或一 I/O设备 )的地址有多种 基本寻址方式 和某些 符合寻址方式 ,简介如下:,寻址方式,计算机的CPU中一般设置有一定数量的通用寄存器,用于存放操作数、操作数地址或中间结果。假如指令地址码字段给出某一通用寄存器的编号(地址),且所需的操作数就在这一寄存器中,这就是寄存器寻址方式;若该寄存器中存放的是操作数在内存储器中所在单元的地址,这就是寄存器间接寻址方式。可通过指令的操作码或另设一个字段,来区分这两种不同的

6、寻址方式。,1、寄存器寻址、寄存器间接寻址,例:RegNo.=5, 使用 5# 累加器 ,此时 5# 累加器中的内容为 7, 可记为 (R5)=7,,对寄存器寻址方式,操作数就是这里的数值 7,对寄存器间接寻址,从内存 7# 单元读出来的数才是操作数,2、立即数寻址,所需的一个操作数在指令的地址字段部分直接给出。,则 Num 即为操作数的值。,适用于操作数固定的情况,提高了指令的执行速度,当该立即数的值限定为较小值(占用位数少)时,可在第一个指令字中直接给出,否则可在第二个指令字中给出。,在指令的地址码字段直接给出所需的操作数(或指令)在存储器中的地址。,则 Addr 为操作数在存储器中的地址

7、。或转移指令等用到的指令地址。,3、直接寻址,例:Addr = 5718H ,这里的 H 表示 5718 是 16 进制的值,可能用作下一条指令的地址;也可能用作操作数的地址,若 5718H = 3,即内存储器 5718 单元中的内容为 3, 则操作数就是这里的 3 。,内存储器,操作数,操作数的地址由指定的变址寄存器(由Reg指定)的内容和指令中的地址码(Disp)相加得到。,4、变址寻址,通用寄存器,加法器,操作数,存储器,例:Disp=18H,Reg=5,(R5)=5700H则操作数地址 = 5718H,便于对数组元素进行处理, 是计算机中常用的一种寻址方式。,操作数(或指令)的地址由程

8、序计数器 PC 的内容(即当前执行指令的地址)和指令的地址码相加得到。,5、相对寻址,例:Disp = 48H (PC) = 5600H则实际地址 = 5648H,1)主要用于转移指令,对浮动程序很有用。 2)位移量可正可负,通常用补码表示。,指令的地址码字段给出的内容既不是操作数,也不是操作数的地址,而是操作数(或指令)地址的地址,这被称为间接寻址方式,多一次读内存储器的操作。,6、间接寻址,存储器,操作数,Addr1,指令中的 Addr 可以用其他寻址方式给出,例如变址寻址,这就成为变址寻址与间接寻址的复合寻址方式。,在计算机中设置一个专用的基址寄存器,操作数(或指令)的地址通过基址寄存器

9、的内容和指令中的地址码相加得到。,7、基址寻址,基址寄存器,加法器,存储器,操作数,例:Disp= 18H,BS= 5700H则操作数地址=5718H,主要用于为程序或数据分配存储区,对多道程序或浮动程序很有用,解决了程序在存储器中的定位和扩大寻址空间等问题。,堆栈是内存储器中一块按 “后进先出” 原则进行读写的存储区,并通过一个专用的寄存器(称为堆栈指针SP)给出堆栈的栈顶(和次栈顶)地址完成数据的读写操作,故不必在指令中用操作数地址字段给堆栈地址。通常在读写操作的前后伴随有计算机自动(不是用户通过指令)修改 SP 内容的动作,以确保按正确的 “后进先出” 原则读写堆栈区。例如:(SP)-

10、1 SP和 AR,即SP的内容减 1 存回 SP,并送内存地址寄存器,接下来才可以把数据写到堆栈中。完成一次读堆栈操作后,要接着执行(SP)+ 1 SP 的一次自动修改 SP 内容的操作。,8、堆栈寻址,需要注意的是,指令长度可能是一个字,也可能是两个字或多个字,要看操作数地址字段的位数要求,由具体的情况决定。,单字指令仅用一个指令字。双字指令要用两个指令字, 此时第二个指令字的内容可能是立即数、一个直接地址或一个变址位移量。,TEC-2000 教学机的指令格式,操 作 码,目的寄存器,源寄存器,I/O 端 口 地 址,相对转移指令的偏移量,直接数 / 内存地址 / 指令中变址偏移量,8位 4

11、位 4位,第一个指令字分为三个主要部分。最高 8 位是操作码。从这个意义上讲, 教学机的基本指令是固定长度的操作码结构, 最多支持 256 条基本指令。最低的 8 位有多种用法:给出 1 或 2 个寄存器的编号,或入/出端口的地址,或用于给出相对转移指令的偏移量。,操 作 码,目的寄存器,源寄存器,I/O 端 口 地 址,相对转移指令的偏移量,直接数 / 内存地址 / 指令中变址偏移量,8位 4位 4位,TEC-2000 教学机的指令格式,TEC-2000 16位教学计算机指令举例,00 ADD DR, SR 44 JRC adr 84 PSHF 01 SUB DR, SR 45 JRNC a

12、dr 8C POPF 02 AND DR, SR 46 JRZ adr 8F RET 03 CMP DR, SR 47 JRNZ adr 04 XOR DR, SR 41 JR adr 05 TEST DR, SR 80 JMPA adr 06 OR DR, SR CE CALA adr 07 MVRR DR, SR 82 IN i/o port 08 DEC DR 86 OUT i/o port 09 INC DR 0A SHL DR 0B SHR DR 88 MVRD DR, data 85 PUSH DR 81 LORR DR, SR 87 POP DR 83 STRR DR, SR,教

13、学机基本指令,数据移动指令 MVRR、MVRD、LDRR、STRR、PUSH、POP、PSHF、POPF、IN、OUT 算术逻辑指令 ADD、SUB、AND、XOR、TEST、CMP、OR、DEC、INC、SHL、SHR 控制转移指令 CALA、RET、JMPA、JR、JRC、JRNC、JRZ、JRNZ,TEC-2000 16位机基本指令系统,指令格式 汇编语句 操作数个数 CZVS 指令分组 功能说明 00000000 DRSR ADD DR,SR 2 * A DRDR+SR 00000001 DRSR SUB DR,SR 2 * A DRDR-SR 00000010 DRSR AND DR

14、,SR 2 * A DRDR and SR 00000011 DRSR CMP DR,SR 2 * A DR-SR 00000100 DRSR XOR DR,SR 2 * * A DRDR xor SR 00000101 DRSR TEST DR,SR 2 * * A DR and SR 00000110 DRSR OR DR,SR 2 * * A DRDR or SR 00000111 DRSR MVRR DR, SR 2 A DRSR 00001000 DR0000 DEC DR 1 * A DRDR-1 00001001 DR0000 INC DR 1 * A DRDR+1 000010

15、10 DR0000 SHL DR 1 * A DR,CDR*2 00001011 DR0000 SHR DR 1 * A DR,CDR /2 01000001 OFFSET JR ADR 1 A 无条件跳转 01000100 OFFSET JRC ADR 1 A C=1 时跳转 01000101 OFFSET JRNC ADR 1 A C=0 时跳转 01000110 OFFSET JRZ ADR 1 A Z=1 时跳转 01000111 OFFSET JRNZ ADR 1 A Z=0 时跳转,TEC-2000 16位机基本指令系统,指令格式 汇编语句 操作数个数 CZVS 指令分组 功能说明

16、 10000000 0000000 JMPA ADR 1 B 无条件跳到ADRADR(16位) 10000001 DRSR LDRR DR,SR 2 B DRSR 10000010 I/O PORT IN I/O PORT 1 B R0I/O PORT 10000011 DRSR STRR DR,SR 2 B DRSR 10000100 00000000 PSHF 0 B FLAG 入栈 10000101 0000SR PUSH SR 1 B SR 入栈 10000110 I/O PORT OUT I/O PORT 1 B I/O PORTR0 10000111 DR POP DR 1 B 出

17、栈到 DR 10001000 DR0000 MVRD DR, DATA 2 B DRDATADATA(16位) 10001100 00000000 POPF 1 * * B FLAG出栈 10001111 00000000 RET 1 B 子程序返回 11001110 00000000 CALA ADR 1 D 调用子程序ADR(16位),教学机寻址方式,立即数寻址 MVRD DR, DATA 寄存器寻址 MVRR R1,R2 寄存器间接寻址 LDRR DR,SR 直接寻址 CALA ADR 相对寻址 JRC ADR,本章主要内容,指令格式与寻址方式概述汇编语言程序设计,汇编语言程序设计,机器

18、语言是计算机硬件能够直接识别和运行的指令的集合,是二进制码组成的指令,对程序设计人员来说很难以接受,直接用机器指令设计程序实在是太困难了。汇编语言大体上是对计算机机器语言的符号化处理的结果,再增加一些为方便程序设计而实现的扩展功能。汇编语言至少有2大优点。首先实现用英文单词或其缩写形式替代二进制的指令代码,更容易记忆和理解;其次可以选用英文单词来表示程序中用到的数据(常量和变量),并且避免程序设计人员亲自为这些数据分配存储单元,而是留给汇编程序自己去安排,这样的语言就达到了实用的最基本的标准。如果在此基础上,再在支持程序的不同结构特性(如循环和重复执行等结构),子程序所用哑变元替换为真实参数等

19、方面提供必要的支持,使用这个语言设计程序就更为方便了。汇编语言程序经汇编器程序翻译为机器语言程序后方可运行。,高级语言又称算法语言,它的实现思路,不再是过分地“靠拢”计算机硬件的指令系统,而是着重面向解决实际问题所用的算法,更多的是是为方便程序设计人员写出自己解决问题的处理方案和解题过程的程序。目前常用的高级语言有BASIC、C、C+、,PASCAL、JAVA、PROLOG、VHDL等几百种。用这些语言设计出来的程序,通常需要经过一个叫做编译程序的软件先编译成机器语言程序,或者首先编译成汇编程序后,再经过汇编操作后得到机器语言程序,才能在计算机的硬件系统上予以执行;也可以由一个叫做解释执行程序

20、的软件,逐条取来相应高级语言程序的每个语句并直接控制其完成执行过程,而不是把整个程序编译为机器语言程序之后再一起交给硬件系统加以执行。,教学计算机中的汇编程序的例子,例1:设计一个程序,在屏幕上输出显示一个字符6。A 2000 ;地址从16进制的2000(内存RAM区的起始地址)开始2000: MVRD R0,0036 ;把字符6的ASCII码送入R0 2002: OUT 80 ;在屏幕上输出显示字符6,80为串行接口地址 2003: RET ;每个用户程序都必须用RET指令结束 2004: (按回车键即结束源程序的输入过程),教学计算机中的汇编程序的例子,例2:计算1到10的累加和。 A 2

21、060MVRD R1,0000 ;置累加和的初值为0MVRD R2,000A ;最大的加数SUB R3,R3 ;预置参加累加的数为0 (2065) INC R3 ;得到下一个参加累加的数ADD R1, R3 ;累加计算CMP R3, R2 ;判断是否累加完JRNZ 2065 ;未完,开始下一轮累加RET 运行过后,可以用R命令看R1中的累加结果。,教学计算机中的汇编程序的例子,例3:设计一个程序,用次数控制在终端屏幕上输出0到9十个数字符。A 2020MVRD R2,000A ;送入输出字符的个数MVRD R0,0030 ;0字符的ASCII码 (2024) OUT 80 ;输出保存在R0低位

22、字节的字符DEC R2 ;输出字符个数减1JRZ 202E ;判全部字符输出完否,已完,则转移到程序结束处PUSH R0 ;未完,保存R0的值到堆栈中 (2028) IN 81 ;查询接口状态,判字符的串行输出过程结束否SHR R0 ;JRNC 2028 ;未完成,则循环等待POP R0 ;已完成,准备继续输出下一字符,从堆栈恢复; R0 的值INC R0 ;得到下一个要输出的字符JR 2024 ;转去输出字符 (202E) RET,教学计算机中的汇编程序的例子,例4:从键盘上连续键入多个属于0到9的数字符并在屏幕上显示,遇非数字符结束程序。从地址2040开始输入下列程序:A 2040MVRD

23、 R2,0030 ;用于判数字符的下界值MVRD R3,0039 ;用于判数字符的上界值 (2044) IN 81 ;判键盘上是否按了一个键SHR R0 ;即串行口是否有了输入的字符SHR R0JRNC 2044 ;尚没有输入则循环测试IN 80 ;把输入字符读到R0低位字节MVRD R1, 00FFAND R0, R1 ;将R0的高位字节清0CMP R0, R2 ;判输入的字符 字符0否JRNC 2053 ;是,则转到程序结束处CMP R3, R0 ;判输入的字符 字符9否JRNC 2053 ;是,则转到程序结束处OUT 80 ;输出刚输入的数字符JMPA 2044 ;转去程序前边2044处

24、等待输入下一个字符 (2053) RET,教学计算机中的汇编程序的例子,例5:设计一个有读写内存和子程序调用指令的程序,功能是读出指定内存中的大写字母字符,将其显示到屏幕上,转换为小写字母后再写回存储器的原存储单元。 E 20F0 (送入将被显示的6个字符AF到内存20F0开始的存储区域中)41 42 43 44 45 46A 2080MVRD R3, 0006 ;指定被读数据的个数MVRD R2, 20F0 ;指定被读、写数据内存区首地址 (2084) LDRR R0, R2 ;读内存中的一个字符到R0寄存器CALA 2100 ;调用子程序,入口地址为2100,;完成显示、字符转换和写回内存

25、的功能DEC R3 ;检查输出的字符个数JRZ 208B ;完成输出则结束程序的执行过程INC R2 ;未完成,修改内存地址JR 2084 ;转移到程序的2084处,循环执行规定的处理(208B) RETA 2100 ;输入用到的子程序到内存2100开始的存储区OUT 80 ;输出保存在R0寄存器中的字符MVRD R1, 0020 ;转换保存在R0中的大写字母为小写字母ADD R0, R1STRR R2, R0 ;写R0中的字符到内存,地址同LDRR所用的地址 (2105) IN 81 ;测试串行接口是否完成输出过程SHR R0JRNC 2105 ;未完成输出过程则循环测试RET ;结束子程序

26、执行过程,返回主程序运行过程中,可以直接看到屏幕上显示的内容,运行过后,再用D 20F0命令看内存的20F0区域中保存的运行结果, 6个大写的英文字母已经被修改为小写字母:0061 0062 0063 0064 0065 0066,教学计算机中的伪指令,写在程序中的、指示汇编程序如何对该程序执行汇编操作的命令叫做伪指令。例如:ORG : ORG exp 指定程序执行的开始地址 END : 指定程序执行的结束地址 EQU : var EQU exp 定义变量的值var = exp DW : adr DW exp 以为首地址在存储器中写入指定的值 BLK : BLK n 保留 n 个存储单元,P1

27、52 题11: 用教学机的指令系统设计程序,实现从键盘读人四位无符号的整数,到计算机内转换成二进制数存于R0,并输出到屏幕显示。,MVRD R2, 0000 ; 存放结果(累加和)CALA READ-IN ;读键盘上千位值,返回在R0MVRD R3, 03E8 ;1000D 对应 03E8 H ADD1: ADD R2, R3 ;将千位值加在结果上DEC R0 ;以键值为加的次数JRNZ ADD1CALA READ-IN ;读键盘上百位值,返回在R0MVRD R3, 0064 ;100D 对应 0064 H ADD2: ADD R2, R3 ;将百位值加在结果上DEC R0 ;以键值为加的次数

28、JRNZ ADD2CALA READ-IN ;读键盘上十位值,返回在R0MVRD R3, 000A ;10D 对应 000AH ADD3: ADD R2, R3 ;将十位值加在结果上DEC R0 ;以键值为加的次数JRNZ ADD3,CALA READ-IN ;读键盘上个位值,返回在R0MVRD R3, 0001 ;1D 对应 0001H ADD4: ADD R2, R3 ;将个位值加在结果上DEC R0 ;以键值为加的次数JRNZ ADD4MVRR R0, R2 ; 保存结果PUSH R0CALA OUT1 ; ; 依次输出 千 百 十 个 位CALA OUT2CALA OUT2CALA O

29、UT2POP R0RET,WAIT-IN子程序READ-IN: IN 81 ;判键盘上是否按了一个键SHR R0 ;即串行口是否有了输入的字符SHR R0JRNC WAIT-IN ;尚没有输入则循环测试IN 80 ;把输入字符读到R0低位字节MVRD R1, 00FF ;将R0的高位字节清0AND R0, R1MVRD R1, 0030SUB RO,R1MVRD R1, 0000CMP R0, R1 ;判输入的字符 字符0否JRNC ERR-RET ;是,则转到程序结束处MVRD R1, 000ACMP R0, R1 ;判输入的字符 字符9否JRNC NOR-RET ;不是, ERR-RET:

30、POP R0 ;出错, 返回系统 NOR-RET: RET ; 正常,返回主程序,字符输出子程序,OUT1: SHL R2 ;第一次输出子程序入口 OUT2: RCL R2 ;非第一次输出子程序入口RCL R2RCL R2RCL R2MVRR R0, R2 ;获得当前的位MVRD R3,000F ;转化为ASCII 码AND R0,R3MVRD R3,000A ;判断字母,数字?CMP R0, R3JRNC MUBMVRD R3, 0037 ;字母 + 37JR GET MUB: MVRD R3, 0030 ;数字 + 30GET: ADD R0,R3 ; 输出保存在R0低位字节的字符OUT 80 ; 输出当前值 WAIT1: IN 81 ;查询接口状态,判字符的串行输出过程结束否SHR R0 JRNC WAIT1 ;未完成,则循环等待RET,

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 网络科技 > 开发文档

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报