版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、 DOS系统系统功能调用都是用软中断指令功能调用都是用软中断指令INT 21H来实现的。它具有来实现的。它具有90多个子功能多个子功能的中断服务的中断服务程序,它们通过程序,它们通过功能号功能号AH来区分。它不依赖于来区分。它不依赖于具体的硬件系统。具体的硬件系统。内存管理、存取时间、存取终端矢量、终止程内存管理、存取时间、存取终端矢量、终止程序等。序等。(预留的预留的N1-1个字节的存储单元个字节的存储单元) 0DHN2N1 N1: 缓冲区长度缓冲区长度(最大键入字符数最大键入字符数) N2: 实际键入的字符数实际键入的字符数(不包括回车符不包括回车符) 用户定义的输入字符串的缓冲区格式 如
2、何绘制程序框图如何绘制程序框图( (流程图流程图) )?NY?例5-4 假设有下列数学公式:Y=X3+8X2+8X+6试编写当X=10时,计算Y值的程序。(X)AX(AX)+8AX (AX)*(X)AX(AX)+6AX(AX)+8AX (AX)*(X)AXAX (Y) Y=(X+8)X+8)X+6START: MOV AX,STACK_SEGSTART: MOV AX,STACK_SEG MOV SS,AX MOV SS,AX MOV SP,OFFSET TOP MOV SP,OFFSET TOP PUSH DS PUSH DS SUB AX,AX SUB AX,AX PUSH AX PUSH
3、 AX MOV AX,DATA_SEG MOV AX,DATA_SEG MOV DS,AX MOV DS,AX MOV AX,X MOV AX,X ADD AX,8 ADD AX,8 MUL X MUL X ADD AX,8 ADD AX,8 MUL X MUL X ADD AX,6 ADD AX,6 MOV Y,AX MOV Y,AX RET RET MAIN ENDPMAIN ENDPCODE_SEG ENDS CODE_SEG ENDS END START END STARTDATA_SEG SEGMENT DATA_SEG SEGMENT X DW 10 X DW 10 Y DW 0
4、Y DW 0 DATA_SEG ENDSDATA_SEG ENDSSTACK_SEG SEGMENT STACK STACKSTACK_SEG SEGMENT STACK STACK DW 100 DUP (?) DW 100 DUP (?) TOP LABEL WORD TOP LABEL WORDSTACK_SEG ENDSSTACK_SEG ENDSCODE_SEG SEGMENTCODE_SEG SEGMENTMAIN PROC FARMAIN PROC FAR ASSUME CS:CODE_SEG,DS:DATA_SEG ASSUME CS:CODE_SEG,DS:DATA_SEG
5、ASSUME SS:STACK_SEG ASSUME SS:STACK_SEG标号:条件满足条件满足?处理处理NYIFTHEN结构结构程序结构:程序结构: 测试测试/比较指令比较指令 (TEST/CMP) 条件转移指令条件转移指令 (Jx 标号标号) 处理体处理体 标号标号: 其他指令其他指令 程序结构:程序结构: TEST/CMP指令指令 Jx 标号标号1 处理体处理体P1 JMP 标号标号2标号标号1: 处理体处理体P2标号标号2:其他指令其他指令 条件满足条件满足?处理处理P1处理处理P2标号1:标号2:条件1条件2IFTHENELSE结构结构例5-6 编写程序计算Y=X,X,Y为字变量
6、。开始X=0XY-XYNOYES结束DATA SEGMENTDATA SEGMENT X DW 10H X DW 10H Y DW ? Y DW ?DATA ENDSDATA ENDSCODE SEGMENTCODE SEGMENTMAIN PROC FARMAIN PROC FAR ASSUME CS:CODE,DS:DATA ASSUME CS:CODE,DS:DATASTART:PUSH DSSTART:PUSH DS XOR AX,AX XOR AX,AX PUSH AX PUSH AX MOV AX,DATA MOV AX,DATA MOV DS,AX MOV DS,AX MOV A
7、X,X MOV AX,X TEST AX,8000H TEST AX,8000H JZ POS JZ POS NEG AX NEG AXPOS: MOV Y,AXPOS: MOV Y,AX RET RETMAIN ENDPMAIN ENDPCODE ENDSCODE ENDS END START END STARTCMP AX,0JGE POSAND AX,AXJNS POS标号标号1:条件条件1成立成立?P1NYCASE结构结构程序结构:程序结构: TEST/CMP指令(测试条件1) Jx 标号1 ;不满足转标号1 处理体处理体P1 JMP 标号标号n+1标号1:TEST/CMP指令(测试条
8、件2) Jx 标号2 ;不满足转标号2 处理体处理体P2 JMP 标号标号n+1标号2:TEST/CMP指令(测试条件3) Jx 标号3 ;不满足转标号3 处理体处理体P3 JMP 标号标号n+1标号3:TEST/CMP指令(测试条件4) 标号n+1:(公共出口)条件条件2成立成立?条件条件n成立成立?Pn+1标号标号2:标号标号n:标号标号n+1:P2PnNNYY例5-7 编写程序,根据键盘输入的值,显示不同的内容。若输入数字“0”,则显示“You have input digit 0.”,若输入数字“1”,则显示“You have input digit 1.”若输入数字“9”,则显示“Y
9、ou have input digit 9.”,否则显示“Error!”。 DATASEGMENTDISDB0DH,0AH,Please input digit 09.$DIS0DB0DH,0AH,You have input digit 0.$DIS1DB0DH,0AH,You have input digit 1.$DIS9DB0DH,0AH,You have input digit 9.$DIS10DB0DH,0AH,Error!$DATAENDSCODESEGMENTASSUMECS:CODE,DS:DATASTART: MOVAX,DATA;初始化DSMOVDS,AXLEADX,DI
10、SMOVAH,09H ;DOS功能调用:显示字符串INT21HMOVAH,01H ;从键盘输入一个字符,其ASCII码送ALINT21HCMPAL,30H ;与0的ASCII码比较JBERR;小于0的ASCII码转EXITCMPAL,39H ;与9的ASCII码比较JAERR;大于9的ASCII码转EXITANDAL,0FH ;ASCII码二进制JMPGOODERR:MOVAL,10;如果输入的不是09,AL寄存器送10GOOD: LEABX,TAB ;取地址表的偏移地址BXMOVAH,0SHLAL,1;JMP SHORT P*为两字节指令ADDBX,AXJMPBX;转到地址表中对应的指令去执
11、行EXIT:MOVAH,4CH ;返回DOSINT21HTAB:JMPSHORT P0;地址表JMPSHORT P1JMPSHORT P9JMPSHORT P10P0:LEADX,DIS0;将输出字符串存放的首址偏移量DXMOVAH,9INT21HJMPEXIT;显示输出字符串P10:LEADX,DIS10;将存放”ERROR$”字符地址偏移量;DX来显示MOVAH,9INT21HJMPEXITCODEENDSEND START初始化初始化循环体循环体循环控制循环控制继续循环?继续循环?YN例例: :编写一程序,从数据段中一未排序的字数组ARRAY中,找出最大值和最小值分别存放到AX和BX 寄
12、存器中。开始开始N-1N-1CXCX取数组第一个取数组第一个数数 AX AX和和BXBX数组中数与数组中数与(AX)AX)和和(BX)(BX)比较比较大数大数 AX AX小数小数 BX BX比较完比较完?结束结束NYDATA SEGMENTN EQU 6ARRAY DW 98H,04H,76H,12H,09H,0F8HDATA ENDSCODE SEGMENTMAIN PROC FAR ASSUME CS:CODE,DS:DATASTART: PUSH DS XOR AX,AX PUSH AX MOV AX,DATA MOV DS,AX MOV CX,N-1 LEA SI,ARRAY MOV
13、AX,SI MOV BX,AXAGAIN: ADD SI,2 CMP BX,SI JLE FMAX MOV BX,SI JMP SHORT NEXTFMAX: CMP AX,SI JGE NEXT MOV AX,SINEXT: LOOP AGAIN RETMAIN ENDPCODE ENDS END START初始化初始化循环体循环体循环控制循环控制继续循环?继续循环?YN例:求平方根程序:内存SQU单元存放一个完全平方数,编一个求平方根程序。分析:从1开始连续I个奇数之和是I的平方数N,如:1+3+5+7+9+11+13=49,其中I=7(7个连续的奇数),N=49(连续奇数之和),所以N=
14、I2;开始初始化平方值=0?平方数减奇数计数器加1形成下一个奇数保存结果结束DATA SEGMENTSQU DW 13924 ROOT DW ? DATA ENDS CODE SEGMENT ASSUME CS:CODE,DS:DATA SQROOT: MOV AX,DATA MOV DS,AX XOR CX,CX ;计数器清0 MOV BX,1 ;置奇数 MOV DX,SQU ;把平方数送DXL1: AND DX,DX ;判断平方数是否为0 JZ L2 ;为0,退出 SUB DX,BX ;平方数减奇数 INC CX ;减奇数的次数加1 ADD BX,2 ;形成下一个奇数 JMP L1L2:
15、MOV ROOT,CX ;保存结果 MOV AH,4CH ;返回DOS INT 21HCODE ENDS END SQROOT见源程序见源程序DXUNHUAN.ASMDATASEGMENTADW8907,43,56,24,65,23,54,2,34,24NEQU ($-A)/2DATAENDSCODESEGMENTASSUMECS:CODE,DS:DATASTART:MOV AX,DATA;初始化DSMOV DS,AXMOV CX,N-1;计数器MOV BX,0LOOP1:MOV DX,CX;保存外循环计数MOV SI,0;设置内循环偏移地址LOOP2:MOV AX,ABX;取数,暂做小数CM
16、P AX,ABX+SI+2;和其它数做比较JNAL1;小于等于,转L1MOV DI,ABX;否,则交换数据MOV AX,ABX+SI+2MOV ABX,AXMOV ABX+SI+2,DIL1:ADDSI,2;修改偏移指针,为下一次比较做准备LOOP LOOP2;内循环结束判断ADDBX,2;修改内循环的首址MOV CX,DXLOOP LOOP1;外循环结束判断MOV AH,4CH;返回DOSINT21HCODEENDSENDSTART掌握以下几点:调用子程序用CALLCALL指令,返回调用程序用RETRET指令。子程序允许嵌套调用嵌套调用。进入子程序后首先要保护主程序的运行状态(标志位)和使用
17、的寄存器内容(称为保护现场保护现场),退出子程序前要恢复现场恢复现场。调用前要预先确定子程序中要使用哪些寄存器使用哪些寄存器,并定义入口参数和出口参数定义入口参数和出口参数。参数传递可利用寄存器、存储单元或堆栈(要用BP寻址)。例例1: 二进制数二进制数(0-F)转换成转换成ASCII(0-F)的子程序。的子程序。BIN2ASC PROC ;要转换的数在AL的低四位 ;转换结果仍在AL中 CMP AL, 9 JA A2F ADD AL, 30H; 9, +37H DONE:RETBIN2ASC ENDP调用方法:(在主程序中) MOV AL, 0CH CALL BIN2ASC (AL中有0CH
18、的ASCII码43H, C)00020064H0062HSP25AF0060H堆栈00020064H0062H25AF0060H005EH0113005CHSP返回地址(IP)原(BP)00020064H0062H25AF0060H005EH0113xxxx005CHBPSHR DX,CL ;逻辑右移4位 MOV AX,DX ;第1次(AX)=025AH POP CX LOOP AGAIN ;(CX)-1=0?不等,转+40064H0062H0060H005EH005CH000225AF0113xxxx(SP)程序程序2:把:把255的非压缩的非压缩BCD数转换成数转换成2进制数进制数 例:从
19、键盘输入两个整数例:从键盘输入两个整数, ,并求其和。并求其和。 因键入为整数因键入为整数, ,故要进行如下转换:故要进行如下转换: ASCIIBCDASCIIBCD二进制数二进制数 ASCIIBCDASCIIBCD码很简单码很简单, ,高高4 4位清零即可得到非压位清零即可得到非压缩的缩的BCDBCD码。码。 BCDBCD二进制数在本例中采用用以下方法:二进制数在本例中采用用以下方法: ( (0+(0+千位数千位数) )* *1010+ +百位数百位数) )* *10)+10)+十位数十位数) )* *10+10+个位数个位数 ASCIIASCII码码二进制数二进制数( (用于输入用于输入)
20、 ) 第一次中间结果第二次中间结果第三次中间结果最终结果开始开始两个数分别转换成二进制数键入两个数键入两个数相加相加结束结束返回返回DOS如有溢出则提示如有溢出则提示开始取第一个ASCII码是负号吗?数字符个数1,指针1指针定位字符个数1= 0?取数字,与中间结果相加,再乘以10指向下一个数字字符加个位数是负数则求补存结果结束NYYN转换子程序转换子程序程序如下:DATASEGMENTSTR1DB 7,?,7 DUP(?);第1个数的输入缓冲区STR2DB 7,?,7 DUP(?);第2个数的输入缓冲区NUMDW ?,? ;存转换后的二进制数SUMDW 0 ;存和OVERDB Over flo
21、w!,0DH,0AH,$DATAENDS;CODESEGMENTASSUME CS:CODE,DS:DATAMAINPROCFARSTART: MOV AX,DATAMOV DS,AXMOV AH,0AHLEADX,STR1INT21H ;输入第一个数字串(设为26)MOV AH,0AHLEADX,STR2INT21H ;输入第二个数字串(设为33)LEABX,STR1 ;串1的首地址送BXLEADI,NUM ;存二进制首地址送DIMOV BP,10CALL CHANGE ;将串1 ASCII码二进制LEABX,STR2 ;串2的首地址送BX LEADI,NUM+2;指向MOV BP,10CA
22、LL CHANGE;将串2 ASCII码二进制 MOV AX,NUM ;(AX)=NUM=001AHADD AX,NUM+2 ;两数相加,(AX)=003BHMOV SUM,AX;存和JNO NEXT;无溢出,转NEXTLEA DX,OVERMOV AH,9INT21H;显示Overflow!NEXT:MOV AH,4CHINT21H;返回DOSMAINENDPCHANGEPROCMOVCL,BX+1;实际字符数送CLMOVAL,BX+2;第一个字符送ALMOVCH,AL;暂存在CHCMPAL,-;第一个字符是负号吗?JNZNEXT1;不是,转NEXT1DECCL;字符数减1INCBXNEXT1: ADDBX,2;指向第一个数字字符MOVAX,0;清零AX,存二进制数LP1: DECCLJZNEXT2;若(CL)=0,转NEXT2MOVDL,BX ;取字符ANDDL,0FH;转换成BCD码 ADD AL,DL ;加到中间结果上 ADC AH,0 MUL BP ;*10 INC BX ;指向下一个字符 JMP SHORT LP1NEXT2: MOV DL,BX ;取个位数 AND DL,0FH ;个位ASCII未组合BCDMOV DH,0 ADD AX,DX ;加个位数,(AX)=001AH CMP CH,- ;是-? JNZ NEXT3 ;该数非负,转NEXT3
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 111.《优化营商环境条例执行考试卷(商业卫星领域)》
- 2025年广新集团所属广青科技高薪岗位热招备考题库完整答案详解
- 2025年阳宗海风景名胜区七甸卫生院乡村医生招聘备考题库及参考答案详解
- 2025年泉州轻工职业学院招聘备考题库完整参考答案详解
- 清华大学关于2026年度面向应届毕业生公开招聘工作人员备考题库有答案详解
- 2025年琼海市总工会公开招聘工会社会工作者备考题库及答案详解1套
- 2025年无锡市惠山区教育局招聘高层次人才12人备考题库(长期)及答案详解参考
- 2025年中信建投证券海南分公司校园招聘备考题库及1套参考答案详解
- 泉州市丰泽区实验小学(东涂校区)招聘2026年春季校聘教师备考题库完整参考答案详解
- 2025年自贡市自流井区人力资源和社会保障局自流井区事业单位公开选调工作人员的备考题库及1套参考答案详解
- 2025年中国高油玉米数据监测报告
- 销售人员管理制度手册
- 水印江南美食街招商方案
- 二零二五年度绿色生态住宅小区建设工程合同协议
- 2025-2030全球膜处理系统行业调研及趋势分析报告
- 多导睡眠监测课件
- 新苏教版一年级数学下册第一单元第1课时《9加几》教案
- 《水利水电工程清污机制造安装及验收规范》
- 统编版(2024新版)七年级上册历史期末复习考点提纲
- 乳腺癌化疗药物不良反应及护理
- 锅炉设备巡检与保养方案
评论
0/150
提交评论