最新微型计算机技术58612PPT课件.ppt
《最新微型计算机技术58612PPT课件.ppt》由会员分享,可在线阅读,更多相关《最新微型计算机技术58612PPT课件.ppt(80页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、微型计算机技术微型计算机技术5861258612第四章 汇编语言程序设计基础 41循环程序设计 在程序设计中,常常需要一段程序反复执行若干次,这通常用循环的方法来实现,借助几种循环控制指令和前缀可以方便地实现循环。411基本结构的循环程序(1)初始化部分:循环前的准备工作,包括建立指针、设置变量及循环初值等。(2)循环体:这是循环程序的工作部分,完成循环的基本操作。(3)修改部分:修改参数,包括操作数地址、循环计数值或其他控制变量。(4)控制部分:根据对循环条件的判断结果,控制循环的执行或结束。初始化循环体初始化修改部分修改部分循环体循环控制循环控制YNNY先工作后判断先判断后工作DSEG S
2、EGMENTN EQU 5A DW 5 DUP(?)DSEG ENDSCSEG SEGMENTMAIN PROC FAR ASSUME CS:CSEG,DS:DSEGSTART:MOV AX,DSEG MOV DS,AX NUM :ADD SI,2 MOX CX,N LOOP LOOP2 DEC CX MOV CX,DXLOOP1:MOV DX,CX LOOP LOOP1 MOV SI,0 MOV AH,4CHLOOP2:MOV AX,ASI INT 21H CMP AX,ASI+2 MAIN ENDP JLE NUM XCHG AX,ASI+2 CSEG ENDS MOV ASI,AX EN
3、D START 42 分支程序设计4.2.1 分支程序结构 两路(单重)分支结构 多路(多重)分支结构 这两种结构都要求先对条件进行判定,然后根据判定结果确定执行哪路分支,判定一次只能有一路分支被选择。一般来讲一个条件两路分支;N个条件,2N路分支。判定条件判定条件ABABXYN 4.2.2 分支程序的设计方法 分支程序的实现方法有多种,最常用的方法有:利用比较和条件转移指令实现分支,利用逻辑尺控制分支,以及利用地址跳转表实现分支等方法。例:X/2 X0 Y=2 X=0 2X X0 这个问题可以通过X与0的比较,利用条件转移指令来确定三个计算分支中的某一支。MOV AL,X CMP AL,0
4、JL M1 JZ M2 SAL AL,1 JMP NEXT M1:SAR AL,1 JMP NEXT M2:MOV AL,2 NEXT:MOV X ,AL ALXX0?AL2X=0?AL2AL2XALYNYN利用逻辑尺控制分支也是常见的一种分支程序设计方法。例:编写一个显示程序,要求显示A和B共8次,显示次序为A3次,B2次,A1次,B2次。因此,可设计一个逻辑尺:00011011,0表示显示A,1表示显尔B。编程时,逐值测试逻辑尺,是0则执行显示A的分支,是l则执行显示B的分支。部分程序如下:.MOV CX,8 MOV BL,00011011BLOP:SHL BL,1 JC M1 CALL
5、AA1 JMP NEXT M1:CALL BB1NEXT:LOOP LOP HLTCX次数BL逻辑尺逻辑尺左移一位=1?执行A执行BYNCX-1=0?N分支程序设计时要注意各个分支一定要转入到公共操作上。本例和上例中的橙色框。利用地址跳转表的方法主要用于多路分支(三路分支以上)的情况,下面通过一个实例来说明这种程序设计方法。在调用DOS文件管理功能时,如出现了错误(如使用了非法功能号),DOS则根据AX中的错误码,将相应的错误信息显示出来。(AX)15各表示一种错误,其错误信息分别为ERl ER5。AX除l 5之外的数码是无效的。(1)错误信息提示的地址分别为ERl ER5。(2)ERl ER
6、5构成跳转表,表首地址为ERTAB。(3)表中各项的地址为表首址+(功能号-1)21号错误提示2号错误提示3号错误提示4号错误提示5号错误提示ER1ER2ER3ER4ER5ER1ER2ER3ER5ER4ERTABERTAB+2ERTAB+4ERTAB+6ERTAB+8DATA SEGMENT CMP AX,5 OUTR DB “非15”JG OUTR ;5转至OUTRER1 DB “错误1提示”CMP AX,1 ER2 DB “错误2提示”JGE TADR ;15转TADRER3 DB “错误3提示”OUTR:LEA DX,OUTRER4 DB “错误1提示”JMP DISPM ;转至DISP
7、MER5 DB “错误1提示”TADR:MOV BX,AXEVEN DEC BXERTAB DW ER1,ER2,ER3 SHL BX,1 DW ER4,ER5 MOV DX,ERTABBXDATA ENDS DISPM:MOV AH,9CODE SEGMENT INT 21HSHOWERR PROC FAR POP BX ;恢复现场 ASSUME CS:CODE,DS:DATA POP DX MOV SI,DATA POP AX MOV DS,SI REG PHSU AX ;保护现场 SHOWERR ENDP PUSH DX CODE ENDS PUSH BX END 4.3 子程序设计 子
8、程序又称为过程,在程序实现中,如果要多次用到一些功能相同的程序段,那么就可以用伪操作PROC和ENDP把这些程序段定义成子程序。需要时用CALL指令来调用它,调用程序也称为主程序。子程序有两种属性:NEAR(缺省的属性)和FAR。和调用程序在同一代码段中的子程序使用NEAR属性,和调用程序不在同一代码段中的子程序使用FAR属性。4.3.1 主程序与子程序之间的参数传送 主程序在调用子程序时,需要传送一些参数(入口参数)给子程序,子程序运行完后也要将运行结果(出口参数)回送给主程序。利用寄存器传送参数传送参数的方式:利用存储区传送参数 利用堆栈传送参数 1利用寄存器传送参数 这种参数传送的方式方
9、便、快速,但只适合传送参数较少的情况。例:编写程序,将一个16位二进制数转换成用ASCII表示的十进制数。这是一个常用的转换子程序,应提供给所有的用户调用。因此,要将该子程序的人口参数和出口参数注释清楚,方便调用。本例是通过DX和DI寄存器传递参数的。DATA SEGMENTOUTB DB 5 DUP(30H)N EQU 12345HDATA ENDSCOND SEGMENTASSUME CS:CODE,DS:DATASTART:MOV AX,DATA MOV DS,AX MOV DX,N ;入口参数 LEA SI,OUTB ;入口参数 CALL BIN-TO-ASC ;调子程序 MOV AX
10、,4C00H INT 21H 入口参数:DX =被转换数 DI =结果单元首地址 出口参数:DI =ASCII码结果单元首地址 BIN-TO-ASC PROC PUSH CX ;保护现场 POP DI;恢复现场 PUSH AX POP AX PUSH DI POP CX ADD DI,4 ;指向最低位 RET BINAO:MOV AX,DX BIN-TO-ASC ENDP MOV DX,0 CODE ENDS MOV CX,10 END START DIV CX ;10 XCHG AX,DX;商余数 ADD AL,30H;转换ASCII码 MOV DI,AL;存结果 DEC DI ;修改指针
11、CMP DX,0 JNZ BINA0 ;0,转BINA0本例中,N为二进制数,先除10,余数为个位,或30H变为ASCII码;再对商除10,余数为十位,或30H变为ASCII码;直至商为0。2利用存储区传送参数参数存放在存储区中,入口参数为存储区首地址。适合参数较多的情况。例:TABLE数组中存有15个十进制数,挑出最大数存放在MAX单元中。DATA SEGMENT FOUNT PROCTABLE DB 4,6,8,4,9 MOV AL,SIN EQU 15 DEC CX MAX DB?INC SIDATA ENDS LOP :CMP AL,SICODE SEGMENT JG L1 ASSUM
12、E CS;CODE,DS:DATA MOV AL,SISTART:MOV AX,DATA L1 :INC SI MOV DS,AX LOOP LOP MOV CX,N FOUNT ENDP LEA SI,TABLE;入口参数 CODE ENDS CALL FOUNT END START MOV MAX,AL MOV AH,4CH INT 21H 3.利用堆栈传送函数 利用堆栈适合于传送参数多,而且子程序有嵌套、递归调用的情况。主程序将参数或参数地址推入堆栈,子程序从堆栈中取出参数或参数地址。利用堆栈传送涵数一定要注意堆栈的变化,如果参数和返回地址混淆,会造成子程序不能正确返回的错误。例:调加密
13、子程序将数组中的数据Aj加密。秘约规则为Aj2,再各位求反。DSEG SEGMENT START:MOV AX,DSEG N EQU 20 MOV DS,AXARAY DW N DUP(?)MOV AX,SSEGDSEG ENDS MOV SS,AXSSEG SEGMENT LEA SP,TOP;指定栈底 DW 64 DUP(?)LEA BX,ARAYTOP LABEL WORD PUSH BX ;首地址入栈SSEG ENDS MOV BX,N ;个数入栈CSEG SEGMENT PUSH BX ASSUME CS:CSEG,CALL ECRY SS:SSEG,MOV AX,4C00H DS:
14、DSEG INT 21HECRY PROC POP BX PUSH BP ;用BP取 POP AX MOV BP,SP;入口参数 POP BP PUSH AX ;保护现场 RET 4 PUSH BX ECRY ENDP PUSH CX CSEG ENDS PUSH SI END START MOV SI,0 MOV CX,BP+4;取入口参数 MOV BX,BP+6DONE:MOV AX,BX+SI SHL AX,1 XOR AX,0FFFFH ADD SI,2 LOOP DONE POP SI ;恢复现场 POP CX 保护现场后 恢复现场后SICXBXAXBP个数N首地址栈底BP返回地址首
15、地址返回地址个数N栈底SPMOV BP,SP 4.4 IO程序设计 信息交换 地址端口:地址信息 主机 I/O接口 数据端口:状态信息 状态端口:数据信息4.4.1 直接控制 IO的程序设计 1IO端口 在80 x86微机中,IO端口编址在一个独立的地址空间中,这个IO空间允许设置64K(65536)个8位端口或32K(32768)个16位端口。2IO程序举例对于IO和存储器分离的地址空间系统,80 x86有专门的IO指令与端口进行通信。下面通过几个IO程序的例子,说明使用IO指令直接在端口级上输入输出的方法。输入指令 输出指令IN AN,30H OUT 30H,ALIN AX,40H OUT
16、 40H,AXIN AL,DX ;DX16位端口地址 OUT DX,AX;DX16位端口地址 IN AX,DX ;DX16位端口地址 OUT DX,AX;DX16位端口地址 例:SOUND程序。程序通过IO指令使设备控制寄存器(1O端口地址为61H)的第1位交替为0和l,而61H端口的第l位和扬声器的脉冲门相连,交替为0和l的脉冲电流被放大后送到扬声器使之发出了声音。7 6 5 4 3 2 1 0 SOUND PROC PUSH AX PUSH DX MOV DX,1000 IN AL,61H DEC DX AND AL,11111100B JNZ TRIG TRIG:XOR AL,00000
17、010B POP DX OUT 61H,AL POP AX MOV CX,6000 RETDELAY:LOOP DELAY SOUND ENDP1/0与门放大器端口 61H本例中CX=6000它决定发声频率值小声音尖锐,值大声音低沉。DX=1000决定发声时间长短。例:PRTCHAR程序。这是一个采用查询方式的打印字符程序。程序通过反复渎取并测试打印机的状态来控制输出。在打印机接口中,数据寄存器的端口地址为378H,状态寄存器的端口地址为379H,控制寄存器的端口地址为37AH。7 6 5 4 3 2 1 0 忙位(0=忙)未用应答(0=可接受)打印出错(0=出错)纸出界(1=出界)联机状态(
18、1=联机)7 6 5 4 3 2 1 0 未用 选通(1=输出数据)工作方式 自动换行(1=换行)(0=禁止中断方式)初始化(1=正常)选择位(1=接通)状态寄存器端口379H控制寄存器 端口37AHDATA SEGMENT MOV DX,37AHMESS DB PRINTER IS NORMAL MOV AL,0DH;选通输出COUNT EQU -MESS OUT DX,ALDATA ENDS MOV AL,0CH CSEG SEGMENT OUT DX,AL ASSUME CS:CSEG,DS:DATA INC SISTART:MOV AX,DATA LOOP NEXT MOV DX,AX
19、 MOV AH,4CH LEA SI,MESS;建地址指针 INT 21H MOV CX,COUNT;CX次数 CSEG ENDSNEXT:MOV DX,379H;DX状态地址 END START WAIT:IN AL,DX ;AL状态端口 TEST AL,80H ;测忙否 JZ WAIT ;忙(=0)再测 MOV AL,SI;不忙,输出 MOV DX,378H;DX数据地址 OUT DX,AL TEST指令测状态寄存器的第7位,为0表示忙,循环再测,直至为1空闲时,再取字符输 出打印。称为查询方式。0DH为控制寄存器选通信号,0CH为结束选通。又例:CPU要从3个设备轮流输人数据,PROCl
20、,PROC2,PROC3分别是设备l,设备2和设备3的数据输入程序,它们的状态寄存器的端口地址分别用STAT1,STAT2,STAT3表示,这三个状态寄存器的5位是输入准备位。轮流查询三个数据输入设备的程序段:INPUT:IN AL,STAT1 ;AL状态寄存器1 TEST AL,20H ;输入准备好?JZ DEV2 ;否,转DEV2 CALL FAR PTR PROC1 ;准备好,调PROC1DEV2:IN AL,STAT2 TEST AL,20H JZ DEV3 CALL FAR PTR PROC2DEV3:IN AL,STAT3 TEST AL,20H JZ NO-INPUT CALL
21、FAR PTR PROC1NO-INPUT:查询方式的优点:可以安排优先次序,最先查询的设备优先级最高。修改查询次序就修改了设备的优先级。缺点:查询等待浪费CPU的时间,在设备多时由询问转向处理程序的时间较长。4.4.2 中断程序设计 中断是一种使CPU中止正在执行的程序而转去处理特殊事件的操作,引起中断的事件称为中断源。中断是CPU和外部设备进行输入输出的有效方法。可以避免因反复查询外部设备的状态而浪费时间,从而提高CPU的效率。中断源分为软件中断(或称内中断)和硬件中断(或称外中断),系统通过分配给这些中断的类型号来加以识别和处理。80 x86中断源及其中断类型号 IR0 8259A IR
22、1 可编程 IR2 中断 IR3 控制器 IR4(PIC)IR5 IR6 IR708系统定时器09键盘0A彩色/图形0B串行COM20C串行COM10D LTP2控制0E磁盘控制器0F LTP1控制非屏蔽中断请求中断逻辑INTn指令单步TF=1除法错误INT0指令INTRNMI2401nCPU 1.软件中断的执行 (1)中断指令INT n的执行。CPU执行一条INTn指令时,中断系统立即产生类型为n的中断,并且通过中断向量调用相应的中断处理程序来完成其中断功能。(2)处理CPU某些错误的中断。除法错中断:在执行除法指令时,若发现除数为0或商超过了寄存器所能表达的范围,则立即产生一个类型为0的中
23、断。溢出中断:有一条专门的指令INTO来中断发生溢出的算术操作。如果OF1,INTO指令引起中断,如OF:0,则不发生中断,CPU继续运行原程序。溢出中断的类型号为4。(3)为调试程序没置的中断。单步中断:单步是一种很有用的调试方法。当标志位TF设置为l时,每条指令执行后,CPU自动产生类型号为1的单步中断。断点中断:断点可以设置在程序的任何地方,设置断点实际上是把一条断点指令INT3插入程序中,CPU每执行到断点处的INT3指令便产生一个中断。INT指令和INTO指令产生的中断。以及除法错中断都不能被禁止,并且比任何外部中断的优先权都高。2硬件中断的执行 硬件中断:非屏蔽中断(NMI)外部设
24、备的请求引起的可屏蔽中断。CPU响应中断的条件:该外设的中断请求是否屏蔽:中断屏蔽寄存器(IMR)CPU是否允许响应中断:标志寄存器中断允许位IF 中断屏蔽寄存器(IMR)的IO端口地址是21H。通过设置这个寄存器的某位为0允许中断;为1禁止(屏蔽)中断。中断屏蔽寄存器 7 6 5 4 3 2 1 0 (I/O端口20H)打 软 硬 串 串 保 键 定 印 行 行 时 机 盘 盘 通 通 留 盘 器 信 信例:只允许键盘中断,可设置如下中断屏蔽字:MOV AL ,11111101B ;AL中断屏蔽字 OUT 21H,AL ;送入中断屏蔽寄存器IMR 如果系统增设键蛊中断,则可用下列指令实现:I
25、N AL ,21H ;取中断屏蔽字 AND AL ,11111101B ;将第1为置0,保留其余位不变 OUT 21H,AL ;回送21H端口 中断标志位IF的设置:STI ;设置中断允许位(IF1),允许中断(开中断)CLI ;清除中断允许位(1F0),禁止中断(关中断)中断命令寄存器 7 6 5 4 3 2 1 0 (I/O端口20H)中断命令寄存器:EOI是中断结束位,当EOI为1时,当前正在处理的硬件中断请求就被清除,所以在中断处理完成后,必须把中断结束位置为1。结束硬件中断用下面的指令:MOV AL,20H ;20H=00100000B,置EOI为1 OUT 20H,AL ;RSL
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 最新 微型计算机 技术 58612 PPT 课件
限制150内