微机原理课件第23讲(电子)_第1页
微机原理课件第23讲(电子)_第2页
微机原理课件第23讲(电子)_第3页
微机原理课件第23讲(电子)_第4页
微机原理课件第23讲(电子)_第5页
已阅读5页,还剩53页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、第22讲教学目的和要求复习一日一钱,千日千钱,绳锯木断,水滴石穿。计算机的核心功能 顾名思义,计算机的主要功能是完成数据的计算,要解决的问题:选择什么数制来进行运算?运算的类别都包含哪些?运算所需要的数据在哪?以一种什么方式来自动完成某种步骤的运算?如何与外界进行交流?数制与编码指令系统寻址方式汇编程序设计可编程接口芯片寻址方式指令寻址方式顺序寻址跳跃寻址数据寻址方式指令和数据的寻址方式寻址方式:确定本条指令的数据地址或下一条要执 行的指令地址的方法。寻址方式介绍u立即寻址方式:操作数直接在指令中给出。u寄存器寻址方式:操作数所在寄存器在指令中给出。u直接寻址方式:操作数的地址在指令中给出。u

2、寄存器间接寻址方式:操作数的地址所在的寄存器在指令中给出。u寄存器相对寻址方式:操作数的地址是寄存器的内容与位移量之和。u基址变址寻址方式:操作数的地址为指定的基址与变址寄存器内容之和。u相对基址变址寻址方式:操作数的地址为指定的基址与变址寄存器内容,以及偏移量之和构成。寻址方式举例ADD 2BX+SI, AX问题:哪部分是目的操作数,哪部分是源操作数? 各部分的寻址方式如何? 完成一个什么样的运算,对计算机的影响如何?相对基址变址寻址寄存器寻址计算机的核心功能 顾名思义,计算机的主要功能是完成数据的计算,要解决的问题:选择什么数制来进行运算?运算的类别都包含哪些?运算所需要的数据在哪?以一种

3、什么方式来自动完成某种步骤的运算?如何与外界进行交流?数制与编码指令系统寻址方式汇编程序设计可编程接口芯片主要指令介绍 按功能分类 数据传送类 算术运算类 逻辑运算类 串操作类 转移指令(程序控制)类 处理器控制类忽略 忽略 数据传送指令(14条)通用数据传送指令地址目标传送指令MOV字节或字的传送 LEA装入有效地址PUSH入栈操作LDS装入数据段寄存器POP出栈操作LES装入附加段寄存器XCHG 交换字或字节标志传送指令XLAT表转换LAHF标志寄存器低字节装入AH输入输出指令SAHFAH内容装入标志寄存器低字节IN输入PUSHF 标志寄存器入栈指令OUT输出POPF出栈,并送入标志寄存器

4、数据传送指令(核心3条)通用数据传送指令输入输出指令MOV字节或字的传送IN输入OUT输出数据传送类指令MOV指令: 实现CPU内部寄存器或寄存器与存储器间的数据传送。 指令格式:MOV 目的操作数 , 源操作数;四项基本原则:指令中至少要有一项明确说明传送的是字节还是字IP寄存器不能用作源操作数或目的操作数立即数和CS寄存器不能用作目的操作数除了源操作数为立即数的情况外,两个操作数中必有一个是寄存器,但不能都是段寄存器 MOV传送指令【数据段】 数据通常存放在数据段中设某程序数据段定义如下:DATA SEGMENT ;数据段开始AREA1 DB 14H,3BH ;定义字节变量AREA2 DB

5、 3 DUP(0) ;复制操作ARRAY DW 3100H,01A6H ;定义字变量STRING DB GOODDATA ENDS ;数据段结束 汇编后,DATA将被赋予一个具体的段地址。各变量将自偏移地址0000H开始依次存放,各符号地址等于它们在数据段中的偏移量。14AREA13B00AREA2000000ARRAY31A601GSTRINGOOD MOV传送指令例:MOV AL,AREA1 ; ALAREA1中的内容14H MOV AREA2,AL ; 0002H单元 14H MOV DX,OFFSET ARRAY 解:ARRAY的偏移地址DX。(OFFSET:取后面的符号偏移地址的值)

