微机原理及接口技术习题解答.doc_第1页
微机原理及接口技术习题解答.doc_第2页
微机原理及接口技术习题解答.doc_第3页
微机原理及接口技术习题解答.doc_第4页
微机原理及接口技术习题解答.doc_第5页
已阅读5页,还剩2页未读 继续免费阅读

下载本文档

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

文档简介

习题22.1 8086CPU具有 20 条地址线,可直接寻址 1MB 容量的内存空间,在访问I/O端口时,使用地址线 16条 ,最多可寻址 64K 个I/O端口。 2.3 8086CPU中的指令队列的作用是 预取指令 ,其长度是 6 字节。2.5 8086的标志寄存器分为 6 个 状态 标志位和 3 个 控制 标志位,它们各自的含义和作用是什么?【解答】标志寄存器各标志位的含义和作用如下表:表2-1 标志寄存器FLAG中标志位的含义和作用标志位含义作用CF进位标志CF=1,指令执行结果在最高位上产生一个进位或借位;CF=0,则无进位或借位产生PF奇偶标志PF=1,结果低8位含偶数个1;PF=0,表示结果低8位含奇数个1AF辅助进位标志AF=1,运算结果的低4位产生了一个进位或借位;AF=0,则无此进位或借位ZF零标志ZF=1,运算结果为零;ZF=0,则运算结果不为零SF符号标志SF=1,运算结果为负数;SF=0,则结果为正数OF溢出标志OF=1,带符号数在进行运算时产生了溢出;OF=0,则无溢出TF陷阱标志TF=1,8086CPU处于单步工作方式;TF=0,8086CPU正常执行程序IF中断允许标志IF=1,允许CPU接受外部从INTR引脚上发来的可屏蔽中断请求信号;IF=0,则禁止接受可屏蔽中断请求DF方向标志DF=1,字符串操作指令按递减的顺序对字符串进行处理;DF=0,字符串操作指令按递增的顺序进行处理2.7 8086的存储器采用 奇偶存储体 结构,数据在内存中的存放规定是 低字节存放在低地址中,高字节存放在高地址中,以低地址为字的地址,规则字是指 低字节地址为偶地址的字,非规则字是指 低字节的地址为奇地址的字。习题33.4 分析下列指令的正误,对于错误的指令要说明原因并加以改正。(1) MOV AH,BX (2) MOV BX,SI(3) MOV AX,SIDI (4) MOV MYDATBXSI,ES:AX(5) MOV BYTE PTRBX,1000 (6) MOV BX,OFFSET MAYDATSI (7) MOV CS,AX (8) MOV DS,BP【解答】(1) MOV AH,BX 错误,寄存器类型不匹配,可改为MOV AX,BX(2) MOV BX,SI错误,两个操作数不能都为存储单元,可改为MOV BX,SI或MOV BX,SI(3) MOV AX,SIDI错误,寻址方式中只能出现一个变址寄存器,可改为MOV AX,BXDI。(4) MOV MYDATBXSI,ES:AX错误,AX签不能有段跨越前缀,去掉ES:,改为MOV MYDATBXSI,AX(5) MOV BYTE PTRBX,1000错误,1000超出字节空间存储范围(6) MOV BX,OFFSET MAYDATSI ;正确(7) MOV CS,AX错误,MOV指令CS不能做目的操作数,可改为MOV DS,AX(8) MOV DS,BP ;正确注:本题错误改正部分有的答案并不唯一,可参考原题题意改成合法形式。3.5 设VAR1、VAR2为字变量,LAB为标号,分析下列指令的错误之处并加以改正。(1) ADD VAR1,VAR2 (2) MOV AL,VAR2(3) SUB AL,VAR1 (4) JMP LABSI(5) JNZ VAR1 (6) JMP NEAR LAB【解答】(1) ADD VAR1,VAR2错误,两个操作数不能都为存储单元,可改为 MOV BX,VAR2ADD VAR1,BX(2) MOV AL,VAR2错误,数据类型不匹配,可改为MOV AX,VAR2(3) SUB AL,VAR1错误,数据类型不匹配,可改为SUB AX,VAR1(4) JMP LABSI错误,寄存器相对寻址形式中不能用标号做位移量,可改为JMP VAR1SI(5) JNZ VAR1错误,条件跳转指令只能进行段内短跳转,所以后面只能跟短标号。可改为JNZ LAB(6) JMP NEAR LAB错误,缺少运算符PTR,可改为JMP NEAR PTR LAB注:本题错误改正部分有的答案并不唯一,可参考原题题意改成合法形式。3.6 写出能够完成下列操作的8086CPU指令。(1) 把4629H传送给AX寄存器;(2) 从AX寄存器中减去3218H;(3) 把BUF的偏移地址送入BX中。【解答】(1) MOV AX,4629H(2) SUB AX,3218H(3) LEA BX,BUF3.7 根据以下要求写出相应的汇编语言指令。 (1) 把BX和DX寄存器的内容相加,结果存入DX寄存器中; (2) 用BX和SI的基址变址寻址方式,把存储器中的一个字节与AL内容相加,并保存在AL寄存器中; (3) 用寄存器BX和位移量21B5H的变址寻址方式把存储器中的一个字和(CX)相加,并把结果送回存储器单元中; (4) 用位移量2158H的直接寻址方式把存储器中的一个字与数3160H相加,并把结果送回该存储器中; (5) 把数25H与(AL)相加,结果送回寄存器AL中。【解答】(1) ADD DX,BX(2) ADD AL,BXSI(3) ADD 21B5HBX,CX(4) ADD WORD PTR 2158H,3160H(5) ADD AL,25H3.8 写出将首地址为BLOCK的字数组的第6个字送到CX寄存器的指令序列,要求分别使用以下几种寻址方式:(1) 以BX的寄存器间接寻址(2) 以BX的寄存器相对寻址(3) 以BX、SI的基址变址寻址【解答】(1) LEA BX,BLOCK+10MOV CX,BX(2) LEA BX,BLOCKMOV CX,10BX(3) LEA BX,BLOCKMOV SI,10MOV CX,BXSI3.9 执行下列指令后,AX寄存器中的内容是什么?TABLE DB 10,20,30,40,50ENTRY DW 3 MOV BX,OFFSET TABLEADD BX,ENTRYMOV AX,BXAX= 【解答】AX= 3228H 3.10 下面是将内存一字节数据高4位和低4位互换并放回原位置的程序,找出错误并改正。 DATA SEGMENTDD1 DB 23HDATA ENDSCODE SEGMENTASSUME CS:CODE,DS:DATASTART: MOV AX,DATAMOV DS,AXLEA SI,OFFSET DD1MOV AL,SIMOV CL,4RCR AL,CLMOV SI,ALMOV AH,4CHINT 21HCODE ENDS END START【解答】程序第8行错误:LEA SI,OFFSET DD1,应去掉OFFSET;程序第10行错误:RCR AL,CL,应使用ROR或ROL,改为ROR AL,CL3.11 已知用寄存器BX作地址指针,自BUF所指的内存单元开始连续存放着3个无符号数字数据,编程序求它们的和,并将结果存放在这3个数之后。【解答】参考程序如下:LEA BX,BUFMOV AX,BXADD AX,BX+2ADD AX,BX+4MOV BX+6,AX3.12 分析汇编语言源程序应该由哪些逻辑段组成?各段的作用是什么?语句标号和变量应具备哪3种属性?【解答】汇编语言源程序应该由若干个逻辑段组成,可以有若干个数据段、代码段、堆栈段和附加数据段,至少要有一个代码段。各段的作用如下:(1)代码段用来存放程序和常数。(2)数据段用于数据的保存。(3)堆栈段用于保护数据,尤其在子程序调用、中断过程中进行现场信息保护。(4)附加数据段用于数据的保存。语句标号和变量应具备的3种属性:段属性、偏移属性和类型属性。3.13 执行完下列程序后,回答指定的问题。MOV AX,0MOV BX,2MOV CX,50LP:ADD AX,BXADD BX,2LOOP LP问:(1) 该程序的功能是 。(2) 程序执行完成后,(AX)= 。【解答】(1)完成0到100间所有偶数求和的功能。(2)25503.14 编写程序,计算下面函数的值。【解答】DATA SEGMENT X DW 34 S DW ?DATA ENDSCODE SEGMENT ASSUME CS:CODE,DS:DATASTART:MOV AX,DATA MOV DS,AX MOV AX,X ;将X送到AX中 CMP AX,0 ;(AX)0吗? JL DOUB ;是,转向doub CMP AX,10 ;否,(ax)10吗? JLE TRIB ;是,转向trib SAL AX,1 ;否,乘以4 SAL AX,1 JMP EXITDOUB: SAL AX,1 ;乘以2 JMP EXITTRIB: SAL AX,1 ;乘以3 ADD AX,XEXIT: MOV S,AX ;保存结果 MOV AH,4CH ;结束 INT 21HCODE ENDS END START注意,在比较的过程中使用的是针对带符号数的跳转指令,应该看作带符号数。程序中还用了移位指令代替了乘法指令。3.15 从键盘输入一系列字符,以回车符结束,编程统计其中非数字字符的个数。【解答】DATA SEGMENT BLOCK DB 100 DUP (?) COUNT DB ?DATA ENDSCODE SEGMENT ASSUME DS:DATA,CS:CODESTART:MOV AX,DATA MOV DS,AX MOV DL,0 LEA SI,BLOCKLP: MOV AH,1INT 21HCMP AL,0DHJZ EXIT MOV SI,AL CMP AL,30HJAE NEXTCMP AL,39HJBE NEXT INC DLNEXT: INC SI JMP LPEXIT: MOV COUNT,DLMOV AH,4CH INT 21HCODE ENDS END START3.16 已知在内存中从BLOCK单元起存放有20个带符号字节数据,统计其中负数的个数并放入COUNT单元。【解答】DATA SEGMENT BLOCK DB -7,1,12,-90,-70,34,-1,56,45,-12 DB -3,-4,23,0,12,11,-9,-8,67,-56 CN EQU $-BLOCK COUNT DB ?DATA ENDSCODE SEGMENT ASSUME DS:DATA,CS:CODESTART:MOV AX,DATA MOV DS,AX MOV DL,0 LEA SI,BLOCK MOV CX,CNLP: MOV AL,SI TEST AL,80H JZ NEXT INC DLNEXT: INC SI LOOP LP MOV COUNT,DL MOV AH,4CH INT 21HCODE ENDS END START3.17 从键盘输入一个大写英文字母,将其转换为小写字母并显示出来,要求输入其它字符时,能够有出错提示信息。【解答】DATA SEGMENT MESS DB INPUP ERROR!,0AH,0DH,$DATA ENDSCODE SEGMENT ASSUME DS:DATA,CS:CODESTART:MOV AX,DATA MOV DS,AX MOV AH,01H INT 21H CMP AL,A JB ERR CMP AL,Z JA ERR ADD AL,20H MOV DL,AL MOV AH,02H INT 21H JMP EXITERR: MOV DX,OFFSET MESS MOV AH,09H INT 21HEXIT: MOV AH,02H INT 21HCODE ENDS END START3.18 比较宏指令与子程序,它们有何异同?它们的本质区别是什么?【解答】宏与子程序两者的相同之处在于都是用来处理在编程过程中多次使用的功能程序的方法,两者均能简化源程序。两者的区别在于:(1)宏调用通过宏指令名进行,汇编时,随时调用随时展开,并不简化目标程序;子程序调用是在程序执行期间执行CALL指令,代码只在目标程序中出现一次,所以也简化了目标程序。(2)宏调用时的参数由汇编程序通过实参转换成形参的方式传递,具有很大的灵活性。宏定义中允许设置若干形式参数代替数值、指令、寄存器、各种字符串等。宏调用时可用程序所需要的实际参数来替换,使编程人员感觉非常灵活;而子程序的参数传递要麻烦得多。(3)宏调用在汇编时完成,不需要额外的时间开销;子程序调用和子程序返

温馨提示

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

评论

0/150

提交评论