微机原理练习测验题库.doc_第1页
微机原理练习测验题库.doc_第2页
微机原理练习测验题库.doc_第3页
微机原理练习测验题库.doc_第4页
微机原理练习测验题库.doc_第5页
已阅读5页,还剩30页未读 继续免费阅读

下载本文档

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

文档简介

芇蒂薁螁羇芄蒇螁聿蒀螅螀膂芃蚁衿芄蒈薇袈羄芁蒃袇肆蒆荿袆芈艿螈袅羈薅蚄袅肀莈薀袄膃薃蒆袃芅莆螄羂羅腿蚀羁肇莄薆羀腿膇薂罿罿莂蒈罿肁芅螇羈膃蒁蚃羇芆芃蕿羆羅葿蒅肅肈节螄肄膀蒇蚀肃节芀蚆肃肂薆薂虿膄莈蒈蚈芇薄螆蚇羆莇蚂蚆聿薂薈螆膁莅蒄螅芃膈螃螄羃莃蝿螃膅膆蚅螂芇蒂薁螁羇芄蒇螁聿蒀螅螀膂芃蚁衿芄蒈薇袈羄芁蒃袇肆蒆荿袆芈艿螈袅羈薅蚄袅肀莈薀袄膃薃蒆袃芅莆螄羂羅腿蚀羁肇莄薆羀腿膇薂罿罿莂蒈罿肁芅螇羈膃蒁蚃羇芆芃蕿羆羅葿蒅肅肈节螄肄膀蒇蚀肃节芀蚆肃肂薆薂虿膄莈蒈蚈芇薄螆蚇羆莇蚂蚆聿薂薈螆膁莅蒄螅芃膈螃螄羃莃蝿螃膅膆蚅螂芇蒂薁螁羇芄蒇螁聿蒀螅螀膂芃蚁衿芄蒈薇袈羄芁蒃袇肆蒆荿袆芈艿螈袅羈薅蚄袅肀莈薀袄膃薃蒆袃芅莆螄羂羅腿蚀羁肇莄薆羀腿膇薂罿罿莂蒈罿肁芅螇羈膃蒁蚃羇芆芃蕿羆羅葿蒅肅肈节螄肄膀蒇蚀肃节芀蚆肃肂薆薂虿膄莈蒈蚈芇薄螆蚇羆莇蚂蚆聿薂薈螆膁莅蒄螅芃膈螃螄羃莃蝿螃膅膆蚅螂芇蒂薁螁羇芄蒇螁聿蒀螅螀膂芃蚁衿芄蒈薇袈羄芁蒃袇肆蒆荿袆芈艿螈袅羈薅蚄 微机原理练习测验题库选择题166个填空题103个判断题161个简答题27个程序题13个合计 470个一、选择题1:C2 B3 C4 C5 B6 C7 C8 B9 C10 B11C12 A13B14 B15 B16 B17 C18 B19 C20 A21 C22 B23 C24B25 C26 B27 B28A29 B33 B34 A35 B36 B37 B38 C39 C40 B41 B42 B43 A44 A45 B46 B47D48. B49. B50.A51.C52 B53 B54B55 B56 B57 A58 B59 A60 A 61 B62 B63 A64 A65 A66 B67 B68 C69 C70 C71 B72 C73 C74. B75 A76 C77. C78 B79. C80 C81. B82 A83B84 C85 C86 C87 B88 B89 B90 B91. B92 B93. B94 B95. A96. B97 B98. A99 B100. C101. C102 B103D104 B105. B106. B107. B108. B109. B110 B111A112 A113 C114 B115 B116 B117 D118 B119. C120 A121 C122 C123 C124 A125 B126 B127 B128 B129 A130 C131 C132 B133 B134 A135 C.136 A137 B.138 B139 A140 B141 A142 B143 B144 B145 C146 B147 A148 ABDF149 B150 B151 C152 A153 B154 B155 A156 B157 A158 B159 B160 B161 AFG162 B163 B164 B165 A166 B二、填空题1. 二进制中的一个数据位2. 8个二进制位组成的数据3. 计算机进行数据处理,包括运算,传输等,所使用的基本信息单位,由若干个二进制位组成4. 一个字所包含的二进制数据位数5. 硬件,软件6. 主机(包括P、 RAM、ROM和 IO接口电路等),外围设备,电源7. 各种程序设计语言、系统软件、应用软件和数据库8. 机器语言、汇编语言和高级语言9. 监控程序、操作系统、诊断程序及一些工具软件10. 传输信号的一组公共信号通道11. 芯片内部总线12. 微机系统总线13. 通信总线14计算机系统中给存储器(或I/O端口)的每一个存储单元分配的一个编号15控制总线16数据总线(DB)、地址总线(AB)、控制总线(CB)17一种微处理器所能执行的全部指令的集合18操作码(OpCode)和操作数(OperAnd)或操作数地址19. 体积小、功耗低;价格便宜;结构简单、性能可靠;灵活性好 20指一种微处理器能执行的指令的个数。21时钟周期,时钟周期数22.MIPS23指由该微处理器构成的系统所能访问(ACCess)的存储单元数24执行部件EU(ExeCution Unit)和总线接口部件BIU(Bus InterfACe Unit)。25. CPU运算后的状态特征或存放控制标志268,十六27AX,BX,CX,DX28SP( StACk Pointer)和 BP( BAsiC Pointer)29.2030.实际地址或物理地址PA(PhysiC Address)31数据寄存器和指针寄存器、变址寄存器32. AX、BX、CX、DX、SP、BP、SI、DI33. 16位累加器34. 基址(BAse)寄存器35. 计数(Count)寄存器36. 数据(DAtA)寄存器37堆栈指针寄存器38基址指针寄存器39源变址寄存器40目的变址寄存器41.集成电路的一种外封装形式,即双列直插式封装42主频,时钟周期43. 20ns,10ns44.时钟周期、总线周期、指令周期45指CPU执行各种操作时,引脚信号随时钟而变化的顺序和时间长短的安排46总线读操作和总线写操作47.字节,字节48. 指CPU和存储器进行数据交换时在地址总线上出现的地址码49. 段地址和偏移量50. 在内存中开辟的一段特殊的存储区域,这段区域采用先进后出的原则存取数据51.堆栈段寄存器SS和堆栈指针SP52.在调用子程序时保存返回地址53.断点地址54.入栈(PUSH)和出栈(POP)55.两56.CPU所具有的一整套执行各种类型的操作命令的集57.所有能寻得操作数来源的方式58. 64K,32K59. 字节,字60. 取指令,执行指令61.13362. 长格式和短格式63. 表的首地址64. 即8位的和16位的操作数65. 无符号数和带符号数66. 0255(或0FFH)67. 06 5 5 3 6(或0FFFFH)68. 补码69. -128127(或80H7FH)70. 一3276832767(或8000H7FFFH)71. 7,5,272. 布尔型指令、移位指令和循环移位指令,1373. AND(与),OR(或),XOR(异或),NOT(非)和TEST(测试)74. 即无条件转移与调用返回、条件转移、循环控制和中断类指令75. 直接寻址和间接寻址76.某些具有独立功能的程序编写成独立的程序模块77.CALL78. RET79. 9,580. 一类是外部中断源,另一类是内部中断81. 断点82. 中断服务程序83. 中断返回指令(Interrupt RETurn)84. 磁盘的读写管理; 内存管理; 基本10管理85. 入口参数; 子程序的功能号送入AH寄存器; INT 21H。86. 系统按照实际的时间刻度运行,并及时按实际出现的情况处理有关问题的能力87. 宏汇编程序(MACRO ASSEMBLER)和小汇编程序(MINI- ASSEMBLER)88. 指令语句、伪指令语句和宏指令语句89. 段、偏移及类型90. 标号或变量相距段起始地址的字节数91. EQ(相等)、 NE(不相等)、 LT(小于 ) GT(大于)、 LE(小于或等于)、 GE(大于或等于)92.顺序结构,条件结构,循环结构93. 因而常常将这些常用的程序标准化,做成预制好的模块94. 主程序或调用程序95. 子程序嵌套96. 递归调用97. 入口参数,出口参数98. 参数传递99. 地址表100. 递归调用,递归子程序101. 内存储器(又称主存储器)和外存储器102. 硬盘和软盘103. 无条件传送方式和条件传送方式三、判断题1. 对2. 对3. 对4. 错5. 对6. 对7. 对8. 错9. 错10. 错11. 错12. 错13. 对14. 错15. 对16. 对17. 错18. 错19. 对20. 错21. 对22. 对23. 错24. 错25. 错26. 对27. 对28. 错29. 对30. 对31. 对32. 对33. 错34. 错35. 对36. 对37. 对38. 对39. 对40. 对41. 对42. 对43. 对44. 对45. 错46. 对47. 对48. 对49. 对50. 错51. 对52. 对53.错54.错55.对56.对57.对58错59.对60.对61.对62.对63.错64.错65.对66.对67.对68.对69.对70对71.对72.错73.对74.对75对76.对77.对78.对79.对80)对81.错82.)对83.错84.对85.对86.对87.对88.)对89.对90.错91.对92.对93.对94.对95.对96.对97.错98.错99.对100.对101.对102.)对103.错104.对105.错106.对107.对108.对109.错110.对111.错112.对113.对114. 错115. 对116. 对117. 对118. 错119. 对120. 对121. 错122. 错123. 对124. 对125. 错126. )对127. 对128. 错129. 对130. 错131. 错132. 对133. 错134. 对135. 对136. 错137. 对138. 对139. 对140. 错141. 对142. 对143. 对144. 错145. 错146. 对147. 对148. 错149. 对150. 错151. 对152. 对153. 错154. 对155. 错156. 对157. 对158. 对159. 错160. 错161. 对四、简答题1微计算机系统的一般结构:硬件: 从图中可以看出,微计算机硬件由主机(包括P、 RAM、ROM和 IO接口电路等)及一些外围设备、电源组成。软件:微计算机的软件,从广义角度来说包括各种程序设计语言、系统软件、应用软件和数据库等。2.缩微的大规模集成电路称为微处理器。3.以微处理器为核心,配上大规模集成电路的随机存储器,/O及相应的辅助电路而构成的微型化的计算机装置。4. 第一代(19711976年):四位和低档八位微处理器和微计算机。代表产品是Intel的4004(集成度为1200个晶体管片)和由它组成的MCS4的微计算机,以及随后该公司的改进产品8008(集成度是 2000个晶体管片)和由它组成的 MCS8微计算机。第二代(19761978年):八位的微处理器和微计算机。代表产品是Intel公司的8080,MotorolA公司的 MC6800和 MOS TeChnology公司的 6502,Zilog公司的 Z80。第三代(19781981年):十六位微处理器和微计算机。代表产品是Intel8086(集成度为29000个晶体管片),Zilog的Z8000(集成度为17500个晶体管片)和MC68000(集成度为用68000个晶体管片)。第四代(1981年以后):三十二位的微处理器和微计算机。这代产品属超大规模集成电路,代表产品是Intel公司的80X86(包括Pentium 系列)、HP公司的32位微处理器和MotorolA公司的68020,集成度达到15万45万个晶体管/片。5总线(BUS)是传输信号的一组公共信号通道。6采用总线结构后,计算机的主要功能部件就都挂在总线上,系统的各种信息都通过总线传输。相对于一些各部件随机连线的电子产品,这种方式有很突出的优点:结构简化:统一的总线连接,使系统的结构清晰、简化。 设计简化:在确定了总线的标准后,各功能部件都可以以此标准为依据,分别进行设计。同时,凡符合此标准的部件也都可以直接连接起来。这种设计方式叫面向总线的设计方法,它大大减小了设计的工作量。 扩充容易:采用总线结构的计算机,如果需要在系统中扩充新的功能部件,相对较为容易,一般只需要将符合该总线标准的部件直接接入即可(当然需考虑驱动能力的问题)。对此,我们在给PC机安装新的板卡时应有体会。 7每种CPU指令系统的指令都有几十条、上百条之多。为了帮助记忆,用助记符来代表操作码。通常助记符用相应于指令功能的英文缩写词来表示。如 Z 8 0微处理器中,数的传送(LoAd)用LD,加法用ADD,输出用OUT,暂停用HALT。8原码、补码和反码9用补码表示的数,在进行加减运算时,可能发生溢出;而无符号数加减只会产生进位或借位。 溢出与进位(借位)是完全不同的。运算溢出后,所得结果是完全错误的,应该丢弃。而发生进位或借位后,运算结果的低位是正确的,不能丢弃。 发生溢出的本质原因是,运算结果超出了同样位数的补码表示的范围。10其功能和模型八位微处理器中的程序计数器PC功能相似。用于保存EU要执行下一条指令的偏移地址。11. 三态,这表示该信号除了可以输出高电平及低电平以外,还具有高阻态输出。此类信号具有与外界隔离的功能。12. 总线周期,指的是8086CPU通过总线,执行一次访问存储器或访问IO端口的操作或操作的时间。13. 基本总线周期用T1,T2,T3,T4表示。14. CPU将在T3之后插入1个或多个附加的时钟周期Tw,Tw又叫等待状态或等待周期。15. 最小方式,就是系统中只有8086单一个微处理器,在这种系统中,所有的总线控制信号都直接由8086产生,系统中总线控制逻辑电路被减到最少。16. 当把8086的33脚MNMX接向+5V时,8086就处于最小工作方式了。17. 最大方式是相对最小方式而言的。在这种方式下,系统中,大部分的总线控制信号都不是直接由8086产生,而是由系统中另外接入的总线控制逻辑产生的。18. 当把8086的33脚MN接向地时,这时的系统处于最大方式。19系统的复位和启动操作 ,总线操作,暂停操作,中断操作,总线保持或总线请求/允许操作 20. 延长CPU读写内存(或I/O口)的时间,以便速度较慢的内存(或I/O口)芯片能在规定的总线周期的时间内,完成数据的存取,以实现与CPU的正确接口。21. 指令系统是计算机硬件和软件之间的桥梁,是汇编语言程序设计的基础。CPU所具有的一整套执行各种类型的操作命令的集会称为该 uP的指令系统(Instruction Set)。一条指令是完成一种操作的命令,uP能直接识别和执行的指令是用二进制代码表示的,这种代码称为机器代码。给每种机器代码赋予一个能助记的符号,得到助记符指令。不同的uP赋予的助记符不同,而且各自的指令系统中包含的操作类型也有些不同,就构成忙各自的指令系统。22.1数据传送类2算术运算类3逻辑运算与移位类4串操作类5控制转移类 6处理器控制类23.(1)这类指令只能用累加器作I/O过程机构,不能用于其它寄存器;(2)长格式的I/O指令,端口范围为0FFH,这在一些规模较小的的8086/8088微机(如单板机)就够用了。而在一些功能较强的微机系统,比如IBM PC/XT,AT机中,既用了0FFH范围的端口,也用了大于FFH的端口。前者分配给主板的接口使用,后者则分配给槽口上扩展的端口使用。运行有I/O指令的程序时,若无硬件端口的支持,机器将出现死锁。IBM PC/XT机I/O端口地址分配见第七章7.3。(3)在使用短格式I/O指令时,应先将端口地址赋给DX寄存器,而且只能赋给DX24对十进制数进行乘法运算,要求乘数和被乘数都是非组合的BCD码。AAM指令用于对8位的非组合BCD码的乘积AX内容进行调整。调整后的结果仍为一个正确的非组合BCD码,放回AX中。AAM紧跟在乘法指令之后,因为BCD码总是当作无符号数看待,所以对非组合BCD相乘是用MUL指令,而不是用IMUL指令。25.(1)可以对字节串进行操作,也可以对字串进行操作。(2)所有串操作指令都用SI对DS段中的源操作数进行间接寻址,而用DI对ES段中的目的操作数进行间接寻址。串操作指令是唯一的一类源操作数和目的操作数都在存储单元的指令。(3)串操作指令执行时,地址指针的修改与方向标志DF有关。当 DF=1,SI和DI作自动减量修改;当DF=0,SI和DI作自动增量修改。因此,在串操作指令执行前,需对SI,DI和DF进行设置,且把串的长度设置在CX中。(4)通过在串操作指令前加前缀,可使串操作重复进行到结束,其执行过程相当于一个循环程序的运行。在每次重复之后,地址指针SI和DI都被修改,但指令指针IP仍保持指向前缀的地址。因此,如果在执行串操作指令的过程中,有一个外部中断进入,那么,在完成中断处理以后,将返回去继续执行串操作指令。26.机器语言的指令(语句),是用0、1二进制代码表示的。这种语言难以记忆和理解,但它是机器唯一能直接理解和直接执行的语言。汇编语言采用助记符表示0、1二进制代码,还使用符号地址及其他一些语法规定。这样,汇编语言的指令与机器语言的指令基本上一一对应,基本上属于同一层次的语言,但可理解性大大加强,也较容易记忆。但汇编语言指令的功能受处理器的限制,一般不太强。高级语言是一种面向算法的语言,其语句类似人类的自然语言,因而易学易用,可移植性好。但高级语言的语句与机器可执行的机器指令之间并无直接的对应关系,因此,高级语言程序执行前需要翻译成机器指令。这种关系带来了程序效率(时间、空间)的损失。27.(l)单个程序模块易于编写,调试和修改;(2)便于分工,可由多个程序员编写、调试,有利于加快工作速度;(3)程序易读性好;(4)程序的修改可局部化进行;(5)频繁使用的功能可以编制成模块存在库里供多个任务使用。五、程序题1. bcdefgkmn2.MOVAL,08MOVBL,09MULBL;(AL)(BL)-(AX)AAM;结果:(AX)=07023.MOVAX,0103;取被除数MOVBL,06;取除数AAD;调整为(AX)=000DHDIVBL;相除,得商(AL)=02余数(AH)=014.解:该程序段如下:MOVBX,OFFSETBUFFERMOVAX,BXCWD;被除数先进行符号扩展;(对带符号数)IDIV2BXMOV4BX,AXMOV6BX,DX在计算机存储单元中,一个字是按低字节在前,高字节在后存放的。在这里45ABH和2132H存放在BUFFER所指的地址单元中,所以我们先取得BUFFER的地址,再将45ABH放入AX中,然后对它进行调整,再与2132H相除。2BX在这里是一种寻址方式,表示BX+2所指地址的内容。5.解:完整的汇编语言如下:DATASEGMENT;数据段WDW304XDW10YDW12ZDW20RESULTDW2DUP(?)DATAENDS;.CODESEGMENT;代码段ASSUMECS:CODE,DS:DATASTART:MOVAX,DATA;初始化DSMOVDS,AX;MOVAX,X;XYIMULYMOVCX,AX;乘积暂存BX,CXMOVBX,DXMOVAX,Z;将Z带符号扩展CWDADDCX,AX;与XY相加ADCBX,DXSUBCX,220;(XY+Z)-220,结果在BX和CX中SBBBX,0;保证借位被减掉MOVAX,W;取W-AX,并扩展成双字CWDSUBAX,CX;实现W-(XY+Z-220)SBBDX,BX;结果在(DX),(AX)中IDIVX;最后除以X,结果商在(AX);余数在(DX)中MOVRESULT,AXMOVRESULT+2,DX;存结果到数据区;.MOVAH,4CH;返回DOSINT21HCODEENDS;.ENDSTART;汇编结束6. SALAL,1;X2MOVBL,AL;暂存于BLSALAL,1;X4SALAL,1;X8ADDAL,BL7.JNZ0020指令的位移量e为:e=(IP)目的(IP)源2)=002OH一(001DH2)=01H这里的2为该指令的长度(字节数)。位移量为正,属正向转移。JMP001F指令的位移量e为:e=(IP)目的(IP)源2)=001FH一(0025H2)=8H负数取补码。位移量为F8H,位移量为负。属反向转移。8.分析:将求和程序ROUTADD设计为一个过程,它和主程序MAIN在同一程序模块中,因此该过程可直接访问整个模块的数据区。在这个数据区内,设置主子程序传递参数的缓冲区,在本例中,传递的参数就是待求和的数组本身。因此,本参数传递的方法,就是设置一个主子程序都能访问的公用区,在此公用区内传递所有的参数,它有点类似高级语言中的全局变量。程序中,数组ARY可包含任意个字,其长度为一ARY(字节),赋给COUNT,作为子程序循环相加的重复次数。但要注意:这里是进行字相加,因此送给CX寄存器的计数值应为COUNT2,子程序运行结果存入共用数据区的SUM和SUM1两个字节单元中。因此调用之后,可从这里取走运算结果。解:DATASEGMENARYDW3456H,8932H,5763H,7462H,OABCH;任意个字COUNTEQUARY;数组中的字节个数SUMDW?,?;存放结果DATAENDSCODESEGMENTASSUMECS:CODE,DS:DATAMAINPROCFARSTART:PUSHDSMOVAX,0PUSHAXMOVAX,DATAMOVDS,AXCALLFARPTRROUTADD;调用求和子程序RET;返回DOSMAINENDPROUTADDPROCFARPUSHAXPUSHCX;保护现场PUSHSILEASI,ARY;SI指向ARY首址MOVCX,COUNT2;设计数值XORAX,AX;清和MOVDX,AXCACULS:ADDAX,SIJNCCOUPTINCDX;进位COUPT:ADDSI,2;修改指针L00PCACULSMOVSUM,AX;存和MOVSUM2,DXPOPSIPOPCX;恢复现场POPAXROUTDDENDPCODEENDSENDSTART10.分析:当数据段中有两个数组ARY和ARY1要求其累加和时,这种情况下,若采用上例固定缓冲区传送参数的办法,那就只有在调用ROUTADD求了数组ARY的和之后,再把数组ARY1的变量传到数组ARY的单元中,运行完后,再把结果SUM传回到SUM1中,显然这不是一个好办法。怎样才能简单的解决这种参数传递的问题呢?设想,如果我们不直接传递数组本身,而是传递数组的首地址,则求和的子程序就可以方便地对不同的数组求和了。具体来说,我们在ROUTADD子程序中,不去直接访问数组本身,而是通过主程序传递的数组地址来间接的访问数组。具体的实现:在这种情况下,常采用地址表方法,也要设置一个缓冲区,在这个缓冲区中保留了3个字单元作地址表,存放待待求和数组的参数,而不是数组本身。为此,应在主程序的调用指令CALLROUTADD之前增加以下几条指令:MOVTABLE,OFFSETARYMOVTABLE2,OFFSETCOUN5MOVTABLE4,OFFSETSUMI ;建立地址表MOVBX,OFFSETTABLECALLROUTADD;地址表首批送BX前三条指令是把待传送给子程序的参数棗数组的起始地址,数组长度和数组之和都放入地址表中,然后用寄存器BX指向地址表首址,通过BX将地址表首址传到子程序中去,子程序通过地址表取得所需参数,并把结果存入指令的存储单元中去,这种方法实质上是一个2次间接寻址的过程。第一次间接寻址,从TABLE表中得到数组的首地址,第二次间接寻址,根据数组的首地址得到数组各元素的值。解:源程序如下:PROGRAMSEGMENTORG100HASSUMECS:PR00RAM,DS:PROGRAM,SS:PROGRAMMAINPROCNEARMOVAX,OFFSETARYMOVDS,AXMOVES,AXMOVTABLE,OFFSETARYIMOVTABLE2,OFFSETCOUNTMOVTABLE十4,OFFSETSUMIMOVBX,OFFSETTABLE;地址表首地址送BXCALLROUTDDMOVAH,4CH;返回DOSINT21HMAINENDPROUTADDPROCNEARPUSHAX;保护现场PUSHCXPUSHSIPUSHDIMOVSI,BX;SI指向数组首址MOVDI,BX2;取数组长度作计数值MOVCX,DIMOVDI,BX4;DI指向结果单元XORAX,AX;清和MOVDX,AXCACULS:ADDAX,SI;求和JNCCOUPTINCDXCOUPT:ADDSI,2L00PCACULSMOVDI,AX;存和MOVDI2,DXPOPDI;恢复现场POPSIPOPCXPOPAXRETROUTADDENDPARYDW3456H,8932n,5763H,7462H,0ABCHCOUNTDW(ARY)2SUMDW?,?TABLEDW3DUP(?);保留3个字单元作地址表PR00RAMENDSENDMAIN;汇编结束此例,大家还需要注意的是其编写的格式。本例是按照DOS下的.COM程序格式编写的,具体来讲,有如下特点:1.整个程序只有一个段,而且也不需要定义堆栈段.2.程序的入口应定义在该段偏移地址的0100H处,例子中用ORG100H来保证.该程序编译后,如何转换成.COM文件,请见第四章4.6节10.分析:使用堆栈来传递参数是高级语言中广泛使用的一种方法。其明显的优点是,当主子程序调用关系结束后,参数就会从堆栈中清除,参数只是临时占用内存单元。而不像全局变量那样永久地”占用内存单元。由于此种原因,堆栈中变量也被称为自动变量”。当然,本方法相对于前面两种方法,可能稍复杂一些。具体做法是:在主程序中首先将数据的参数(这里是指三个地址)推入堆栈,再调用子程序,在子程序ROUTADD中从堆栈中适当地址(需计算一下)取出参数,以达到传送数据的目的。最后,子程序返回主程序之前,要清除掉推入的参数,恢复堆栈到推入参数之前的的状态,这通过RETN来实现。解:DATASEGMENARYDW3456H,8932H,5763H,7462H,OABCHCOUNTDW(ARY)2SUMDW?,?DATAENDSSTACKSEGMENTPARASTACKSTACK?/PDW100DUP(?)T0PLABELWORDSTACKENDSCODE1SEGMENT;主程序MAINPROCFARASSUMECS:CODEI,DS:DATA,SS:STACKSTART:MOVAX,CX;初始化SSMOVSS,AXMOVSP,OFFSETTOP;初始化SPPUSHDS;保护返回地址SUBAX,AXPUSHAXMOVAX,DATA;初始化DSMOVDS,AXMOVBX,OFFSETARY;以下将待传递的参数地址入栈PUSHBXMOVBX,OFFSETCOUNTPUSHBXMOVBX,QFFSETSUMPUSHBXCALLFARPTRROUTADD;调用求和的子程序RETMAINENDPCODE1ENDSCODE2SEGMENTASSUMECS:CODEZROUTADDPROCFARPUSHBPMOVBP,SPPUSHAXPUSHCXPUSHSIPUSHDIMOVSI,BPOAH;获取ARY地址参数M0VDI,BP8;获取COUNT地址参数MOVCX,DIMOVDI,BP6;获取SUM地址参数XORAX,AXMOVDX,AXCACULS:ADDAX,SIJNCCOUPTINCDXCOUPT:ADDSI,2L00PCACULSMOVDI,AX;存入以求的和MOVDI2,DXPOPDIPOPSIPOPCXPOPAXPOPBPRET6;清除传递的6字节参数ROUTADDENDPCODZENDSENDSTART注意:由于主程序中在CALL指令之前,向堆栈推入了数据参数(地址),因此,子程序结束时,应使用带常量的返回语句RET6,以便返回主程序后,堆栈能恢复原始状态。要理解子程序中是如何获得传递参数的,必须明确两点:1)采用间接寻址是对堆栈段进行寻址2)主子程序在调用时,堆栈中的状况子程序中的BP-子程序中推入的DI子程序中推入的SI子程序中推入的CX子程序中推入的AX子程序入口处推入的的BP值断点IP断点CSSUM地址COUNT地址ARY地址当前的+2+2+2+2+2+2+2+2+211.分析:本例需要解决两个问题:1)在1000个双字节数有符号数中,找出负数、正数、零的个数。2)要比较这三个数中,哪个最大,并根据结果给NUMTYPE变量赋值。涉及到的操作数分别是:原数据:双字节有符号数负数、正数、零的个数:双字节无符号数NUMTYPE:单字节无符号数涉及到的知识点:有符号数判断其符号;无符号数比较大小;循环程序的编制。解:DATASEGMENTNUMTYPEDB?PLUSDW?;正数个数MINUSDW?;负数的个数ZERODW?;零的个数NUMDW1000DUP(?)DATAENDSSTACKSEGMENTPARASTACKSTACKDW256DUP(?)STACKENDSCODESEGMENTASSUMECS:CODE,DS:DATA,SS:STACKSTART:MOVAX,DATAMOVDS,AXMOVSI,OFFSETNUMMOVCX,1000MOVBX,0;零的个数MOVDX,0;负数的个数MOVDI,0;正数个数LP:LODSWTESTAX,8000HJNZMINTESTAX,0FFFFHJ

温馨提示

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

评论

0/150

提交评论