6、 设:ARRAY的定义如左图所示 则:DX = 0005H 14AREA13B00AREA2000000ARRAY31A601GSTRINGOOD数据传送类指令IN、OUT指令: 实现端口数据的读入,或将总线数据送至端口寄存器中。 IN指令格式:IN AL/AX, PORT(或DX); OUT指令格式:OUT PORT(或DX) ,AL/AX ; 【地位地位】接口程序中必备之指令。接口程序中必备之指令。 输入输出指令IN指令 从数据端口输入数据或从状态端口输入状态字。OUT指令 输出数据或命令给指定的I/O端口。直接输入输出指令格式:IN AL,PORT ; AL (PORT) IN AX,P

7、ORT ; AX (PORT+1,PORT) OUT PORT,AL ; (PORT)AL OUT PORT,AX ; (PORT+1,PORT) AX注:PORT为输入输出端口号,范围为0255(00 FFH)输入输出指令间接输入输出指令格式:IN AL,DX ; AL (DX) IN AX,DX ; AX (DX+1,DX) OUT DX,AL ; (DX)AL OUT DX,AX ; (DX+1,DX) AX注:在程序运行前,应先将端口号置入DX中。间接输入输出指令的最大寻址范围是065535。 无论何种I/O指令,数据若为字节,存放在AL中,数据若为字,则存放在AX中,端口号只能存放在

8、DX中。算术运算指令算术运算指令可处理4种类型的数l无符号二进制整数l带符号二进制整数l无符号压缩十进制整数(Packed Decimal)l无符号非压缩十进制整数(Unpacked Decimal) 一个8位二进制数可看成4种不同类型的数,所表示的数值亦不同。算术运算指令数的表示l二进制数:可以是8位或16位,若是带符号数,则用补码表示。l压缩十进制数:一个字节中存放两个BCD码十进制数。l非压缩十进制数:个字节的低半字节存放十进制数,高半字节为全零。算术运算指令二进制H无符号B带符号B 非压缩BCD压缩BCD 0000011107770771000100189137-119无效891100

9、0101C5197-59无效无效l加、减、乘、除运算指令:处理无符号或带符号的8位/16位二进制数的算术运算;l调整操作指令:进行压缩的或非压缩的十进制数的算术运算;算术运算指令(20条)加法指令减法指令ADD加法SUB减法ADC带进位的加法SBB带借位的减法INC 自增量DEC自减量AAA加法的ASCII调整NEG取负DAA加法的十进制调整CMP比较除法指令AAS减法的ASCII调整DIV无符号除法DAS减法的十进制调整IDIV整数除法乘法指令AAD除法的ASCII调整MUL无符号数乘法CBW把字节转换成字IMUL 整数乘法CWD把字转换成双字AAM乘法的ASCII调整算术运算指令(核心5条

10、)加法指令减法指令ADD加法DEC自减量ADC带进位的加法CMP比较INC 自增量算术运算影响标志位的原则l当无符号数运算产生溢出时,CF=1;l当有符号数运算产生溢出时,OF=1;l如果运算结果为0,则ZF=1;l如果运算结果为负数,则SF=1;l如果运算结果中有偶数个1,则PF=1。ADD加法指令ADD加法指令(Addition)格式 ADD dst,src。功能 dst(dst)+(src)源操作数和目的操作数的种类 ADD R,OPRD; OPRD: R,MEM,IMM ADD MEM, OPRD;OPRD:R 源和目的操作数类型必须一致,均为字节或字。 影响的标志位为:CF、OF、P

