• 43.50 KB
  • 2022-04-22 11:40:38 发布

微机原理及应用答案guet.doc

  • 15页
  • 当前文档由用户上传发布,收益归属用户
  1. 1、本文档共5页,可阅读全部内容。
  2. 2、本文档内容版权归属内容提供方,所产生的收益全部归内容提供方所有。如果您对本文有版权争议,可选择认领,认领后既往收益都归您。
  3. 3、本文档由用户上传,本站不保证质量和数量令人满意,可能有诸多瑕疵,付费之前,请仔细先通过免费阅读内容等途径辨别内容交易风险。如存在严重挂羊头卖狗肉之情形,可联系本站下载客服投诉处理。
  4. 文档侵权举报电话:19940600175。
'微机原理及应用答案《微机原理》习题参考答案主讲:张红梅,黄建华辅导:马金忠有错误或疑惑的地方请同学们指出,谢谢!第一章绪论1.2①[+65]10=01000001 [+65]补=[+65]原=01000001②[+115]10=01110011[+115]补=[+115]原=01110011③[-65]10=11000001 [-65]补=10111111[-115]10=11110011 [-115]补=10001101方法:正数的原码、反码、补码相同负数的补码在原码的基础上除过符号外,先取反,再加1。1.   3①[+120]10=0000000001111000 [+120]补=[+120]原=000000001111000②[-120]10=1000000001111000[-120]补=1111111110001000③[+230]10=0000000011100110[+230]补=[+230]原=0000000011100110④[-230]10=1000000011100110[-230]补=1111111100011010方法:与上题相同,只是扩展了位数,用16位表示1.   4①56②89 ③-115 ④-7总结:知道补码,求原码(或数值)的方法:如果是正数,直接转换。如果是负数用以下三种方法:①   根据[[X]补]补=X求得例如10001101各位取反11110010加一11110011转换 -115②   求补的逆运算例如:11111001先减一 11111000各位取反10000111转换-7③-(模+补码转换结果)例如:10001101转换 -13模+补码转换结果128-13=115加负号–1151.   9本题问题不太明确例如:如果手边有手册或是知道产品的型号,就可从手册中查到微处理器的处理位数。也可以根据系统总线得知。因为系统总线是公共的数据通道,表现为数据传输位数和总线工作时钟频率。第二章intel8086微处理器2.3根据物理地址=段地址*10H+偏移地址得到:段地址   偏移地址   物理地址1000H   117AH   1117AH1025H   0F2AH   1117AH1109H   00EAH0   1117AH我们可以看到不同电的段地址,在不同的偏移地址下,可以对应相同的物理地址,也就相同的存储空间。说明在分配段时是重叠的.2.6指令   目的操作数寻址方式   源操作数寻址方式MOVARRAY,BX   直接寻址    寄存器寻址ADCCX,ALPHA[BX][SI]   寄存器寻址   基址变址相对寻址ANDGAMMA[DI],11011000B   寄存器相对寻址   立即数寻址INCBL   寄存器寻址   隐含寻址TESTES:[SI],DX   寄存器间接寻址   寄存器寻址SBBSI,[BP]   寄存器寻址   寄存器间接寻址2.7①   源操作数是立即数寻址,AX=1200H②   源操作数是寄存器寻址,AX=BX=0100H③   源操作数是直接寻址,将2000H×10H+1200H=21200H和21201H的内容取出,赋给AX=4C2AH④   源操作数是寄存器间接寻址,将2000H×10H+0100H=20100H和20101H的内容取出,赋给AX=3412H⑤   源操作数是寄存器相对寻址,将2000H×10H+0100H+1100H=21200H和21201H的内容取出,赋给AX=4C21H⑥   源操作数是基址变址寻址,将2000H×10H+0100H+0002H=201002和201003H的内容取出,赋给AX=7856H⑦   源操作数是基址变址相对寻址,将2000H×10H+0100H+0002H+1100H=21202H和21203H的的内容取出,赋给AX=65B7H2.8指令   源操作数寻址方式   物理地址MOVAX,00ABH   立即数寻址   跟随在指令后,有cs:ip决定MOVAX,BX   寄存器寻址   在寄存器中MOVAX,[100H]   直接寻址   2000H×10H+100H=20100HMOVAX,[BX]   寄存器间接寻址   2000H×10H+0100H=20100HMOVAX,[BP]   寄存器间接寻址   1500H×10H+0010H=15010HMOVAX,[BX+10]注意是10进制   寄存器相对寻址   2000H×10H+0100H+0AH=2010AHMOVAX,[BX][SI]   基址变址寻址   2000H×10H+0100H+00A0H=201A0HMOVAX,VAL   直接寻址   2000H×10H+0050H=20050HMOVAX,ES:[BX]   寄存器间接寻址   2100H×10H+0100H=21100HMOVAX,[SI]   寄存器间接寻址   2000H×10H+00A0=200A0HMOVAX,VAL[BX]   寄存器相对寻址   2000H×10H+0100H+0050H=20150HMOVAX,VAL[BX][SI]   基址变址相对寻址   2000H×10H+0100H+00A0H+0050H=201F0H.9指令   Sp   值PUSHCX   1FFAH   66H   1FFBH   55HPUSHBX   1FFCH   44H   1FFDH   33HPUSHAX   1FFEH   22H   1FFFH   11H指令   sp   值POPAX   1FFCH   AX=5566H      BX=3344HPOPCX   1FFEH   CX=3344H       SP=1FFEH2.   10指令   AX的值MOVAX,0   AX=0000HDECAX   AX=0FFFFHADDAX,7FFFH   AX=7FFEHADDAX,2   AX=8000HNOTAX   AX=7FFFHSUBAX,0FFFFH   AX=8000HADDAX,8000H   AX=0000HORAX,0BFDFH   AX=0BFDFHANDAX,0EBEDH   AX=0ABCDHXCHGAH,AL   AX=0CDABHSALAX,1   AX=9B56H(CF=1)RCLAX,1   AX=36ADH(AF=1)2.110110001010100000+ 10011101011000001 0000000000000000(0000H) AF=0,SF=0,ZF=1,CF=1,OF=0,PF=10110001010100000+ 0100001100100001 1010010111000001(A5C1H)AF=0,SF=1,ZF=0,CF=0,OF=1,PF=02.13①   BX=009AH②   BX=0061H③   BX=00FBH④   BX=001CH⑤   BX=0000H⑥   BX=00E3H(本条语句只对标志位有影响,不存贮结果)2.14BX=0110110100010110=6D16HBX=0000000011011010=00DAH2.15①   DX=0000000010111001 DX=0000000001011100=005CH②   DX=0000000010111001 DX=0000000000010111=0017H③   DX=0000000010111001 DX=0000010111001000=05C8H④   DL=10111001    DX=0000000001110010=0072H⑤   DX=0000000010111001 DX=0010000000010111=2017H⑥   DL=10111001    DX=0000000011001101=00CDH⑦   DH=00000000    DX=0000000010111001=00B9H⑧   DX=0000000010111001 DX=0000010111001100=05CCH CF=0⑨   DL=10111001    DL=0000000011011100=00DCH CF=12.16方法一:循环移位          方法二:逻辑右移MOVCL,04H           MOV CL,04HROLAL,CL           SHRAL,CL第三章   宏汇编语言程序设计3.1①AX=0001H;②AX=0002H③   CX=0014H④   DX=0028H⑤   CX=0001H3.2①ARRAYDB56H,78,0B3H,100②DATA DW2965H,45H,2965,0A6H③ALPHA DW0C656H,1278H④BETADB2DUP(23),5DUP(‘A’),10DUP(1,2),20DUP(?)⑥   STRINGDB‘THISISAEXAMPE’⑥COUNT EQU 1003.3…00H00H01H00H00H00H00H01H00H00H00H01H00H00H00H01H00H00H00H01H??42H41H44H43H1FH1DH…(1)          (2)                                     41H42H43H44H4CH(76)57H???01H03H01H03H…3.4DATA_SEG SEGMENTDATA1DB ‘DATA SEG,MENT’DATA2DB 72,65,-10DATA3DB 109,98,21,40DATA4DB 10DUP(0)DATA5DB ‘12345’DATA6 DW 7,9,298,1976DATA7 DW 785,13475DATA8 DW DB($-DATA6)-(DATA6-DATA1)DATA_SEGENDS3.8DATA_SEGSEGMENTAPPAY DB 10DUP(29H)ALPHA DB -25,4,10,76,3BUFFERDB 100DUP(?)DATA_SEGENDS3.   9DATA_SEG SEGMENTBCD1DB?,?BCD2DB?DATA_SEG ENDSCODE SEGMENTASSUMECS:CODE,DS:DATA_SEG,ES:DATA_SEGSTART:MOVAX,DATA_SEGMOVDS,AXMOVDS,AXMOVCL,04HMOVSI,OFFSET BCD1MOVAL,[SI]SALAL,CLMOVBL,[SI+1]ANDBL,0FHADDAL,BLMOVBCD2,ALMOVAH,4CHINT21HCODEENDSENDSTART3.12DATA_SEG SEGMENTXDB?YDB?WDB?ZDB ?RDB ?DATA_SEG ENDSCODE SEGMENTASSUMECS:CODE,DS:DATA_SEG,ES:DATA_SEGSTART:MOVAX,DATA_SEGMOVDS,AXMOVDS,AXMOVAL,WSUBAL,XCBWIDIV0AHMOVR,AHIMULYIMULAXMOVAH,4CHINT21HCODEENDSENDSTART3.14DATA_SEG SEGMENTSTR1DB"THISISADOG"STR2DB"THISISACOCK"COUNTDB$-STR2NUMDB ?DATA_SEG ENDSCODE SEGMENTASSUMECS:CODE,DS:DATA_SEG,ES:DATA_SEGSTART:MOVAX,DATA_SEGMOVDS, AXMOVDS,AXMOVES,AXMOVCH,0MOVCL,COUNTCLDMOVSI,OFFSETSTR1MOVDI,OFFSETSTR2REPZ CMPSBAND SI,000FHMOVAX,SIMOVNUM,ALCODEENDSENDSTART3.19DATA_SEG SEGMENTBUF DB"thisisastring","$"DATA_SEG ENDSCODE SEGMENTASSUMECS:CODE,DS:DATA_SEGSTART:MOVAX,DATA_SEG  MOVDS,AXMOVSI,OFFSETBUFTAKECHAR:MOVDL,[SI]CMPDL,"$"JZDONECMPDL,""JZNEXTSUBDL,20HNEXT:MOVAH,2INT21HINCSIJMPTAKECHARDONE:MOVAH,4CHINT21HCODEENDSENDSTART3.20DATA_SEG SEGMENT DATX DB ? DATY DB ? DATZ DB ?DATA_SEG ENDSCODE SEGMENTASSUMECS:CODE,DS:DATA_SEGSTART:MOVAX,DATA_SEG  MOV DS,AXMOVAL,DATXMOVBL,DATY  CMP AL,BL  JS NEXT  MOVDATZ,AL  JMPDONENEXT: MOVDATZ,BLDONE: MOVAH,4CH   INT21HCODEENDSENDSTART3.21DATA_SEG SEGMENT DATA DB ? DATB DB ? DATC DB ? DATD DB ?DATA_SEG ENDSCODE SEGMENTASSUMECS:CODE,DS:DATA_SEGSTART:MOVAX,DATA_SEG  MOVDS,AX  CMP DATA,0  JZ NEXT  CMPDATB,0  JZNEXT  CMPDATC,0  JZ NEXT  MOVAL,DATA  ADDAL,DATB  ADCAL,DATC  MOVDATD,AL  JMPDONENEXT:MOVDATA,0MOV DATB,0  MOVDATC,0DONE:MOVAH,4CHINT21HCODEENDSENDSTART3.22程序段是将十六进制数的ASSII码转化为十六进制数.本例是将大写字母A的ASCII变为十六进制数,将结果存入字符变量HEXNUM中。HEXNUM变量中原来的内容未知,程序段执行后的内容是字符A的十六进制数0A3.24DATA_SEG SEGMENT  N=10DATA1 DBNDUP(?) DATA2 DBNDUP(?) ADR1 DW ? ADR2 DW ?DATA_SEG ENDSCODE SEGMENTASSUMECS:CODE,DS:DATA_SEGSTART:MOVAX,DATA_SEGMOVDS,AXLEASI,DATA1LEADI,DATA2MOVCX,NLOP1:MOVAH,[SI]CMPAH,[DI]INCSIINCDILOOPZLOP1JNZNOTEQUMOVAH,0FFHSAHFJMPDONENOTEQU:MOVAH,0SAHFMOVADR1,SI-1MOVADR2,DI-1DONE:MOVAH,4CHINT21HCODEENDSENDSTART3.26DATA_SEG SEGMENTCOUNT=100BUF DBCOUNTNUP(?)MAXDB ?DATA_SEG ENDSCODE SEGMENTASSUMECS:CODE,DS:DATA_SEGSTART:MOVAX,DATA_SEG  MOVDS,AXMOVSI,OFFSETBUFMOVCX,COUNTLOP1:MOVAH,1INT21HMOV[SI],ALINCSILOOP LOP1MOVSI,OFFSETBUFMOVCX,COUNTMOVAL,[SI]LOP2:CMPAL,[SI+1]JANEXT2XCHGAL,[SI+1]INCSINEXT2:LOOPLOP2MOVMAX,ALMOVAH,4CHINT21HCODEENDSENDSTART3.27DATA_SEG SEGMENTBUFDB10 DUP(?)STR1DB‘Doyouwantinputnumber(y/n)?’,0DH,0AH,’$’STR2DB‘Pleaseinput thenumbers’,0DH,0AH,’$’ MAXDB? MINDB ?DATA_SEG ENDSCODE SEGMENTASSUMECS:CODE,DS:DATA_SEGSTART:MOVAX,DATA_SEGMOVDS,AXMOVDX,OFFSETSTR1MOVAH,09HINT21HMOVDX,OFFSETSTR2MOVAH,09HINT21HMOVSI,OFFSETBUFMOVCX,10LOP1:MOVAH,1INT21HMOV[SI],ALINCSILOOPLOP1MOVSI,OFFSETBUFMOVCX,9MOVAL,[SI]LOP2:CMPAL,[SI+1]JANEXT2XCHGAL,[SI+1]INCSINEXT2:LOOP LOP2MOVMAX,ALMOVSI,OFFSETBUFMOVCX,9MOVAL,[SI]LOP3:CMPAL,[SI+1]JBNEXT3XCHGAL,[SI+1]INCSINEXT3:LOOPLOP3MOVMIN,ALMOVAH,4CHINT21HCODEENDSENDSTART3.28DATA SEGMENTBUFF DB10DUP(?)DATA ENDSCODE SEGMENTASSUMECS:CODE,DS:DATASTART: MOVAX,DATAMOVDS,AXMOVSI,OFFSETBUFFMOVCX,0AHLOP1:MOVAH,7INT21HCMPAL,"$"JZDONECMPAL,"A"JLEDONECMPAL,"Z"JGENEXT1JMPSHOWNEXT1:CMPAL,"a"JGENEXT2CMPAL,"z"JGEDONENEXT2:SUBAL,20HSHOW:MOVDL,ALMOVAH,2INT21HLOOPLOP1DONE:MOVAH,4CHINT21HCODEENDSEND START3.29DATA SEGMENTSTRBUF DB"ABCDEFGIJKLMN$OPQRSTUVWSXYZ"COUNT DB $-STRBUFADRBUFDB ?DATA ENDSCODE SEGMENTASSUMECS:CODE,DS:DATASTART: MOVAX,DATAMOVDS,AXLEASI,STRBUFMOVCH,0MOVCL,COUNTLOP1:MOVAL,[SI]CMPAL,"$"JZDONEINCSILOOPLOP1DONE: MOVADRBUF,ALMOVAH,4CHINT21HCODEENDSENDSTART3.30STACKSEGMENTSTACKDW256DUP(?)TOPLABELWORDSTACKENDSDATA SEGMENTBUFFDB1,2,3,4,5,6,7,8SUMDW 0000HDATA ENDSCODE SEGMENTASSUMECS:CODE,DS:DATA,SS:STACKSTART:MOVAX,DATAMOVDS,AXMOVAX,STACKMOVSS,AXMOVSP,OFFSETTOPMOVCH,0MOVCL,8LOP1:MOVSI,OFFSETBUFFMOVAX,OFFSETSUMPUSHAXMOVAH,0MOVAL, [SI]PUSHAXCALLFARPTRFACTMOVDX,SUMADDSUM,DXINCSILOOPLOP1MOVAH,4CHINT21HCODEENDSCODESSEGMENTASSUMECS:CODESFACTPROCFARPUSHBPMOVBP,SPPUSHBXPUSHAXMOVBX,[BP+8]MOVAX,[BP+6]CMPAX,0JEDONEPUSHBXDECAXPUSHAXCALLFACTMOVBX,[BP+8]MOVAX,[BX]MULWORDPTR[BP+6]JMPRETURNDONE:MOVAX,01HRETURN:MOV[BX],AX POPAX POPBXPOPBPRET4FACTENDPCODESENDSENDSTART第四章INTEL80486微处理器实地址方式特点1.   1MB存储空间.2.   分段部件不使用描述符,所有段最大为64KB3.   不采用分页部件,即不支持虚拟存储器.4.   单任务.5.   代码段和数据段没有保护机制.4.   17段界限 段基址低16位  段基址高16位1.FFFF  0000  00 92 0F002.00FF  00 00  40 9A CF103.0000  00 00  00 96 0F004.0040  00 00  00 89 0F501.段界限0FFFFF段基址00000000 TYPE1001—代码段,只执行,已访问s=0,为系统段描述符;特权级为1级;p=0,对应段目前不在物理存储器中,而要从磁盘上调出来;g=0,段长度的基本单位是1字节;d=0,操作数和地址的默认长度为16位;u=02.段界限0F00FF段基址01040000 TYPE1001—代码段,只执行,已访问s=1,为存储段描述符;特权级为1级;p=0,对应段目前不在物理存储器中,而要从磁盘上调出来;g=1,段长度的基本单位是1页;d=1,操作数和地址的默认长度为32位;u=03.段界限0F0400段基址00000000 TYPE1001—代码段,只执行,已访问s=0,为存储段描述符;特权级为3级;p=0,对应段目前不在物理存储器中,而要从磁盘上调出来;g=0,段长度的基本单位是1字节;d=0,操作数和地址的默认长度为16位;u=04.段界限00004FF段基址05000000 TYPE1000—代码段,只执行s=1,为系统段描述符;特权级为0级;p=0,对应段目前不在物理存储器中,而要从磁盘上调出来;g=0,段长度的基本单位是1字节;d=0,操作数和地址的默认长度为16位;u=0第五章半导体存储器cpu与存储器的连接部分内容在讲述习题课时,由我的讲义稿给出。5.15项目   片选端   地址线A19~A16,A15-A14,A13~A11,A10~A0   起始和结束地址Eprom1#   Y0   任意, 10,  000, 变化   *8000H~*87FFFHEprom2#   Y1   任意, 10,  001, 变化   *8800H~*8FFFFHEprom3#   Y2   任意, 10,  010, 变化   *9000H~*97FFFH项目   片选端   地址线A19~A16,A15-A14,A13~A11,A10,A9~A0   起始和结束地址Ram 1#   Y4,A10   任意, 10,  100, 1, 变化   *A400H~*A7FFHRam 2#   Y4,A10   任意, 10,  100, 0, 变化   *A000H~*A3FFHRam 3#   Y5,A10   任意, 10,  101, 1, 变化   *AC00H~*AFFFHRam 4#   Y5,A10   任意, 10,  101, 0, 变化   *A800H~*ABFFH第六章   I/O接口技术6.86.11INPUTPROCNEARMOVCX,80HLEADI,BUFFPOLL:INAL,29HTESTAL,01HJNZPOLLINAL,28HSTOSBMOVDL,ALMOV AH,2INT21HRETLOOPPOLLINTPUTENDP'