




已阅读5页,还剩15页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
微机原理、汇编与接口技术第六章习题答案 6.16.2 6.3 6.4 stack segment stack stackdw 32 dup(0)stack endscodesegmentstartproc farassume ss: stack, cs: codepush dssub ax, axpush axCALL I6116;调用写入6116子程序MOV AH, 2;回车换行MOV DL, 0DHINT 21HMOV DL, 0AHINT 21HCALL O6116;调用读出6116子程序retstartendp;写入6116:将键入字符的ASCII码写入6116I6116 PROCMOV BL, 0;定义页地址码(16个地址为一页)MOV CX, 128;定义页数LOP1: PUSH CXMOV DX, 380H;将页地址从74LS273输出MOV AL, BLOUT DX, ALMOV CX, 16;定义页内单元数MOV DX, 390H;将键入数写入16个单元LOP2: MOV AH, 1INT 21HOUT DX, ALINC DXLOOP LOP2INC BL;换页POP CXLOOP LOP1;页数未满换页重新写入16个单元RETI6116 ENDP;读出6116:将写入6116的数据读出送显示O6116 PROCMOV BL, 0MOV CX, 128LOP3 PUSH CXMOV DX, 390HMOV AL, BLOUT DX, ALMOV CX, 16MOV DX 380H ;将16个单元的数据送显示LOP4: IN AL, DXPUSH DXMOV DL, AL;将6116中读出的ASCII码送DLMOV AH, 2;2号功能调用显示DL中的字符INT 21HPOP DXINC DXLOOP LOP4INC BLPOP CXLOOP LOP3 RETO6116 ENDPcodeends end start6.5 stack segment stack stackdw 32 dup(0)stack endscodesegmentstartproc farassume ss: stack, cs: codepush dssub ax, axpush axMOV AH, 2;用2号功能调用输出字符,调用号送AHMOV CX, 100;字符个数送计数器MOV DX, 380HWAIT0: IN AL, DX;从244读入TEST AL, 80H;测试状态位是否为0JNZ WAIT0;不为0,等待继续测试状态WAIT1: IN AL, DX;状态为0,继续读入TEST AL, 80H;测试状态是否为1JZ WAIT1;不为1,等待继续测试状态IN AL, DX;状态为1,读入数据即ASCII码AND AL, 7FH;去掉状态位MOV DL, AL;ASCII码送DL,输出字符INT 21HLOOP WAIT0-3;跳到给DX赋值380H的MOV指令,该指令为3字节retstartendpcodeendsend start6.6 stack segment stack stackdw 32 dup(0)stack endsdatasegmentOBUF DB 4 DUP(0)dataendscodesegmentbegin proc farassume ss: stack, cs: code, ds: datapush dssub ax,axpush axmov ax,datamov ds,axMOV BX,0FFSET OBUF+3 ;建立指针MOV BYTE PTR BX,$ ;存字符串结束符$MOV DX,380H ;读入二进制数IN AL,DXMOV CH,10AG: MOV AH,0 ;无符号数扩展为16位DIV CHADD AH,30H ;转换为ASCII码DEC BXMOV BX,AH ;存入输出数据区中OR AL,ALJNZ AGMOV DX,BXMOV AH,9INT 21Hretbegin endpcodeendsend begin 6.7 用除2取余法将BCD数转换为二进制数的程序如下:stack segment stack stackdw 32 dup(0)stack endsdata segmentIBUF DB 4, 0, 4 dup(0)data endscode segmentstart proc farassume ss: stack, cs: code, ds: datapush ds sub ax,axpush axmov ax,datamov ds,axMOV DX,OFFSET IBUF ;键入十进制数MOV AH,10INT 21HMOV DX,0 ;将键入数以压缩BCD数形式放AX中MOV CH,IBUF+1 ;将键入数的个数送计数器CH中MOV CL,4MOV BX,2AGAIN1: AND IBUFBX,0FH ;将数据区中的ASCII码转换为BCD数SHL AX,CL ;将BCD数左移1位OR DL,IBUFBX ;将数据区中的1位BCD放入DX的最低4位INC BXDEC CHJNZ AGAIN1MOV CX,8 ;用除2取余法将DX中的压缩BCD数转换为二进制数AGAIN2: SHR DX,1RCR AL,1MOV AH,DLAND AH,88HSHR AH,1SHR AH,1SUB DL,AHSHR AH,1SUB DL,AHLOOP AGAIN2MOV DX,380H ;二进制数从74LS273输出OUT DX,ALretstart endpcode endsend start用(百位10十位)10+个位的方法将BCD数转换为二进制数的程序段如下:MOV CL,IBUF+1 ;将键入数的个数送计数器CX中MOV CH,0MOV SI,2MOV AL, 0 ;开始将十进制数转换为二进制数AGAIN: MOV AH, 10 ;(010+a2)10+)10+a0MUL AHAND BYTE PTR SI, 0FH ;将十进制数的ASCII码转换为BCD数ADD AL,SIINC SILOOP AGAIN6.8 stack segment stack stackdw 32 dup(0)stack endsdata segmentSEGPT DB 3FH,6,5BH,4FH,66H,7,7FH,6FH,6FH,76H,77H,7CH,39H,5EH,79H,71Hdata endscode segmentstart proc farassume ss: stack, cs: code, ds: datapush dssub ax,axpush axmov ax,datamov ds,axMOV DX,380HIN AL,DXSUB AL,30HCMP AL,0AHJB NS7SUB AL,7MOV BL,ALMOV BH,0MOV AL,SEGPTBXOUT DX,ALretstartendpcodeendsend start 6.9 stack segment stack stackdw 32 dup(0)stack endscodesegmentstartproc farassume ss: stack, cs: codepush dssub ax, axpush axMOV DX, 380HLOP1: IN AL, DX ;读入设备1和设置2的状态AND AL, 6 ;测试2台设备的状态,同时使AL的D0位为0JZ LOP2 ;都正常,即AL的D1位和D2位都为0,AL为0MOV AL, 1 ;有一台异常AL不为0,AL置1,即AL的D0位为1LOP2: OUT DX, ALMOV AH, 11 ;11号功能调用,键入任一键退出程序INT 21HCMP AL, 0 ;无键入AL=0,有键入AL=FFHJE LOP1 ;无键入,去LOP1继续监视2台设备retstartendpcodeendsend start6.10 stack segment stack stackdw 32 dup(0)stack endscodesegmentbegin proc farassume ss: stack, cs: codepush dssub ax, axpush axMOV DX, 380HIN AL, DX ;读入原码TEST AL, 80H ;判原码数的符号JZ NONEG ;正数的原码和补码相同,不用求补AND AL, 7FH ;负数,求其绝对值NEG AL ;对绝对值求补得该负数的补码NONEG: OUT DX, ALretbegin endpcodeendsend begin6.11 在显示器上显示:行*列的程序如下:stack segment stack stackdw 32 dup(0)stack endscodesegmentstartproc farassume ss: stack, cs: codepush dssub ax, axpush axMOV DX, 380H;检测全键盘MOV AL, 0;键盘的8行全为低电平OUT DX, ALLOP1: IN AL, DX;读入列值CMP AL, 0FFH;列值是FFH吗?JE LOP1;是,全键盘无键闭合,继续检测MOV AH, 7FH ;键盘的行检测的输出值,被检测行为0,其余行为1LOP2: MOV AL, AH;检测键盘的一行OUT DX, AL;输出行检测值IN AL, DX;读入列值,列值不为FFH有键闭合CMP AL, 0FFH;被检测行有键闭合吗?JNE LOP3;有键闭合,结束逐行扫描去LOP3ROR AH, 1;该行无键闭合,改变行检测的输出值检测另一行JMP LOP2LOP3: MOV DL, 0;求行值07,即AH中的那个0的位置AS1: SHR AH ,1;0在最低位DL=0,0在最高位DL=7JNC AS2INC DLJMP AS1AS2: ADD DL, 30H;将行值转换为ASCII码MOV AH, 2;输出行值INT 21HMOV DL, *;输出乘号:*INT 21HMOV DL, 0;求列值07,即AL中的那个0的位置AS3: SHR AL, 1JNC AS4INC DLJMP AS3AS4: ADD DL, 30H;将列值转换为ASCII码INT 21H;输出列值retstartendpcodeendsend start6.12 stack segment stack stackdw 32 dup(0)stack endsdatasegmentSEGPTDB 77H,7CH,39H,5EH,79H,71H,6FH,76Hdataendscodesegmentstartproc farassume ss: stack, cs: code, ds: datapush dssub ax, axpush axMOV DX, 380HLOP: IN AL, DXMOV BX,0LOP1: SHR AL,1JNC LOP2INC BLJMP LOP1LOP2: MOV AL,SEGPTBXOUT DX, ALMOV AH,11INT 21HCMP AL,0JE LOPretstartendpcodeendsend start 6.13 stack segment stack stackdw 32 dup(0)stack endscodesegmentstartproc farassume ss: stack, cs: codepush dssub ax, axpush axMOV DX 260HIN AL, DXMOV AH, ALINC DXIN AL DXCMP AL, AHJNC NXCHGXCHG AL, AHNXCHG: SUB AL, AHDASINC DXINC DXOUT DX, ALretstartendpcodeendsend start6.14 stack segment stack stackdw 32 dup(0)stack endscodesegmentstartproc farassume ss: stack, cs: codepush dssub ax, axpush axMOV BL, 240 MOV DX, 260HLOP: ADD BL, 16MOV AL, BL OUT DX, ALLOOP $;延时MOV AH, 11INT 21HCMP AL, 0JE LOPretstartendpcodeendsend start6.15 输出周期性的方波、锯齿波、三角波、正弦波的程序如下:stack segment stack stackdw 32 dup (0)stack endsdatasegmentOBF DB 80H, , 0FFH, , 80H, , 00H, ;正弦波的数据(一周期)N EQU $ OBFdataendscodesegmentstartproc farassume ss: stack, cs: code, ds: datapush dssub ax, axpush axmov ax, datamov ds, axMOV DX, 380HAGAIN: MOV AH, 1;键入一字符,应为大写!INT 21HCMP AL, FJE FBCMP AL, JJE JCBCMP AL, SJE SJBCMP AL, ZJE ZXB;按下F、J、B和Zret;4个键以外的键退出该程序FB: MOV AL, 0;方波输出OUT DX, ALCALL DELAY1NOT ALOUT DX, ALCALL DELAY1 MOV AH, 11INT 21HCMP AL, 0JE FBJMP AGAINJCB:INC AL;锯齿波输出OUT DX, ALCALL DELAY2MOV BL, AL;保护ALMOV AH, 11CMP AL, 0MOV AL, BL;恢复ALJE JCBJMP AGAINSJB:INC AL;三角波输出OUT DX, ALCALL DELAY3CMP AL, 1JNE SJBSJB1: DEC ALOUT DX, ALCALL DELAY3CMP AL, 0JNE SJB1MOV AH, 11INT 21HCMP AL, 0JE SJBJMP AGAINZXB: MOV BX, OFFSET OFB;正弦波输出MOV CX, NZXB1: MOV AL, BXOUT DX, ALCALL DELAY4INC BXLOOP ZXB1MOV AH, 11INT 21HCMP AL, 0JE ZXBJMP AGAINstartendpDELAY1: PROCPUSH CXMOV CX, 100DL11: MOV SI, 0DL12: DEC SIJNZ DL12LOOP DL11POP CXRETDELAY1 ENDPDELAY2;延时程序结构一样DELAY3;仅CX取值不同;故略DELAY4codeends end start6.1 stack segment stack stackdw 32 dup(0)stack endscodesegmentstartproc farassume ss: stack, cs: codepush dssub ax,axpush axmov ax,datamov ds,axMOV CL,4LOP1: MOV AX,0LOP2: PUSH AXMOV DX, 381HROR AX,CL ;高8位数据移入ALOUT DX, ALMOV DX, 380HMOV AL,AH ;低4位数据移入AL的低4位SHR AL,CLOUT DX, ALOUT DX, AL;再写一遍MOV AH,11 ;检查键盘有无键入INT 21HCMP AL,0JNE BAK ;键盘有键入,退出POP AXINC AX CMP AX,1000HJNE LOP2JMP LOP1BAK: POP AXretstart endpcode ends end start6.17stack segment stack stack dw 32 dup(0)stack endsdata segmentBUF DB 16 DUP(0)data endscode segmentstart proc
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 结合现代情感教育理论提升学生的情感认知水平
- 利用课外拓展提高学生思维广度
- 构建绿色建筑标准提升园区基础设施绿色化水平
- 多元化教学资源在核心素养培养中的应用
- 加强人工智能教育的国际交流与合作
- 制造业绿色转型中的低碳排放技术应用
- 强化跨学科合作推动生物医药领域技术创新
- 学前教育课程体系创新与实践路径
- 高校体育资源共享对区域体育发展促进的影响
- 2025年大学证券考试题目及答案
- 义务教育信息科技课程标准(2022年版)解读
- 空调维保项目进度保障计划
- 既有建筑混凝土结构改造设计规范DBJ-T 15-182-2020
- 放射科室风险评估报告
- 各类组织架构图课件
- 创伤性窒息护理课件
- 人口老龄化对寿险产品需求结构的影响
- 最常用2000个英语单词-电子表格版
- 《解决方案营销》节选版
- 秋季慢性病知识讲座
- 2024年全国高考体育单招考试语文试卷试题(含答案详解)
评论
0/150
提交评论