11、F、SF、ZF和AFADC带进位加法指令ADC带进位加法指令(Addition with Carry)格式 ADC dst,src。功能 dst(dst)+(src)+(CF)源操作数和目的操作数的种类 ADD R,OPRD; OPRD: R,MEM,IMM ADD MEM, OPRD;OPRD:R 源和目的操作数类型必须一致,均为字节或字。 影响的标志位为:CF、OF、PF、SF、ZF和AFADD与ADC举例举例 ADD AL,18H ;AL AL+18H ADC BL,CL ; BL BL+CL+CF ADC AX,DX ; AX AX+DX+CF ADD AL,COSTBX ;DS:(C

12、OST+BX)的存储字 节+AL,结果送AL ADD COSTBX,BL ;DS:(COST十十BX)的存储字 节+BL,结果留在该存储单元中ADD举例举例 假设DX寄存器上的内容为6789H,连续执行下列指令,每条指令执行后BL寄存器的内容分别是什么? MOV BX,1212H;(;(BL)=_ ADD BX,DX; (BL)=_ ADC DX,BX; (BL)=_12H 9BH 9BH ADD与ADC举例举例 分析下列指令对标志位的影响 MOV AL,5EH ; MOV BL,3CH; ADD AL,BL ;0101 1110+ 0011 11001001 1010运算后标志位:ZF0,A

13、F1,CF0,SFl,PF1,若为有符号数,则OF=1INC增量指令INC增量指令(Increment)格式 INC dst。功能 dst(dst)+1操作数的要求 寄存器或内存单元。注意事项l指令主要用在循环程序中,对地址指针和循环计数器等进行修改;l指令执行后影响AF、OF、PF、SF和ZF,但不影响CF。DEC减量指令DEC减量指令 (Decrement)格式 DEC dst。Dst:r,men功能 dst(dst)-1。指令对状态标志位SF、ZF、AF、PF和OF有影响,但不影响进位标志CF。举例lDEC BX ;BX BX-1lDEC WORD PTRBP ;堆栈段中位于BP偏移地址

14、处的字减1。 DEC减量指令应用实例: 在循环程序中常常利用DEC指令来修改循环次数。 MOV CX,0HCYC: ;some order DEC CX JNZ CYC HLT 程序段中DEC AX指令重复执行_次。65536 CMP比较指令CMP比较指令 (Compare)格式 CMP dst,src。功能 (dst)-src。目的-源, 结果不回送到目的操作数中,仅反映在标志位上。注意事项 CMP指令的目的操作数可以是寄存器或存储器,源操作数可以是立即数、寄存器或存储器,但不能同时为存储器。可以进行字节比较,也可以是字比较。CMP比较指令 由于参与比较的数可以为无符号数,也可以为有符号数,

15、在比较后判断大小时,需要应用不同的比较测试指令。l无符号数比较测试指令中(JA、JB) 指令助记符中的“A”Above,“B”Below;l带符号数比较测试指令中,指令助记符中的(JG、JL) “G”(Great than)表示大于,“L”(Less than)表示小于。位运算指令(12条)逻辑运算逻辑运算循环移位循环移位NOT取反ROL循环左移AND与ROR循环右移OR或RCL通过进位的循环左移XOR异或RCR通过进位的循环右移TEST测试算术逻辑移位算术逻辑移位SHL/SAL逻辑/算术左移SHR逻辑右移SAR算术右移 位操作指令是对8位或16位的寄存器或存储单元中的内容按位进行操作。忽略

16、逻辑运算指令命令含义指令举例NOT取反NOT AXAND与AND AL,80HOR或OR AL,7FHXOR异或XOR AX,AXTEST测试TEST AL,80H算术逻辑移位指令命令含义指令格式SHL/SAL逻辑/算术左移SHL/SAL dst,1/CLSHR逻辑右移SHR dst,1/CLSAR算术右移SAR dst,1/CLMSBLSB0CFMSBLSB0CFMSBLSBCF循环移位指令命令含义指令举例ROL循环左移ROL dst,1/CL ROR循环右移 ROR dst,1/CLMSBLSBCFMSBLSBCF移位指令举例【举例】编写程序统计DL中数字0的个数,将统计的结果保存在BL寄

17、存器中,要求程序结束后,DL中保持原来数据不变。【思路】将数据循环移位,判断进位是否为0,为0,计数器加1,否则,进入下一次循环。01101011DL:011010110ROL1101011CF01101011移位指令举例【举例】编写程序统计DL中数字0的个数,将统计的结果保存在BL寄存器中,要求程序结束后,DL中保持原来数据不变。CODE SEGMENTASSUME CS:CODESTART: MOV CL,8 MOV BL,0 NEXT: ROL/ROR DL,1 JC LP INC BLLP:LOOP NEXTMOV AH ,4CHINT 21HCODE ENDSEND START控制转

18、移指令(28条)无条件转移和过程调用条件转移指令JMP无条件转移JZ/JE等等10条指令条指令直接标志转移CALL过程调用JA/JNBE等等8条指令条指令间接标志转移RET过程返回条件循环控制中断指令LOOPCX0循环INT中断LOOPE/LOOPZCX0和和ZF=1INTO溢出中断LOOPNE/LOOPNZ CX0和和ZF=0IRET中断返回JCXZCX=0则转移忽略 忽略 忽略 举例 控制转移指令后紧跟目的指令地址,一般以标号来表示,可以向前跳转,也可以往后跳转。如YYY: JMP/JC/LOOP/JG XXX/YYY XXX: 计算机的核心功能 顾名思义,计算机的主要功能是完成数据的计算

19、,要解决的问题:选择什么数制来进行运算?运算的类别都包含哪些?运算所需要的数据在哪?以一种什么方式来自动完成某种步骤的运算?如何与外界进行交流?数制与编码指令系统寻址方式汇编程序设计可编程接口芯片汇编语言的完整结构 要保证程序能被正确识别,所编写的程序需满足一定的语法规则,才能被计算机所正确识别。 【数据段】 【代码段 核心实现部分 代码段结束 程序结束】DATA SEGMENT DA1 DB 30H DA2 DB 10 dup(0) COUNT DB 00H DATA ENDSCODE SEGMENT ASSUME CS:CODE,DS:DATA START:CODE ENDSEND STA

20、RT汇编语言的完整结构 除程序当中需要定义数据段的情况、或者题中有“需要写出完整的汇编程序”外, 所写程序中仅需写出核心实现部分即可 直接按照如下格式: Kernel codes 汇编语言语句的类型和格式q指令语句:与机器指令对应,汇编程序能将其翻译成目标代码,CPU 可以执行的能完成特定功能的语句。q伪指令语句:它是一种不产生目标代码的语句,它仅仅在汇编过程中告诉汇编程序应如何汇编。主要完成数据定义、存储区分配、段定义、段分配、指示程序结束等功能。汇编语言的指令语句可以由14部分构成:【标号:】助记符 【操作数1】【操作数n 】 【;注释】 LOOPER: MOV AL,DATA2SI ;取

21、一个字节加数 其中方括号中间的内容可以省略。指令语句的格式汇编语言的伪指令语句可以由14部分构成:【名字】指示符 【操作数1】【操作数n 】 【;注释】 DATA1 DB 0F8H,60H,0ACH,74H,3BH ;被加数 名字是给伪指令取的名称,它用符号地址标识,名字后面不允许带“:”,名字可以是变量名、段名、过程名。 变量名。变量名代表存储器中一个数据区的名字。例如,DATA1、DATA2就是变量名。 伪指令语句格式 标号实质上是指令的符号地址,用来代表指令在存储器中的地址。 标号后必须带“: :”,如“str1:”。汇编后就会转变为地址,最长31个字符。 只能出现在指令语句中,且标号后

22、必须带冒号只能出现在指令语句中,且标号后必须带冒号 标号 段、过程、变量的名字,用来代表它们在存储器中的地址。 只能出现在伪指令语句中,名字后不加冒号名字 data SEGMENTHello DB Hello, world!,0DH,0AH,$data ENDSprog SEGMENT ASSUME CS:prog,DS:datastart: MOV AX,data MOV DS,AX LEA DX,hello;取字符串首地址 MOV AH,9 INT 21H;显示字符串 MOV AH,4CH INT 21H;退回DOSprog ENDS END start名字标号汇编语言的一个实例: hel

23、lo.asm操作数的种类操作数的种类包括常量、变量、标号及表达式。MOV DX,1234HDA1 DB 20HMOV BL,DA1XX:ADD BL,1JMP XXMOV DX,OFFSET DA1 表达式由运算对象和运算符组成,汇编时,程序对它进行运算,运算结果作为语句中的一个操作数使用,按其性质可分为两种:数值表达式和地址表达式。 表达式表达式是常数、寄存器、标号、变量与运算符的组合。汇编时按优先规则对表达式进行计算,计算出具体的数值或地址。运行时不能改变。 由于接口程序相对简单,故较少用到表达式,但必须掌握OFFSET、SEG等常用的表达式的含义,及简单计算。 表达式 伪指令语句 其他需掌握内容数据定义语句,如DB,DW,DD等标号赋值语句,如EQU,=等段定义语句,如SEGMENTENDS段分配语句,如ASSUME过程定义语句,如PROCENDP程序开始结束语句,如END下列变量各占多少字节?A1DW23H, 5876HA2DB3 DUP(?), 0AH, 0DH, $A3DD5 DUP(1234H, 567890H)A

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论