微机原理与接口技术楼顺天第4章6

上传人:无*** 文档编号:69902781 上传时间:2022-04-06 格式:DOC 页数:88 大小:763KB
返回 下载 相关 举报
微机原理与接口技术楼顺天第4章6_第1页
第1页 / 共88页
微机原理与接口技术楼顺天第4章6_第2页
第2页 / 共88页
微机原理与接口技术楼顺天第4章6_第3页
第3页 / 共88页
点击查看更多>>
资源描述
本教案内容第4章汇编语言程序设计1. 汇编语言程序设计基础2. 源程序的汇编、连接与调试3. 分支程序设计技术4. 循环程序设计技术5. 子程序设计技术6. 综合程序设计示例461汇编语言的语句格式 曲汇编语言编写的源程序是由许多语句(也可称 为汇编指令)组成的。每个语句由14个部分 组成,其格式是:标号指令助记符操作数;注解 其中用方括号括起来的部分,可以有,也可以 没有。每个部分之间用空格(至少一个)分开, 这些部分可以在一行的任意位置输入,一行最 多可有132个字符。1.标号(也叫做名称)是给指令或某一存贮单元地址所起的名字, 名称可由下列字符组成:字母:AZ数字:09特殊字符:?、.、一、$当名称后不带冒号时,有可能是标号,也可能是 变量。伪指令前的名称不加冒号,当标号用于段间调 用时,后面也不能跟冒号。例如:段内调用OUTPUT: INAL, DX段间调用OUTPUT: INAL, DX2指令助记符指令助记符表示不同操作的指令,可以性捋令助记符,也可以是伪指令。如果指令带 有前缀(如LOCK、REP、REPE/REPZ、 REPNE/REPNZ),则指 令前缀和指令助记符 要用空格分开。3.操作数依指令的要求,操作数可能有一个、两 个或者没有,也可能有多个操作数。当操作数 超过1个时,操作数之间应用逗号分开。操作数可以是常数、寄存器名、标号、变 量,也可以是表达式。4.注解在注解前面要加分号,它可位于操作注解项可有可无,是为源程序所加的 注解,用于提高程序的可读性。数之后,也可位于一行的开头。汇编时, 对注解不作处理,仅在列源程序清单时 列出,供编程人员阅读。例如:;读端口 B数据IN AL, PORTB;读B口到AL中4.6.2常数汇编语言语句中出现的常数可以有以下7种。1三进制数 二进制数字后跟字母B,如OlOOOOOlBo2. 八进制数八进制数字后跟字母Q或O,如202Q或2020。3. 十进制数十进制数字后跟D或不跟字母,如85D或85。4.十六进制数 十六进制数字后跟H,如56H, OFFHo注意,当数字的第一个字符是AF时,在字符前应添加一个数以示和变量的区别5. 十进制浮点数浮点十进制数的一个例子是25E-2o6. 十六进制实数十六进制实数后跟R,数字的位数必须是8, 16或20。在第一位是0的情况下,数字的位数可以是9, 17或21,如0FFFFFFFFR 以上第5, 6项中,两种数字格式只允许在MASM中使用。7. 字符和字符串字符和字符串要求用单引号括起来,如ZBDZO 4.6.3作为主模块,下面几个部分是不可少的。OASSUME伪指令告诉汇编程序,哪一个段和 哪一个段寄存器相对应,即某一段地址应放入哪一个 段寄存器。 DOS的装入程序在装入执行时,将把CS初始化为正确的代码段地址,把SS初始化为正确的堆栈段地址,因此在源程序中不需要再对他们进行初始化。在DOS环境下,通常采用DOS的4CH号中断功能调用使汇编语言返回DOS,即采用如下两条指令:MOV AH, 4CHINT 21H4.6 .4综合程序设计示例本节介绍一些汇编语言设计的综合示例,包括 各种题型:今析範和觴程龜。例4. 16单项选择题 1在伪指令BUF DB 20 DUP (2, 2 DUP ( 8 )定义的缓冲 区中,数据字0208H的个数有:4.6 .4综合程序设计示例19 20 404.6 .4综合程序设计示例4.6 .4综合程序设计示例2将DX: AX构成的双字(有符号数)除以2的指令为: SAR AX, 1 SHR AX, 1RCRSARDX, 1DX, 1RORAX, 1RCR DX, 1RCR AX, 13. MOV BL, 55H AND 0F0H指令执行后, 55H 0F0H 50H(BL)的内容为:05H解:答案依次为。例4.17多项选择题(DMOV AX, 0SUB AX, AX CMP AX, AX XOR AX, AX(5)AND AX, AX2.已有定义 DATA SEGMENTVARI DW 10 DUP (?)DATA ENDS则源操作数为立即寻址的指令有:MOV AX, DATA MOV AX, OFFSET VARI MOV AX, SIZE VARIMOV AX, VARIMOV AX, LENGTH VARI1.能使(AX)和CF同时清零的指令有3使用AL寄存器的指令有: (DSAHF ST0S1解:1.2. 例4.18分析下列程序段完成的功能: XALTAAAMOVSB3.MOV CX, 100LEASI, FIRSTLEA DI, SECONDCLDREP MOVSB解:只要搞清楚MOVSB指令的用法,就容易分析出 该程序段的功能:从缓冲区FIRST传送100个字节 到缓注区SECOND.4.6 .4综合程序设计示例例4.19分析下列程序段:LEA DI, STRINGMOV CX, 200CLDMOV AL, 2OH REPZ SCASB JNZ FOUNDJMP NOT-FOUND 问:转移到FOUND的条件。 解:只要搞清楚SCASB指令和重复前缀REPZ的用法, 就可以分析出该程序段的功能:在200个字节的缓冲 区STRING中,如果找到非空格字符(ASCII码为20H) 则转到FOUND;如果全是空格,则转到NOT.FOUND。例4.20 分析下列子程序FUNC1,并回答相应的问题。FUNCI PROCNEARXOR CX, CXMOVDX, 01MOVCL,XJCXZA20INCINCDXDXDECCXJCXZA20A10: MOVAX, 02SHLAX, CLADDDX,AXLOOPA10A20: MOVRETY,DXFUNCI ENDP若该子程序的入口参数为X (0X10),其输出参数 为Y,则:(1) 该子程序的功能是Y=f (X) =;(2) 若x=o,贝n=:若X=3,贝;若 X=5,则丫=。解:分析题是近年来出现的比较多的考题对于分析题,应该边分析边画流程草图,特别要注意搞清楚数据缓冲区的结构.指针及其操作过程,这样便于理解程序的功能和思路。4.6 .4综合程序设计示例通过分析该子程序,很容易获知,当X=0时,直接转到A20, 即Y = l;当X = 1 时,Y = 3;当X = 2时,Y = 7;当X=3时,Y = 15;如此等等,当X = n时,有y = 2 + 2 + +227因此第(1)题为丫 =于(兀)二2川-1 ;由分析过程和得到的表 达式,第(2)题士个空应依次填1; 15, 63。例4. 21 已知N(3NQ时,(AX)=1;当 2Pq,程序应转向CIO。 当2xpQ时,应转向C20。只有当高位字相等时,才需要比较低位字,因此根据以上 分昴,可以确定各处填入的指令分别为:第空填入JB;第空填入JA;第空填入JBE;第空填入JMP。例4. 23 编写子程序C0MPT4DIV1,完成4字节(即双字)的 无符号数除以1字节。解:设要完成的操作为A = P4-Q,其中q为一个字节,p由4 个字节构成。将P的4个字节从高位到低位分别表示成P4、P3、P2和P1,贝U A = P4-Qx220 +P3-Qx216 + P2-Qx28+P1-Q这样可以将计算分成下列4个步骤: 先计算,其商为结果A的31 24位;(2)应该特别注意上一步操作的余鹫R护強卫义,它应该 与P3构成一个字,因此这时应完成丄匕,其商可 能是16位,应该加到A的31-16位; 与(2)步类似,完成(R2:P2)Q ,其商加到A的23 8位; 与(2)步类似,完成(R3:HHQ,其商加到A的 150位;子程序C0MPT4DIV1的入口参数为:DX: AX (参数P )和 CL (参数Q),出口参数为:DX: AX (计算结果,即参数 A),釆用寄存器参数传递方式,用到的寄存器为:DX和AX。 利用汇编语言编写的子程序C0MPT4DIV1及其应用示例如下:4.6综合程序设计示例STACKSEGMENT STACKSTACK7DW 100H DUP (?)TOP STACKDATACONSTXDATLABEL WORDENDSSEGMENTDW 42DD 98765432:1YDATDD ?;166D1I3BHdataRNT)SCODESEGMENT ASSUME CS: CODEJDS: DATA, ES: DATA, S& STACKSTART:MOV AX,DATAMOV DS, AX4.6综合程序设计示例MOV ES,AXMOV AX,STACKMOV SS,AXLEA SP,TOPMOV CX,CONSTMOV AX,WORD PTR XDATMOV DX, WORD PTR XDAT+2 CALL COMPT4DIV1MOV WORD PTR YDAT,AX;显7F计算结果MOV WORD PTR YDAT+2,DX XCHG AX, DXCALL DISPAXXCHG AX, DXCALL DISPAX4.6综合程序设计示例4.6综合程序设计示例返回DOS;保存低位字CALL DISPCRMOV AH,4CHMOV AL, 0INT 21HCOMPT4DIV1 PROC NEARPUSH BXPUSH CXPUSH SIXOR CH,CHCMP CX, 1JE COMPTDIV1MOV SI,CXPUSH AXMOV AX, DXXOR DX, DXXOR BX, BX ;结果暂存在BX: CXXOR CX,CXPUSH AX;保存高位字XOR AL, AL ;最高位字节除以QXCHG AL, AHDIV SIADD BH,ALMOV AH, DL ;次高位字节除以QPOP DXMOV AL,DLXOR DX,DXDIV SIADD BL,AL4.6综合程序设计示例4.6综合程序设计示例;第三位字节除以Q;取出低位字;最低位字节除以Q;取出低位字ADC BH,AH MOV AH,DL POP DXPUSH DXMOV AL, DH XOR DX, DXDIV SIADD CH,AL ADC BL, AHMOV AH,DL POP DXMOV AL, DL XOR DX, DXDIV SIADD CL,ALADC CH, AHMOV AX, CXMOV DX, BXCOMPTDIV1:POP SIPOP exPOP BXRETCOMPT4DIV1 ENDPCODE ENDSEND START当除数Q=1时,A=P,可以直接得到结果,不需要进行复杂的运算。1 卜+一卜+44卜+44卜+44卜+44卜+ 例4. 24在首址为XDAT的字型数组中,第一个字 存放某单位的人数N (N1000 ),第二个字存放B(个人所得税起征额),从第三个字开始分别存放 该单位N个人的A (本月收入总额,A300000 )。要 求编写汇编语言程序实现:根据个人所得税率表和 个人所得税计算公式计算个人应纳税和单位应纳税 总额,将结果存储在首址为YDAT的字型组中,其中 第一个字存放单位人数,第二个字存放单位纳税总 额,从第三个字开始分别存放该单位N个人的个人 应纳税。个人所得税率如表4. 5所示。衣4.5个人所得税率衣E (全月应纳税所得额C (税率()D (速算扣除数级裳(单位:元单位:元1)5n12500=E2000102532000=E5000151254 uuuuuu uuuvZU52000=E40000251375640000=E600()030337560000=E800007356375880000=E= 10000045153759个人所得税计算公式为:S (应纳税)=E (全月应纳税总额)XC (税率)-D (速算扣除数)其中,E = A (本月收入总额)-B (个人所得税起征额)。例 如,若张三的A = 1200元,个人所得税起征额B= 1600,由E = A -B0,得S=0。若李四的A = 2600元,个人所得税起征额B = 1600,由E = A-B= 1000tg,查“个人所得税率表”可得C=10%, D=25元,因此李四应纳税为:S= (A-B) x C-D= (2600-1600) x 10%-25=75(元)4.6综合程序设计示例4.6综合程序设计示例F:题目的要求比较复杂,而且有一定的难度。为此,应 该先搞清楚缓冲区结构,输入缓冲区XDAT和输出缓冲区 丫。人丁的结构如图4.10所示。在XDAT中,第一个字为某单位 的人数N,第二个字表示个人所得 税起征额B,从第三个字开始,每 两个字存放一位员工的工资A。玉 YDAT中,第一个字为某单位的人 数N,第二、三个字用于存放全 单位应交个人所得税的总和,从 第四个字开始,每两个字用于存 放每位员工应交个人所得税S。 在程序设计中,分别采用指针SI和DI来指示。XDATA1A2DINSS1S2YDAT图4.10输入和输出的数据结构4.6综合程序设计示例为了计算方便,将表4. 5中的个人所得税9个等级变换成三个数据表:INCOME (个人所得税界线值,双字型变 量)、TAXRATE (税率,字型变量)、DEDUCTION (速算 扣除数,字型变量),其结构如图4. 11所示。INCOME存放每个等级的上限值,最后一级可以给定一个较大的值, 比如300000 (由题目限定)。编写子程序INCOMERATE实现个人所得税的计算,其入 口参数为DX: AX (工资A)和BX (个人所得税起征额B), 出口参数为DX: AX (个人所得税S),采用寄存器参数传 递方式。4.6综合程序设计示例4.6综合程序设计示例INCOMEBX+SI5002000500020000400006000080000100000300000DEDUCTIONBX0251253751375337563751037515375图4.11个人所得税界线值.税率和速算扣除数的结构4.6综合程序设计示例在子程序INCOMERATE中,先计算出E = A-B,然后 将E与INCOME中的上限值比较,确定出征税的等级,并 通过TAXRATE和DEDUCT I ON找出税率C和速算扣 除数D, 由S=E x C-D就可以计算出个人所得税。为了方便操作,在子程序INCOMERATE中,通过(BX) + (SI)的值作为INCOME的表内偏移地址,每次BX和 SI都进行加2操作,一旦确定出等级,就可以直接采用 BX或SI访问TAXRATE和DEDUCTION数据表,如图4. 11所 示。实际上,ExC运算相当于实现ExddlOO (其中dd 为相应的税率xlOO),因此,可以利用例4.23计算4 字节除以1字节的子程序COMPT4DIV1,完成除以100的 运算。汇编语言程序如下:STACK SEGMENT STACK zSTACK7DW 100H DUP (?)TOPLABEL WORDSTACK ENDSDATASEGMENTTAXRATE DW 5, 10, 15, 20, 25, 30, 35, 40, 45DEDUCTION DW 0,25,125,375,1375,3375,6375,10375,15375 INCOME LABEL WORDDD500, 2000, 5000, 20000, 40000, 60000, 80000, 100000, 300000XDAT DW 19,1600DD 1200, 2600, 3000, 4000, 5000, 6000, 7000, 8000DD 9000, 10000, 15000, 20000, 30000, 40000, 50000, 59900DD 60000,65000,200000YDATDW ?DD 50 DUP(?)DATAENDSCODESEGMENTASSUME CS: CODE, DS: DATA, ES: DATA, SS: STACKSTART:MOV AX,DATAMOV DS,AXMOV ES,AXMOV AX,STACKMOV SS,AXLEA SP,TOPLEA SI,XDATMOV CX, SIADD SI, 2MOV BX, SIADD SI, 2LEA DI,YDAT+6MOV YDAT,CXMOV YDAT+2, 0MOV YDAT+4, 0;取出一位员工的工资MOV AX, SIMOV DX, SI+2ADD SI, 4CALL INCOMERATEMOV DI,AXMOV DI+2,DXADD DI, 4ADD YDAT+2, AXADC YDAT+4, DXXCHG AX, DXCALL DISPAXXCHG AX,DXCALL DISPAXCALL DISPCRLOOP LI;计算个人所得税;保存个人所得税;统计单位个人所得税总额CALL DISPCRMOV AX, YDAT+4 ;显示单位个人所得税总额CALL DISPAXMOV AX,YDAT+2CALL DISPAXMLL DISPCRMOV AH,4CHINT 21HINCOMERATE PROC NEAR ;计算个人所得税子程序PUSH BXPUSH CXE=A-B;不需纳税出口PUSH SISUB AX, BX SBBDX, 0JS INCRATE4XOR BX, BX;判定纳税等级XOR SI,SIMOV CX,9INCRATE1:CMP DX,INCOME BXSI+2JB INCRATE2JA INCRATE3CMP AX,INCOMEBXSIJB INCRATE2I NCR ATE 3:ADD BX,2ADD SI, 2LOOP INCRATE1INCRATE2:;根据纳税等级计算E x ddPUSH AXMOV AX, DXMUL TAXRATEBXPOP CXPUSH AXMOV AX, CXMUL TAXRATEBXPOP CXADD DX, CXMOV CX, 100CALL COMPT4DIV1;计算ExddlOOSUB AX, DEDUCTION BX; 并算SSBB DX, 0JMP INCRATE5INCRATE4:MOV DX, 0MOV AX,0INCRATE5:POP SIPOP CXPOPBXRETINCOMERATE ENDPCOMPT4DIV1 PROC NEARCOMPT4DIV1 ENDP CODE ENDSEND START例4. 25设已经编写好8个子程序(SUB0SUB7),要求 编写程序实现从键盘输入0 7进行选择。解:如果采用比较指令,则会使程序变得复杂。为此, 这里介绍跳转表的方法,即利用伪指令DW构成各个子程序 入口地址的跳转表,然后根据键盘输入进行调用。汇编语 言程序如下:STACKSEGMENT STACK STACDW 100H DUP (?)TOPSTACKLABEL WORDENDSDATA SEGMENTTABLE DW SUBO,SUB1,SUB2, SUB3, SUB4, SUB5, SUB6, SUB7 STRING DB z Please input 0 7 to select subroutines z,OAH,ODH,z$zDATAENDSCODESEGMENTASSUME C& CODE, DS: DATA, ES: DATA, SS: STACKSTART:MOV AX, DATAMOV DS, AXMOV ES, AXMOV AX, STACKMOV SS, AXLEA SP,TOPST1:MOV AH, 9;显示提示字符串LEA DX, STRINGING 21HMOV AH, 1;输入一个字符INT 21HSUB AL,3OH JB STICMP AL9 8JAE STISHL AL,1;XOR AH,AHMOV BX,AXCALL TABLEBX(AL) x2;通过跳转表调用各个子程序JMP ST1;循环执行MOV AH, 4CH;返回DOS操作系统INT 21HCODI1ENDSEND START例4. 26在AVG缓冲区中保存有按报考号顺序排列的研究 生考生平均成绩,在MIN缓冲区保存有与AVG相对应的 考生单科最低成绩,报考学生总人数存储在字变量NUM 申,给定录取条件为:最低单科成绩不得低于60分;选定录取分数线,按平均成绩从高分到低分录取,但 录取人数不超过8 00人。编程求取录取分数线N1和实际录取人数N2。解:首先,根据考生的单科最低成绩,剔除不合格的考 生;然后将合格考生按平均成绩由高分到低分进行排序, 在排序时,应该保留考生的考号信息。当合格考生人数 超出计划录取人数时,录取分数线就是第800位考生的 平均成绩;当合格考生人数不足计划录取人数时,录取 分数线就是最后一位合格考生的平均成绩。汇编语言程 序如下:STACKTOPSTACKSEGMENT STACK stackDW 256H DUP (?)LABEL WORDENDSN=2000M=snnDATANUMAVGSEGMENTDW NDB N DUP (?)MINDB N DUP (?)N1DB ?N2 BUF1DW ?DB N DUP (?)BUF2DW N DUP (?)DATAENDSCODESEGMENT;考生人数;划录取人数;学生总人数;平均成绩;最低单科成绩;存放录取分数线;存放实际录取人数;暂存平均成绩;暂存学号ASSUME C& CODE, DS: DATA, ES: DATA, SS: STACKSTART:MOV AX,DATAMOV DS,AXMOV ES,AXMOV AX,STACKMOV SS,AXLEA SP,TOPMOV CX,NUMCALL PRODUCT;产生模拟数据XOR SI, SI;剔除单科不合格的考生XOR DI,DIXOR BX,BXMOV CX,NUMtPEtIMINAT&CMP MINSI,60JB ELIMINATE1MOV AL,AVGSIMOV BUF1DI,AL ;保存合格考生的平均成绩 INC DIMOV BUF2 BX, SI ;保存合格考生的考号 ADD BX,2ELIMINATEl:INC SILOOP ELIMINATELEA SI,BUF1LEA DI,BUF2分到低分排序;对合格考生按平均成绩由高MOV CX,DICALL SORTCMP CX,M ;合格考生数是否大于计划录取人数?JBE MATRI00MOV CX,MMATRI00:4.6综合程序设计示例示录取分数线MOV BX,CXMOV AL, BUF1 BXMOV N1,ALMOV N2,BXMOV AL,N1;录取分数线 ;实际录取人数4.6综合程序设计示例CALL DISPAL CALL DISPCR;显示实际录取人数MOV AX,N2CALL DISPAXCALL DISPCR;返回DOS系统;数据排序程序MOV AH,4CHINT 21HSORT PROC NEARPUSH AXPUSH CXPUSH SIPUSH DIDEC CX4.6综合程序设计示例ADD SI,CXADD DI,CXADD DI,CX;SI指向BUF1末地址;SI指向BUF2来地址4.6综合程序设计示例4.6综合程序设计示例LP1:;外循环开始4.6综合程序设计示例LP2:交换操作;内循环开始;考生考号也同步交换PUSH CXPUSH SIPUSH DIMOV AL, SICMP AL, SI-1JBE NOXCHGXCHG AL, SI-1 MOV SI,ALMOV AX, DI XCHG AX, DI-2MOV DI,AX4.6综合程序设计示例NOXCHG:DEC SIDEC DIDEC DILOOP LP2POP DIPOP SIPOP CXLOOP LP1POP DIPOP SIPOP CXPOP AXRET4.6综合程序设计示例;产生模拟数据SORT ENDPPRODUCT PROC NEARPUSH AXPUSH CXMOV AL,17PR1:MOV BH,59LEA SI,AVGADD AL,CMP AL,100JAE PR1CMP AL, 40JB PR1MOV SI, ALINC SILOOP PR1POP CXMOV AL,5MOV BH, 3LEA SI,AVGLEA DI,MINPR2-ADD AL, BHCMP AL, 15JAE PR2MOV BL, SISUB BL, AL4.6综合程序设计示例MOV DI,BLINC SIINC DILOOP PR2POP AXRETPRODUCTENDPCODEENDSEND START4.6综合程序设计示例例4.27在首地址为XDAT的字节型数组中,第一个单元存 放数的个数N(N100),第二、三单元分别存放门限T1和 T2 (T1T2256 )、从第4个单元开始存放N个无符号数(每个数占用一个字节)。编写汇编语言程序实现:先对 这N个数进行剔除奇异值处理,再进行滑窗式滤波处理, 要求将滤波结果按四舍五入取整后存储在YDAT开始的内存 单元中,并将数据个数存放在字节变量NUM中。设x(n)为 数据原值,M为剔除奇异值后剩余数据的个数,则剔除奇 异值方法为:fx(n)剔除该值7 x(n) T2其它滑窗式滤波方法为:1 23nM -2i 二-2其它例如,设N=10, Tl=l, T2=5,则原数据:3, 1, 4, 7, 5, 4, 3, 2, 6, 4剔除奇异值后:3, 1, 4, 5, 4, 3, 2, 4滤波且四舍五入取整:3, 1,3, 3,4, 4, 2, 4解:在实际的信号处理和控制系统中,经常采用DSP. CPU或单片机构成,这样对数据进行处理就远比在普通微 机上的复杂,因此,有必要进行说明。在实际环境的数据采集中,会受到干扰和噪声的影响, 也可能会产生不可预见的错误数据,导致数据明显偏移正 常范围,这些值称为奇异值。在对数据区进行处理之前, 应该将奇异值剔除,这样虽然会对处理精度有一定的影响, 但不至于使算法失效,实际上,这样的奇异值只有很少几 个,对系统精度几乎没有影响。平滑滤波是常用的一种信号处理方法,这里釆用5点 平滑,并对结果要进行四舍五入处理。由于程序采用整数 表示数据,因此,应该在除法之前完成四舍五入运算。 2i=-2y2()= z()= Z/ +5将z()分成两部分:5的整倍数和余数,这样四舍五入运 算实际上就是对余数进行适当的处理:其中,f ()表示四舍五入运算。直接利用整数运算的特 性,可以简化成:乃)=(乙(兀)+ 2)乙(乡(的四舍五入结果时,只需要将Z(Q这表示,计算先加2,再完成除以5的操作.一般情况下,计算 乂 的四舍五入结果时,其结果为 (A + int(m卩,其中int (.)表示取整运算。/m汇编语言程序如下:N EQU 100T1 EQU 10T2 EQU 50STACK SEGMENT;数据个数;低门限;高门限DW 256 DUP(?)TOP LABEL WORDSTACK ENDSDATA SEGMENT;输入数据区XDAT DBN,T1,T2X=17REPT NX=(X+79) mod 256DB XENDMYDATDB N DUP(?)NUMDB ?BUF1DB NDUP (?)DATAENDS;输出数据区;数据的实际个数CODE SEGMENTASSUME C& CODE, ES: DATA, D& DATA, SS: STACKSTART:MOV AX,DATAMOV DS, AXMOV ES,AXMOV AX, STACKMOV SS,AXLEA SP,TOPLEA SI,XDAT;剔除奇异值,并将有效数据暂存在BUF1XOR CX,CXMOV CL, SIMOV AL, SI+1MOV AH, SI+2ADD SI,3XOR BX, BX4.6综合程序设计示例L1:CMP SI,AL4.6综合程序设计示例JB L2CMP SI,AHJA L2MOV DL, SIMOV BUF1 BX,DLINC BXL2:INC SILOOP LI;保存有些数据个数;开始平滑滤波处理MOV NUM, BLMOV CX,BXSUB CX, 4LEA SI,BUF1LEA DI,YDATXOR AX,AXXOR BX, BXMOV AL, SI ;数据区首部两个字节处理MOV DI,ALMOV BL, SI+1MOV DI+1,BLADD AX, BXADD DI, 2ADD SI, 2MOV BL, SIADD AX,BX4.6综合程序设计示例MOV BL, SI+1ADD AX,BXMOV DL, 5L3:MOV BL, SI+2ADD AX,BXPUSH AXADD AX, 2;四舍五入运算DIV DLMOV DI,ALINC DIPOP AXMOV BL,SI-2SUB AX, BXINC SILOOP L3MOV AL, SI;数据区尾部两个字节处理MOV DI,ALMOV AL, SI+1MOV DI+1,ALMOV AH,4CHINT 21HCODE ENDSEND START47 小穡本章介绍了程序设计的方法与应用示例,它是以 第三章8086 CPU指令系统为基础的。着重介绍了分 支程序、循环程序和子程序的结构,并通过应用示例说明了汇编语言程序设计的技术。顺序程序是最简单的程序结构,其能够实现的 功能也弱;分支程序是通过有条件和无条件转移指 令实现的程序结构,可以根据不同的条件进行相应的处理;循环程序是一种特性的分支程序,其结构 更加紧凑,增加程序的可读性,结合采用LOOPZ/LOOPE和LOOPNZ/LOOPNE指令,可以实现较为 复杂的功能;47皿子程序是可以多次被调用的结构,它由一段功 能独立的程序构成,结构固定,通过设定入口 参数和出口参数,可以使子程序设计变得灵活, 而且采用子程序设计技术,主程序的模块化结 构简单、条理清晰。适当采用宏指令也可以简化汇编语言的程序 设计。4.7小箱凉章作业:35丿37
展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 压缩资料 > 基础医学


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!