微机原理与接口技术期末综合复习题

上传人:fgh****35 文档编号:180771235 上传时间:2023-01-07 格式:DOC 页数:22 大小:89KB
返回 下载 相关 举报
微机原理与接口技术期末综合复习题_第1页
第1页 / 共22页
微机原理与接口技术期末综合复习题_第2页
第2页 / 共22页
微机原理与接口技术期末综合复习题_第3页
第3页 / 共22页
点击查看更多>>
资源描述
微计算机原理与接口技术复习题(4)8086指令系统及寻址方式1. 根据下列要求编写一个汇编语言程序::(1) 代码段的段名为COD_SG(2) 数据段的段名为DAT_SG(3) 堆栈段的段名为STK_SG(4) 变量HIGH_DAT所包含的数据为95(5) 将变量HIGH_DAT装入寄存器AH,BH和DL(6) 程序运行的入口地址为START答案:DAT_SG SEGEMNTHIGH_DATDB 95DAT_SG ENDS;STK_SG SEGMENT DW64 DUP(?)STK_SG ENDS;COD_SG SEGMENTMAINPROCFARASSUMECS: COD_SG, DS: DAT_SG, SS: STK_SGSTART:MOVAX, DAT-SGMOVDS, AXMOVAH, HIGH_DATMOVBH, AHMOVDL, AHMOVAH, 4CHINT21HMAIN ENDPCOD_SG ENDS END START2. 指出下列程序中的错误:STAKSGSEGMENTDB100 DUP(?)STA_SGENDSDTSEGSEGMENTDATA1DB?DTSEGENDCDSEGSEGMENTMAINPROCFARSTART:MOVDS,DATSEGMOVAL,34HADDAL,4FHMOVDATA,ALSTARTENDPCDSEGENDSEND答案: 改正后:STAKSGSEGMENTDB100 DUP(?)STAKSGENDSDTSEGSEGMENTDATA1DB?DTSEGENDSCDSEG SEGMENTMAINPROCFARASSUME CS: CDSEG, DS: DTSEG, SS: STAKSGSTART:MOVAX, DTSEGMOVDS, AXMOVAL, 34HADDAL, 4FHMOVDATA1, ALMOVAH, 4CHINT21HMAINENDPCDSEGENDSENDS3. 将下列文件类型填入空格:(1) .obj (2) .exe (3) .crf (4) .asm (5) .lst (6) .map 编辑程序输出的文件有_; 汇编程序输出的文件有_; 连接程序输出的文件有_。答案:编辑程序输出文件: (4)汇编程序输出文件: (1), (3), (5) 连接程序输出文件: (2), (6)4. 下列标号为什么是非法的?(1) GET.DATA (2) 1_NUM (3) TEST-DATA(4) RET(5) NEW ITEM答案:非法标号: (1)因为.只允许是标号的第一个字符(2)第一个字符不能为数字 (3)不允许出现-(4)不能是保留字,如助记符 (5)不能有空格5. 下面的数据项定义了多少个字节?DATA_1DB6 DUP(4 DUP(0FFH)答案: 24字节6. 对于下面两个数据段,偏移地址为10H和11H的两个字节中的数据是一样的吗?为什么?DTSEGSEGMENT|DTSEGSEGMENTORG10H |ORG10HDATA1DB72H |DATA1DW7204HDB04H |DTSEGENDSDTSEGENDS|答案:不一样. 分别是72H, 04H和04H, 72H. 存储字时低8位存在低字节,高8位存在高字节.7. 下面的数据项设置了多少个字节?(1) ASC_DATADB1234(2) HEX_DATA DB1234H答案: (1) 设置了4个字节 (2) 设置了2个字节8. 执行下列指令后, AX寄存器中的内容是什么?TABLEDW10,20,30,40,50ENTRYDW3 . . .MOVBX,OFFSET TABLEADDBX,ENTRYMOVAX,BX答案: (AX)=409. 指出下列指令的错误:(1) MOVAH,BX(2) MOVSI,BX(3) MOVAX,SIDI(4) MOVAX,BXBP(5) MOVBX,ES:AX(6) MOVBYTE PTRBX,1000(7) MOVAX,OFFSET SI(8) MOVCS,AX(9) MOVDS,BP答案: (1) 源、目的字长不一致 (2) 源、目的不能同时为存贮器寻址方式 (3) 基址变址方式不能有 SI和DI的组合 (4) 基址变址方式不能有 BX和BP的组合 (5) 在8086寻址方式中,AX不能作为基址寄存器使用,而且源、目的不能同时为存贮器寻址方式 (6) 1000超出一个字节的表数范围 (7) OFFSET只用于简单变量,应去掉 (8) CS不能作为目的寄存器 (9) 段地址不能直接送入数据段寄存器10. DATASEGMENTTABLE_ADDRDW1234HDATAENDS . . .MOVBX, TABLE_ADDRLEABX, TABLE_ADDR 请写出上述两条指令执行后, BX寄存器中的内容。答案:MOVBX,TABLE_ADDR; 执行后(BX)=1234H LEABX,TABLE_ADDR; 执行后(BX)=OFFSET TABLE_ADDR11. 设(DS)=1B00H, (ES)=2B00H, 有关存储器地址及其内容如右图所示,请用两条指令把X装入AX寄存器。 1B00:2000H8000H 1B00:2002H2B00H . . 2B00:8000HX 答案:LES BX, 2000HMOV AX, ES: BX12. 变量DATAX和DATAY定义如下: DATAXDW 0148H DW 2316H DATAYDW 0237H DW 4052H按下述要求写出指令序列:(1) DATAX和DATAY中的两个字数据相加, 和存放在DATAY和DATAY+2中。(2) DATAX和DATAY中的两个双字数据相加, 和存放在DATAY开始的字单元中。(3) DATAX和DATAY两个字数据相乘(用MUL)。(4) DATAX和DATAY两个双字数据相乘(用MUL)。(5) DATAX除以23(用DIV)。(6) DATAX双字除以字DATAY(用DIV)。答案:(1)MOVAX, DATAXADDAX, DATAYMOVBX, DATAX+2ADDBX, DATAY+2MOVDATAY, AXMOVDATAY+2, BX(2)MOVAX, DATAXADDDATAY, AXMOVAX, DATAX+2ADCDATAY+2, AX(3)MOVAX, DATAXMULDATAYMOVDATAY,AXMOVDATAY+2,DX(4)MOVAX,WORD PTR DATAXMOVBX,WORD PTR DATAYMULBXMOVRESULT,AXMOVRESULT+2,DXMOVAX,WORD PTR DATAXMOVAX,WORD PTR DATAY+2MULBXADDRESULT+2,AXADCRESULT+4,DXMOVAX,WORD PTR DATAX+2MOVBX,WORD PTR DATAYMULBXADDRESULT+2,AXADCRESULT+4,DXMOVAX,WORD PTR DATAX+2MOVBX,WORD PTR DATAY+2MULBXADDRESULT+4,AXADCRESULT+6,DX (5)MOVAX, DATAXMOVBL, 23DIVBLMOVBL,AHMOVAH, 0MOVDATAY, AX;存放商MOVAL,BLMOVDATAY+2, AX;存放余数(6)MOVAX, DATAXMOVDX, DATAX+2DIVDATAY MOVDATAY, AXMOVDATAY+2, DX13. 试分析下面的程序段完成什么操作?MOVCL,04SHLDX,CLMOVBL,AHSHLAX,CLSHRBL,CLORDL,BL答案: 将DX: AX中的双字左移4位(乘16)14. 用其他指令完成和下列指令一样的功能:(1) REP MOVSB(2) REP LODSB(3) REP STOSB(4) REP SCASB答案:(1) LOOP1:MOVAL,BYTE PTR SIMOVES:BYTE PTR DI, ALINCSI或:DECSIINCDI或:DECDILOOPLOOP1(2) LOOP1:MOVAL, BYTE PTR SIINCSI或:DECSILOOPLOOP1(3) LOOP1:MOVES:BYTE PTR DI, ALINCDI或:DECDILOOPLOOP1(4) LOOP1:CMPAL,ES:BYTE PTR DIJEEXITINCDI或:DECDILOOPLOOP1EXIT:15. 编写程序段, 比较两个5字节的字符串OLDS和NEWS, 如果OLDS字符串与NEWS不同, 则执行NEW_LESS, 否则顺序执行程序。答案:LEASI, OLDSLEADI, NEWSMOVCX, 5CLDREPZCMPSBJNZNEW_LESS16. 假定AX和BX中的内容为带符号数, CX和DX中的内容为无符号数, 请用比较指令和条件转移指令实现以下判断:(1) 若DX的值超过CX的值,则转去执行EXCEED(2) 若BX的值大于AX的值,则转去执行EXCEED(3) CX中的值为0吗? 若是则转去执行ZERO(4) BX的值与AX的值相减, 会产生溢出吗? 若溢出则转OVERFLOW(5) 若BX的值小于AX的值,则转去执行EQ_SMA(6) 若DX的值低于CX的值,则转去执行EQ_SMA 答案:(1) CMPDX, CX JAEXCEED(2) CMPBX, AX JGEXCEED(3) CMPCX, 0 JEZERO(4) SUBBX, AX JOOVERFLOW(5) CMPBX, AX JLEQ_SMA(6) CMPDX, CX JBEQ_SMA17. 假如在程序的括号中分别填入指令:(1) LOOP L20(2) LOOPNE L20(3) LOOPE L20试说明在三种情况下, 当程序执行完后, AX、BX、CX、DX四个寄存器的内容分别是什么?TITLEEXLOOP.COMCODESGSEGMENTASSUMECS:CODESG, DS:CODESG. SS:CODESGORG100HBEGIN:MOVAX,01MOVBX,02MOVDX,03MOVCX,04L20:INCAXADDBX,AXSHRDX,1( )RETCODESGENDSENDBEGIN答案: (1)(AX)= 5 (BX)= 16 (CX)= 0 (DX)= 0(2)(AX)= 2 (BX)= 4 (CX)= 3 (DX)= 1(3)(AX)= 3 (BX)= 7 (CX)= 2 (DX)= 018. 变量N1和N2均为2字节的非压缩BCD数码,请写出计算N1与N2之差的指令序列。答案:MOVAX, 0MOVAL, N1+1SUBAL, N2+1AASMOVDL, ALMOVAL, N1SBBAL, N2AASMOVDH, AL19. 有两个3位的ASCII数串ASC1和ASC2定义如下:ASC1DB578ASC2DB694ASC3DB0000请编写程序计算ASC3ASC1+ASC2。答案:CLCMOVCX, 3MOVBX, 2BACK:MOVAL, ASC1BXADCAL, ASC2BXAAAORASC3BX+1, ALDECBXLOOPBACKRCLCX, 1ORASC3BX, CL20. 假设(CS)=3000H, (DS)=4000H, (ES)=2000H, (SS)=5000H, (AX)=2060H, (BX)=3000H, (CX)=5, (DX)=0, (SI)=2060H, (DI)=3000H, (43000H)=0A006H, (23000H)=0B116H, (33000H)=0F802H, (25060)=00B0H,.(SP)=0FFFEH, (CF)=1, (DF)=1, 请写出下列各条指令单独执行完后, 有关寄存器及存储单元的内容, 若影响条件码请给出条件码SF、ZF、OF、CF的值。(1) SBBAX,BX(2) CMPAX,WORD PTRSI+0FA0H (3) MULBYTE PTRBX(4) AAM(5) DIVBH(6) SARAX,CL(7) XORAX,0FFE7H(8) REPSTOSB(9) JMPWORD PYRBX(10) XCHGAX,ES:BX+SI 答案:(1) (AX)=0F05FH, (SF)=1, (ZF)=0, (OF)=0, (CF)=1(2) (SF)=1, (ZF)=0, (OF)=1, (CF)=1(3) (AX)=0240H, (OF)=1, (CF)=1(4) (AX)=0906H, (SF)=0, (ZF)=0(5) (AX)=20ACH(6) (AX)=0103H, (CF)=0(7) (AX)=0DF87H, (CF)=0, (OF)=0, (SF)=1, (ZF)=0(8) (23000H)(23004H)=60H, 不影响标志位(9) (IP)=0A006H, 不影响标志位(10) (AX)=00B0H, (25060)=2060H, 不影响标志位汇编语言程序设计基础1. 试编写一个汇编语言程序,要求对键盘输入的小写字母用大写字母显示出来。答案:abc:movah,1int21hcmpal,ajbstopcmpal,zjastopsubal,20hmovdl,almovah,2int21hjmpabcstop: ret2. 编写程序,比较两个字符串STRING1和STRING2所含字符是否完全相同,若相同则显示“MATCH”,若不同则显示“NO MATCH”。答案:datareasegmentstring1dbasfioastring2dbxcviyoafmess1dbMATCH,$mess2dbNO MATCH,$datarea endsprognam segmentmain proc farassume cs:prognam,ds:datareastart:pushdssubax,axpushaxmovax,datareamovds,axmoves,axbegin:movcx, string2-string1movbx, mess1-string2cmpbx,cxjnzdispnoleadx,addrleasi,string1leadi,string2repecmpsbjnedispnomovah,9leadx,mess1int21hretdispno:movah, 9leadx, mess2int21hretmainendpprognamendsendstart3. 试编写程序,要求从键盘输入3个16进制数,并根据对3个数的比较显示如下信息: (1)如果3个数都不相等则显示0; (2)如果3个数中有2个数相等则显示2; (3)如果3个数都相等则显示3。答案:data segmentarraydw3 dup(?)dataendscode segmentmain proc farassume cs:code,ds:datastart:pushdssubax,axpushaxmovax,datamovds,axmovcx,3leasi,arraybegin:pushcxmovcl,4movdi,4movdl, movah,02int21hmovdx,0input:movah,01int21handal,0fhshldx,clordl,aldecdijneinputmovsi,dxaddsi,2popcxloopbegincomp:leasi,arraymovdl,0movax,simovbx,si+2cmpax,bxjnenext1adddl,2next1:cmpsi+4,axjnenext2adddx,2next2:cmpsi+4,bxjnenumadddl,2num:cmpdx,3jldispmovdl,3disp:movah,2adddl,30hint21hretmain endpcodeendsendstart4. 已知整数变量A和B,试编写完成下述操作的程序: (1)若两个数中有一个是奇数,则将该奇数存入A中,偶数存入B中; (2)若两个数均为奇数,则两数分别加1,并存回原变量; (3)若两个数均为偶数,则两变量不变。答案:dsegsegmentadw?bdw?dsegendscsegsegmentmainproc farassumecs:cseg,ds:dsegstart:pushdssubax,axpushaxmovax,dsegmovds,axbegin:movax,amovbx,bxorax,bxtestax,0001jzclasstestbx,0001jzexitxchgbx,amovb,bxjmpexitclass:testbx,0001jzexitincbincaexit:retmainendpcsegendsendstart5. 把010010之间的30个数,存入首地址为GRAD的字数组中,GRAD+i表示学号为i+1的学生成绩。另一个数组RANK是30个学生的名次表,其中RANK+I的内容是学号为i+1的学生的名次。试编写程序,根据GRAD中的学生成绩,将排列的名次填入RANK数组中(提示:一个学生的名次等于成绩高于这个学生的人数加1)。答案:dsegsegmentgradedw30 dup(?)rankdw30 dup(?)dsegendscsegsegmentmainprocfarassumecs:cseg, ds:dseg, es:dsegstart:pushdssubax,axpushaxmovax,dsegmovds,axmoves,axbegin:movdi,0movcx,30loop1:pushcxmovcx,30movsi,0movax,gradedimovdx,0loop2:cmpgradesi,axjbego_onincdxgo_on:addsi,2looploop2popcxincdxmovrankdi,dxsdddi,2looploop1retmainendpcsegendsendstart6. 分析下列程序的功能,写出堆栈最满时各单元的地址及内容。SSEGSEGMENT STACKAT1000H; 堆栈的段地址为1000HDW128 DUP(?) TOSLABELWORDSSEGENDS; - - - - - - - - - - - - - - - - - - - - - - - - - -DSEGSEGMENTDW32 DUP(?)DSEGENDS; - - - - - -CSEGSEGMENTMAINPROCFARASSUMECS:CSEG, DS:DSEG,SS:SSEGSTART:MOVAX,SSEGMOVSS,AXMOVAX,DSEGMOVDS,AXMOVAX,4321HCALLHTOARETN:MOVAH,4CHINT21HMAINENDP; - - - - - - - - - - - - - - - - - - - - - - - -HTOAPROCNEARCMPAX,15JLEB1PUSHAXPUSHBPMOVBP,SPMOVBX,BP+2ANDBX,0FHMOVBP+2,BXPOPBPMOVCL,4SHRAX,CLCALLHTOAB1:POPAXB2:ADDAL,30HJLPRTADDAL,07PRT:MOVDL,ALMOVAH,2INT21HRETHTOAENDPCSEGENDS ; - - - - - - - - - - - - - -ENDSTART答案:1000:0F2HB11000:0F4H31000:0F6HB11000:0F8H21000:0FAHB11000:0FCH11000:0FEHRETN1000:100H7. 写出分配给下列中断类型号在中断向量表中的物理地址。 (1) INT 12H(2) INT 8答案:(1) 00048h (2) 00020h8. 试编写程序,它轮流测试两个设备的状态寄存器,只要一个状态寄存器的第0位为1,则与其相应的设备就输入一个字符;如果其中任一状态寄存器的第3位为1,则整个输入过程结束。两个状态寄存器的端口地址分别是0024和0036,与其相应的数据输入寄存器的端口则为0026和0038,输入字符分别存入首地址为BUFF1和BUFF2的存储区中。答案:mov si, 0mov di, 0test12:in al, 0024htest al, 08jnz exitin al,0036h test al, 08jnz exitdev1:in al, 0024h test al, 01jz dev2in al, 0026hmov buffersi, alinc sidev2:in al, 0036h test al, 01jz test12in al, 0038h mov buff2di,alinc dijmp test12exit:ret9. 给定(SP)=0100,(SS)=0300,(FLAGS)=0240,存储单元的内容为(00020)=0040,(00022)=0100,在段地址为0900及偏移地址为00A0的单元中有一条中断指令INT 8,试问执行INT 8指令后,SP,SS,IP,FLAGS的内容是什么?栈顶的三个字是什么?答案:(SP) = 00FA(SS) = 0300(IP) = 0040(FLAGS) = 0040堆栈内容:00A1H0900H0240H10. 编写一个程序,接收从键盘输入的10个十进制数字,输入回车符则停止输入,然后将这些数字加密后(用XLAT指令变换)存入内存缓冲区BUFFER。加密表为; 输入数字: 0,1,2,3,4,5,6,7,8,9 密码数字: 7,5,9,1,3,6,8,0,2,4答案:scodedb7,5,9,1,3,6,8,0,2,4bufferdb10 dup(?); movsi,0movcx,10leabx,scodeinput:movah,01int21hcmpal,0ahjzexitandal,0fhxlatmovbuffersi,alincsiloopinputexit:ret
展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 机械制造 > 工业自动化


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

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


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