西安理工大学《微机原理及应用a》春微机原理及应用a试题库及答案修改版_第1页
西安理工大学《微机原理及应用a》春微机原理及应用a试题库及答案修改版_第2页
西安理工大学《微机原理及应用a》春微机原理及应用a试题库及答案修改版_第3页
西安理工大学《微机原理及应用a》春微机原理及应用a试题库及答案修改版_第4页
西安理工大学《微机原理及应用a》春微机原理及应用a试题库及答案修改版_第5页
已阅读5页,还剩50页未读 继续免费阅读

下载本文档

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

文档简介

#第四章指令系统4.1.选择1.11.计算机内的“溢出”是指其运算的结果 (D卜A.无穷大或无穷小A.无穷大或无穷小B.超出了内存单元所能存储的数值范围C.超出了寄存器能存储数值的范围C.超出了寄存器能存储数值的范围2.计算机内的“溢出”是指其运算的结果D.超出了该指令所指定的结果能存储的数值范围(D)。A.无穷大或无穷小B.超出了内存单元所能存储的数值范围A.无穷大或无穷小B.超出了内存单元所能存储的数值范围C.超出了寄存器能存储数值的范围D.超出了该指令所指定的结果能存储的数值范围D.D.0~32768(C)。D.1024D.TFD.DFD.IF)中断。D.单步.16位二进制无符号数的数值范围是(A。A.0~65535 B.0~65536 C.0~32767.最大的10位无符号二进制整数转换成十进制数是A.51 B.512 C.1023.ADD指令不能影响标志寄存器的 (D)位。TOC\o"1-5"\h\zA.ZF B.SF C.CF.INC指令不能影响标志寄存器的(C虺。A.ZF B.SF C.CF.DEC指令不能影响标志寄存器的 (C股。A.ZF B.SF C.CF.在执行DIV或IDIV指令发生错误时会产生(BA.线路故障 B.内部 C.外部.在执行ADD或SUB指令发生溢出错误时(A)。A.不产生任何中断 B.会产生内部中断C.会产生外部中断 D.会产生单步中断.完成同指令XCHGAXBX相同功能的指令或指令序列是(D)。A.MOVAX,BX B.MOVBX,AXC.PUSHAX D.MOVCX,AXPOPBX MOVAX,BXMOVBX,CX.顺序执行PUSHEAX和POPEBXM条指令,其功能等同于(B)A.MOVEAX,EBX B.MOVEBX,EAXC.XCHGEAX,EBX D.XCHGEBX,EAX.目前在微机中最普遍采用的字符的编码是(B)。A.BCD码 B.ASCII码 C.余三码 D,格雷码.已知X、Y的补码分别为11101011B、00001010B,求X+Y的补码等于(C)。A.10100001B B.11011111B C.11110101B D.溢出.计算机中(D)不能直接表示有符号数。A.原码 B.补码 C反码 D.BCD码.下列字母中,ASCII码值最小的是(A)。A.K B.Y.当执行完下列指令序列后,标志位MOVAL,0C4HADDAL,9DHA. 0,0 B.0,1C.a D.iCF和SF的值为(C)。C.1,0 D.1,1名词解释Programflowcontrolinstructions:程序流程控制指令OFFSETOperator:在汇编阶段取得变量的偏移地址。LoopCounter:循环计数器,一般用ECX作计数器,在LOOP循环中每次减1。PseudoCode:伪代码,又称虚拟代码,是高层次描述算法的一种。SingleDimensionArray:一位数组ConditionalLoopInstructions:条件循环指令利,用条件转移指令决定是否进行循环Arithmeticinstructions:算数指令JumpsBasedonUnsignedComparisons:无条件转移比较判断.VAR是数据段中定义的字变量,指令MOVAX,VAR+2是正确的。T.VAR1和VAR2是数据段中定义的字变量,指令 MOVAX,VAR1—VAR2是正确的。T.VAR1和VAR2是数据段中定义的字变量,指令 MOVAX,VAR1+VAR2是正确的。FTOC\o"1-5"\h\z.执行乘法指令IMULsrc时,运算结果不会产生溢出。 T.执行乘法指令IMULREGsrc时,运算结果不会产生溢出。 F.定义符号常量时,使用“=”与"EQU'没有区别。F.地址操作符OFFSET1以获取任何寻址方式的内存变量的有效地址。 F.指令“SHL'与"SAL'的功能是等价的。T.指令“SHR与"SAR的功能是等价的。 F.指令“LOOPLable”与“DECECXJNZLable”的功能是等价的。 F.32位机不能完成64位整数加法运算。F.只有补码才能表示有符号数。 F.指令“LEA'可以获取任何寻址方式的内存变量的有效地址。 T.指令“LEA'可以实现求两个寄存器与一个立即数三个数之和的功能。 T.堆栈内部中的数据是无法修改的。 F44填空.顺序执行指令"XOREAX,EAX和“SUBEAX,1后,EAX=0,CF=0。.数据段有语句“BUFDWORD10hDUP(3DUP(2,?),3,4,5)”,则用“LENGTHOFBUF”会得到数值为144,用“SIZEOFBUF'会得到数值为 576_。.已知AL=01100001B,执行指令“ANDAL,5FH'后,AL=41H;如果AL的内容是某个ASCII码,则代表字符一A-。.已知AL=01000001B,执行指令“ORAL,20H”后,AL=61H_;如果AL的内容是某个ASCII码,则代表字符—a—。.设字长为八位,一128补=80_H,—1补=FFH。.已知:寄存器AX=7836H,指令:TESTAX,9A5EH执行后,OF=0,SF=0。.已知:寄存器AX=7836H,指令:CMPAX,9A5EH执行后,AX=DDD8H,OF=0_。.要测试AX的第五位是否为1,使用指令ANDAXFF1FH;若要将AL的第五位置为1,使用指令ORAL1OH。(说明:最低位为第0位。).已知:寄存器AX=9A5EH,指令:NEGAX执行后,OF=0,SF=0。.已知:寄存器EAX=65536,EBX=32768指令:DIVEBX执行后,EAX=2贝U指令:DIVEBX执行前EDX的值应为0,指令:DIVEBX执行后EDX=__0__o.已知:寄存器AL=-1,指令:MOVSXBX,AL执行后,BX=__FFFF_H;指令:MOVZXCX,AL执行后,CX=__00FF__Ho.顺序执行指令序列“XOREAX,EAX,DECEAX,ADCEAX。后,CF=_0_,ZF三0_。.顺序执行指令序列“XOREAX,EAX,SUBEAX,1,ADCEAX。后,CF=_1_,ZF=_1__。.已知:寄存器AL=10,BL=-10,指令:MULBL执行后,AX=__01B4__H;而若将指令改为:IMULBL则执行后AX=_1064__H;.若要将AX的第五位和第九位置为0,使用指令_ANDAX,FEEFH__若要将AX的第五位和第九位置反,使用指令 _ORAX,0110H_。(说明:最低位为第0位。)4.5.简答题.乘除法运算针对无符号数和有符号数,有两种不同的指令。只有一种指令的加减法如何区别无符号数和有符号数运算?答:加减法不区别无符号数和有符号数,但根据运算结果分别设置标志寄存器的 CF和是SF标志,可利用CF和SF进行区别。.逻辑与运算为什么也称为逻辑乘?答:逻辑与运算规则是:1八1=1,其他均为0,逻辑与运算规则类似二进制的乘法,所以称其为逻辑乘。.简述逻辑运算指令怎么实现复位、置位和求反功能?答:实现复位指令:ANDAX0 ;将AX里的数值为0实现置位指令:ORAXFFFF;给预置位置为1再与要比较的数作OR运算实现求反指令:XORAXFFFF;将目的操作数与全1作异或运算。.在处理一维数组时,通常可以采用哪些寻址方式?各自的特点是什么?答:立即数寻址:指令需要的操作数紧跟在操作码之后作为机器指令代码的一部分并随着处理器的取指操作从主存进入指令寄存器。 特点:速度快不需要转换地址,但寻址范围小;寄存器寻址:指令的操作数存放在处理器的寄存器中。 特点:寻址方式简单快捷,是最常使用的寻址方式;存储器寻址:寻址主存中存储的操作数就称为存储器寻址。 特点:需要至少两次访存,寻址方式多,地址范围大。.通常在什么情况下需要使用 MOVSXMOVZX指令?答:对无符号数,在前面加零实现零位扩展。对应指令 MOVZX;对有符号数进行符号扩展,即用一个操作数的符号位(最高位)形成另一个操作数,对应指令 MOVSX。.通常在什么情况下需要使用 PTR类型操作符?举例说明。答:如在指令“MOVEAX,DWORDPTRARRAY,EAX是双字,变量ARRAYS定义为字量,两者类型不同,MOV指令不允许不同类型的数据传送,利用PTR改变ARRAY勺类型,将其传送给EAX..ES幅通用寄存器,是否可以随意的修改 ESP的值?答:不可以,堆栈段的范围由堆栈执政寄存器ESP的初值确定,这个位置就是堆栈的底部(不再变化),因此不能随意改变ESP的值。修改可能会导致栈里内容丢失,引起异常。.大小写字母转换的规律是什么?给出转换的公式。答:大小写字母转换利用它们的ASCII码相差20H。SUBBL20HS现小写字母转换为大写; ADDBL20H实现大写字母转换为小写。.ESP是通用寄存器,是否可以随意的修改 ESP的值?答:不可以,堆栈段的范围由堆栈执政寄存器ESP的初值确定,这个位置就是堆栈的底部(不再变化),因此不能随意改变ESP的值。修改可能会导致栈里内容丢失,引起异常。第五章汇编语言程序设计5.1.选择.循环指令LOOP终止循环的条件是(A)。A.ECX=0B.ECX=0且ZF=0CEC好0,且ZF=0D.EC冷0,或ZF=1.循环指令LOOPNZ终止循环的条件是(A)。A.ECX=0,或ZF=1B.ECX=0且ZF=0C.EC存0,且ZF=0D.EC存0,或ZF=1.LOOP指令执行时,隐含计数器是(C)。A.ESP B.EBX C.ECX D.EDI.当A>B时转移的条件转移指令为(A、B为无符号数)(A)。A.JA B.JAE C.JG D.JGE.当A>=B时转移的条件转移指令为(A、B为有符号数)(D)。A.JA B.JAE C.JG D.JGE.条件转移指令JCLabel的测试条件是(D)。A.ZF=1 B.SF=1 C.OF=1 D.CF=1.若主程序通过堆栈向子程序传递了 3个参数,子程序返回主程序时,在子程序中清除堆栈中3个参数正确的RET指令是(D)。A.RET3*1 B.RET3*2C.RET3*3 D.RET3*4.主程序通过堆栈向子程序传递了 3个参数,子程序调用结束后,在主程序中清除堆栈中 3个参数正确的指令是( D)。A.ADDESP9.条件转移指令A.ADDESP9.条件转移指令JZA.ZF=13*2D.ADDEBP3*4D.CF=1Label的测试条件是(A)。B.SF=1 C.OF=1.利用堆栈传递子程序参数的方法是固定的, 若主程序通过堆栈向子程序传递了 3个参数,则在子程序中,主程序中最后一个被压入栈中的参数可以用(D)的形式来访问。A.[EBP-4] B.[EBP-8] C.[EB丹4] D.[EBP+8].通过堆栈传递参数,在子程序中使用 EBP间址取得参数的原因是(C)。A.EBP没有被占用 B.EBP间址速度较快C.EBP'用址默认的段是堆栈段 D.EBP是基址指针.通过寄存器传递参数比通过堆栈传递参数的优点是(B)。A.能传递更多得参数B.存取效率高 C.能确保正确调用D.没有副作用.利用堆栈传递子程序参数的方法是固定的, 在子程序中,修改参数(C)可以改变子程序的返回地址。A.[EBP-4] B.[EBP-8].在用A.[EBP-4] B.[EBP-8].在用LOOPLabel指令构成的循环中,若次。A.10 B.0.在用LOOPLabel指令构成的循环中,若“SUBECX,2'指令,则循环体将被执行(C.[EB-4] D.[EBP+8]ECX的初值为—10,则循环体将被执行(D)C.100 D.>100ECX的初值为10,在LOOPLabel指令前有一条D)次。A.10B.5C.4D.>10000A.10B.5C.4D.>10000名词解释判断TOC\o"1-5"\h\z.指令指针或者还包括代码段寄存器值的改变将引起程序流程的改变。 T.JMP指令对应高级语言的GOTO语句,所以不能使用。F.因为条件转移指令Jcc要利用标志作为条件,所以也影响标志。 F.JA和JG指令的条件都是“大于”,所以是同一个指令的两个助记符。 F.控制循环是否结束只能在一次循环结束之后进行。 F.介绍LOOP指令时,常说它相当于DECEC*口JNZ两条指令。但考虑对状态标志的影响,它们有差别。LOOP指令不影响标志,而DEC指令却会影响除CF之外的其他状态标志。T.CALL指令用在调用程序中,如果被调用程序中也有 CALL指令,说明出现了嵌套。 T.子程序需要保护寄存器,包括保护传递入口参数和出口参数的通用寄存器。 F.利用寄存器在主子程序间传递参数,其实质就是利用全局变量来传递参数。 T.子程序采用堆栈传递参数时,只能在主程序中修改 ESP方可保持堆栈的平衡。F.汇编语言中不允许递归调用子程序。 F.与高级语言中的自定义函数不同,汇编语言中的子程序不能将计算的结果返给主程序 F.汇编语言中,子程序嵌套调用就是递归调用。 F.在LOOP指令构成的循环结^^中,允许修改 ECX的值。T.指令CALL或RET的执行,不改变程序执行的流程。 F.在软件中只使用一次的功能编写成子程序完全没有必要。 F.在执行CALL指令时,硬件自动将断点地址压入堆栈中。 T.在高级语言中,若多重循环出现 “交叉”的错误,编译系统通常会给出提示来。若汇编语言程序中也出现“交叉”错误时,汇编程序也会给出提示来。 F54填空.JMP指令根据目标地址的寻址方式,可以分成三种类型:相对寻址、 直接寻址和间接寻址。.假设在平展存储模型下, EBX=1256H,双字变量TABLE的偏移地址是20A1H,线性地址32F7H处存放3280H,执行指令“JMPEBX后EIP=1256H_,执行指令“JMPTABLE[EBX]后日P=3280H。.“CMPEAX,3721片指令之后是JZ指令,发生转移的条件是EAX=_3721H_,此时ZF=_1__。.JMP指令根据目标地址的寻址方式, 可以分成三种类型: 相对寻址、」'可接寻班和直接寻址,通常相对寻址方式使用的最多。.循环结构程序一般有三个部分组成, 它们是—循环初始—,循环体和循环棒制_部分。.条件转移指令JELabel的测试标志位是_ZF__,条件转移指令JNOLabel的测试标志位是OF。.过程定义开始是“TESTPROC语句,则过程定义结束的语句是__TESTENDP_。宏定义开始是“DISPMACRO语句,则宏定义结束的语句是 _ENDM_O.利用堆栈传递子程序参数的方法是固定的, 在子程序中通常是利用寄存器__EBP_>访问栈中的参数,采用的寻址方式是 间接寻址。.调用程序和子程序之间的信息传送称为—参数_而当传递的信息很大时通常通过 堆栈来进行传递。.在LOOPLabel指令构成的循环中,若ECX的初彳1为0,则循环体将被执行_1_次;若ECX的初值为一100,则循环体将被执行(232-100)__次。.只要堆栈空间允许,子程序嵌套调用的层次 无限制一子程序也可调用本身,这称为_>归调用_。.通常在子程序的开始部分要保护 _子程序中用到的__寄存器,但用做出口参数的通用寄存器则 不能保护和恢复 。.通常在子程序中的参数分为两种类型,分别称为 一值参__和 形参。.通常在子程序中至少要有一条 返回—指令用于返回主程序,而汇编程序在汇编时并不检测__返回_指令是否存在。.在主程序中,采用"JMPsubName”指令可以__转到_子程序subName,但子程序结束后返回地址不确定。简答题.是什么特点决定了目标地址的相对寻址方式应用最多?答:当同一个程序被操作系统安排到不同的存储区域执行时,指令间的位移没有改变,目标地址采用相对寻址可方便操作系统的灵活调度。.将下面C语言程序的代码片段转换为功能等价的汇编语言代码片段, 其中sign与sinteger均为双字变量。if(sinteger=0)sign=0;elseif(siteger>0)sign=1;elsesign=—1;答:.data ;数据段定义两个双字变量(此处可以省略)sign dword ?sintegter dword ?.code ;代码段cmpsinteger,0jneoutjudge ;若/、大于则跳转movsign,0 ;sinteger==0outjudge:cmpsinteger,0jlinjudge ;右小于则跳转(将sinteger看作有符号数);若看作无符号数用jb来判断movsign,1 ;sinteger>0injudge:movsign,-1 ;sinteger<0done: ;结束.将下面C语言程序的代码片段转换为功能等价的汇编语言代码片段,其中ch1与caps均为字节变量。

if(ch1>= 'a'&&ch1<caps==0;if(ch1>=A''&&ch1<='caps=1;答:;:=.cczde)cmpZ')jbcmpjamovoutjudge:cmpjbcmpjamovdone:;代码段'a'&&ch1<:A'&&ch1<Z')=,ch1,aoutjudgech1,zdonecaps,0ch1,Adonech1,Zdonecaps,1;if(ch1>=;if(ch1>=;结束4.将下面C语言程序的代码片段转换为功能等价的汇编语言代码片段,其中sum与i变量均为双字变量。z')sum=0;for(i=1;i<=100;i++)if(i%2==0)sum=sum+i;答:;.code ;代码段moveax,0 ;初始化eax=0xorecx,ecx;用作计数器movecx,100xorebx,ebx;相当于i的作用movebx,1 ;初始化eax=1loop:pusheax ;保存eax的值mov eax , ebxxor edx , edx ;用来判断余数div 2 ;eax除以2cmpedx,0;edx=eaxmod2jznext ;是偶数则跳转修改参数popeax ;,恢复eax的值jmpnext_inext: popeax ;“恢复eax的值addeax,ebx;eax=eax+ebxnext_i:incebxjmploop ;当ecx<>0时继续循环done:movsumeax ;结束.在N分支结构中,至少要使用N—1条JMP指令,它的作用是什么?答:等同于switch语句中的break用来跳到分支出口。.不使用CALL指令是否可以实现子程序的调用?若可以,举例说明。答:可以实现,通过栈来实现。将子程序入口地址压栈通过EBP+4来修改PC值来返回原程序,也就实现子程序的调用。.写出3条以上的可以改变程序执行流程的指令,并简述其用途。答:JMP 无条件跳转CALL 调用子程序RET 返回到调用函数或操作系统INT中断指令.在子程序中,可否改变子程序的返回地址?若可以,则举例说明。答:可以改变,通过修改栈中的 EBP+4的内容。.为什么特别强调为子程序加上必要的注释?答:完整的子程序注释可方便程序员调用该子程序,子程序注释包括子程序名、子程序功能、入口参数和出口参数、调用注意事项和其他说明等。应用题.能被4整除但不能被100整除,或者年被400整除的年份是闰年。编程写一个完整的程序,求出2012年〜2099年中的所有闰年年份,并把它们存放在数组 Lyear中。;Win32ConsoleApplication;能被4整除但不能被100整除,或者年被400整除的年份是闰年。;编程写一个完整的程序,求出2012年〜2099年中的所有闰年年份,;并把它们存放在数组Lyear中。;目的:学习如何利用条件转移指令构造复杂逻辑运算结构。;算法描述;esi=0闰年个数计数器;ecx=2012年份计数器;;while(ecx<2100); {if(yearmod4=0andyearmod100<>0)or(yearmod400=0)then; {Lyear[esi]=ecx;esi++;};ecx++;;};Lcounter=esi;;采用div指令求余数来判断整除性,采用带比例因子的相对寻址处理数组。includeio32.inc.dataLyearLcounterdworddword100dup⑺0.codemainprocxoresi,esi;esi闰年个数计数器,兼做 Lyear下标。movecx,2012;ecx年份计数器。.while(ecx<2100)moveax,ecxxoredx,edxmovebx,400divebxcmpedx,0jzleap;ifyearmod400=0thengotoleap

moveax,ecxxoredx,edxmovebx,4divebxcmpedx,0jnznext;ifyearmod4<>0thengotonextmoveax,ecxxoredx,edxmovebx,100divebxcmpedx,0jznext;ifyearmod100=0thengotonextincesi.endwmovmov eax,ecxcalldispuid ;输出,用丁验证。可以删掉calldispcrlf;输出,用丁验证。可以删掉inc ecxLcounter,esimoveax,esiLyear[esi*4],ecxmovnext:leap:calldispuidcalldispcrlfretmainendpendmain;endofmain;endofassembly;leap:calldispuidcalldispcrlfretmainendpendmain;endofmain;endofassembly2.编程写一个完整的程序,求出2〜100之间的所有素数,并将它们存入Prime2.编程写一个完整的程序的个数存入变量Pcounter中。Win32ConsoleApplication编程写一个完整的程序,求出2〜100之间的所有素数,并将它们存入Prime数组中,素数的个数存入变量 Pcounter中。目的:学习如何利用条件转移指令构造条件循环结构 ,多重循环的构造方法。算法描述0.Pcounter=0;i=2to100doifiisprimenumberthenPrime[Pcounter++]=i细化1.1如下:j=2toi/2doifimodj=0thengotonextiPrime[Pcounter++]=i

;合理分配寄存器,esi=0,esi素数个数计数器,兼做Prime下标;;采用带比例因子的相对寻址处理数组。;i=ebx,j=ecx,edxeax做被除数,ecx做除数。includeio32.inc.dataPrimePcounterdword 100dup⑺dword?.codemain procxoresi,esi ;esi素数个数计数器,兼做Prime下标。movebx,2iLoop: cmpebx,100 ;i循环入口jadonemovecx,ebxshrecx,1 ;j=i/2jLoop: cmpecx,2 ;j循环入口jbprimemoveax,ebxcdq;xoredx,edxdivecx ;被除数送edxeax,32位除法oredx,edx ;cmpedx,0jznexti ;ifimodj=0thengotonextidececxjmpjLoopprime:movPrime[esi*4],ebxincesimoveax,ebxcalldispuid ;输出,用于验证。可以删掉calldispcrlf ;输出,用于验证。可以删掉nexti: incebx ;i=i+1jmpiLoopdone: movPcounter,esiret;返回操作系统main endp;endofmainend main;endofassembly.编程写一个完整的程序,将数组aray中的元素按逆序存放,要求程序中附加的变量最少。数据段的定义如下:.dataaraydword12,4,168,122,—33,56,78,99,345,66,—5;逆置一个一维数组;算法描述:;left,right分别指向数组的第一个和最后一个元素,采用首尾交换。;1.left=0,right=n-1;;2.whileleft<rightdo; {swapa[left],a[right];left++;right--};;合理分配寄存器:left=esi,right=edi;采用带比例因子的相对寻址处理数组。includeio32.inc.dataarray dword 12,4,168,122,-33,56,78,99,345,66,-5count equ lengthofarray.codemainprocmovesi,0;left指针movedi,count-1;right指针.while(esi<edi);循环入口,注意:两个内存变量不能比较 !moveax,array[esi*4]xchgeax,array[edi*4]movarray[esi*4],eaxincesi ;移动指针指向下一个元素decedi ;移动指针指向下一个元素.endwmovecx,count ;以下的loop循环输出,用于验证。可以删掉movesi,offsetarrayagain:moveax,[esi]calldispsidcall dispcrlfaddesi,4loopagainret;returntoWindowsmain endp ;endofmainend main ;endofassembly.编程写一个完整的程序,求数组aray中的最大值与最小值,并将它们分别存入max和min单元中。数据段的定义如下:.dataaray dword 12,4, —168,122,-33,56,78,99,345,-66,-5min dword ?max dword ?;Win32ConsoleApplication;findmax,min;目的:学习简单的关于分支与数组处理的算法。;算法描述;1.max=min=a[0];;2.fori=1ton-1do; 2.1ifmax<a[i]thenmax=a[i];; 2.2ifmin>a[i]thenmin=a[i];合理分配寄存器:采用loop循环,ecx=lengthofarray-1;max=eax=a[0],min=ebx=a[0];;esi=1,做下标,采用带比例因子的相对寻址处理数组。.686.modelflat,stdcalloptioncasemap:noneincludelibmsvcrt.libprintfPROTOC:dword,:vararg.dataarraydword12,4,-168,122,33,56,78,99,345,-66,-5maxdword?mindword?fmtStrbyte'max=%dmin=%d',13,10,0 ;格式描述串.codemainprocmovecx,lengthofarray-1moveax,array[0];eax:maxmovebx,eax ;ebx:minmovesi,1 ;数组下标again:cmpeax,array[esi*4]jgesmall ;ifmax<a[i]thenmax=a[i]moveax,array[esi*4];注思:转换成汇编语百时米用的是small:cmpebx,array[esi*4]jlenextmovebx,array[esi*4]next:incesiloopagainmovmax,eaxmovmin,ebxinvokeprintf,offsetfmtStr,eax,ebxret;returntoWindowsmainendp;endofmainendmain;endofassembly>=并分别将它们存入.编程写一个完整的程序统计 msg中的空格的个数与小写字母的个数,并分别将它们存入space单元与char单元中。数据段的定义如下:.datamsgbyte'IloveXUT!',13,10,0spacedword?lowercasedword?;Win32ConsoleApplication;统计msg串中的空格的个数与小写字母的个数 ,;并分别将它们存入space单元与lowercase单元中。;目的:学习简单的关于分支与数组处理的算法。;学习if('a'<=a[i])&&(a[i]<='z')lowercase++;中;逻辑与表达式在汇编语言中的实现。;算法描述;1.space=lowercase=0;;2.fori=0ton-1do; 2.1ifa[i]==''thenspace++;; 2.2if'a'<=a[i]<='z'thenlowercase++;;合理分配寄存器:采用100P循环,ecx=lengthofmsg-1;space=eax=O,lowercase=ebx=0,esi=offsetmsg,做指针.686.modelflat,stdcalloptioncasemap:noneincludelibmsvcrt.libprintfPROTOC:dword,:vararg.datamsg byte'IloveXUT!',13,10,0space dword?lowercasedword?fmtStrbyte'space=%dlowercase=%d',13,10,0;格式描述串.codemainprocmovecx,lengthofmsg-1xoreax,eaxmovebx,eaxmovesi,offsetmsgagain:mov dl,[esi]cmp dl,''jnz letterinc eax试字母。letter: cmp dl,'a'jb nextcmp dl,'z'ja nextinc ebx;space=eax=0;lowercase=ebx=0指向msg首地址;ifa[i]==''thenspace++;;注意:转换成汇编语言时,测试的是不是空格时则转去测;注思:测试的是a[i]<'a'。;注思:测试的是a[i]>'z'。;lowercase++loopagainmovspace,eaxmovlowercase,ebxinvokeprintf,offsetfmtStr,eax,ebxret;returntoWindowsmainendp;endofmainendmain;endofassembly.编程写一个完整的程序,将字符串 msg中所有的小写字母转换为大写字母。数据段的定义如下:.datamsgbyte'IloveXUT!',13,10,0;Win32ConsoleApplication;将字符串msg中所有的小写字母转换为大写字母;目的:学习简单的关于分支与数组处理的算法。;学习if('a'<=a[i])&&(a[i]<='z') a[i]=a[i]-0x20;中;逻辑与表达式在汇编语言中的实现。;算法描述;1.fori=0ton-1do;if'a'<=a[i]<='z'thena[i]=a[i]-20H;;小写字母与大写字母的 ASCII码的差值为20H,也可以用;a[i]=a[i]&0x5f;合理分配寄存器:采用100P循环,ecx=lengthofmsg-1;esi=offsetmsg,做指针。.686.modelflat,stdcalloptioncasemap:noneincludelibmsvcrt.libprintfPROTOC:dword,:vararg.datamsg byte'IloveXUT!',13,10,0fmtStrbyte'msg: %s',13,10,0;格式描述串.codemainprocmovecx,lengthofmsg-1movesi,offsetmsg;指向msg首地址again:movdl,[esi]cmpdl,'a'jbnext;注思:测试的是a[i]<'a'。cmpdl,'z'janext;注思:测试的是a[i]>'z'。submovdl,20h ;anddl,5fh[esi],dlnext:inc esi ;指向卜一个字符loopagaininvokeprintf,offsetfmtStr,offsetmsgret ;returntoWindowsmainendp;endofmainendmain;endofassemblyarray是一无符号数数组,数据段的定义如下。要求:编程写一个完整的程序求出数组元素中偶数的和,并将它存入 esum单元中。.dataarray dword 12,34,123,78,43,234,79,86,98,20esum dword ?;Win32ConsoleApplication;求数组中所有偶数元素的和。;目的:学习简单的关于分支与数组处理的算法。;算法描述;1.esum=0;;2.fori=0ton-1do;ifa[i]isevennunberthenesum=esum+a[i];;判断偶数,采用test指令测试最低位。;合理分配寄存器:采用loop循环,ecx=lengthofarray;esum=eax=0,esi=0,做下标,采用带比例因子的相对寻址处理数组。.686.modelflat,stdcalloptioncasemap:noneincludelibmsvcrt.libprintfPROTOC:dword,:vararg.dataarray dword 12,34,123,78,43,234,79,86,98,20esum dword ?fmtStrbyte' esum=%d',13,10,0;格式描述串.codemainprocmovecx,lengthofarrayxoreax,eax ;esum=eax=0movesi,eax ;数组下标again:mov ebx,array[esi*4]testebx,1jnz next ;ifa[i]isevennunberthenesum=esum+a[i];addeax,ebx ;注忌:一个数测试。next: incesiloopagainmov esum,eaxinvokeprintf,offsetfmtStr,esumret ;returntoWindowsmainendp;endofmainendmain;endofassembly8.“回文串”是转换成汇编语言时,测试的是不是偶数时则取下个正读和反读都一样的字符串,比如“eye、level、noon一个程序测试一字符串是否是个字符的子程序为:dispc,“回文” ,是“回文”则显示“Y”,否则显示“N”。入口参数:AL那显示个字符的SACII码。等。请写显不一Win32ConsoleApplicationWin32ConsoleApplication测试一字符串是否是“回文”palindrome,是“回文”则显示“Y”,否则显示“N”。;算法描述:;left,right分别指向串的第一个和最后一个元素,采用首尾比较。;1.left=0,right=n-1,flag='Y';;2.whileleft<rightdo;ifa[left++]<>a[right--]then; {flag='N';break;};3.printfflag;合理分配寄存器:left=esi,right=edi,flag=al='Y';采用相对寻址处理数组。includeio32.inc.datamsgcountbyteequ'level',0lengthofmsg.codemainprocmovesi,0movedi,count-2moval,'Y'.while(esi<edi);left指针;right指针,串长不包括结束标志 0;flag=al='Y';循环入口,注意:两个内存变量不能比较movah,msg[esi];left=esicmpah,msg[edi];right=edijenextmoval,'N'jmpnext: incdecdisplayesiedi;移动指针指向下一个元素;移动指针指向下一个元素.endw

display:calldispccalldispcrlfret;returntoWindowsmain endpend mainmain endpend main;endofmain;endofassembly10EAX=M,9.回文是指正读和反读都一样的数或文本。例如:11、121、12321等,编写程序,二到10000之间所有回文数并输出。显示一个无符号数的子程序为: dispuid,10EAX=M,要显示无符号数的值。;Win32ConsoleApplication;求10到10000之间所有回文数并输出。;目的:学习如何利用条件转移指令构造条件循环结构 ,多重循环的构造方法。;算法思想:采用div指令把一个整数N的每一位分离出来,注意,;此时得到的是N的各个位的逆序序列。然后,将这个逆序序列再组合成一个新的整数;若M=N,则N是回文数。;算法描述;1.ecx=10to1000do;1.1eax=ecx被除数;ebx=10除数;esi=0新生成的数的初值。; 1.2whileeax<>0do; 1.2.1edx=0;divebx;esi=esi*10+edx; 1.3ifecx=esithenprintesiincludeio32.inc.codemainprocmovecx,10movebx,ecx ;ebx=10除数.repeatxoresi,esi ;esi=0,是新生成的数的初值moveax,ecx;eax被除数.while(eax!=0)xoredx,edx ;edx被除数的高32位div ebximulesi,10add esi,edx ;逆序生成新数,esi=esi*10+edx.endwcmpesi,ecxjnenextmoveax,ecxcalldispuidcalldispcrlfnext: incecx.until(ecx>10000)ret;returntoWindowsmain endp ;endofmainend main ;endofassembly.编程写一个名为Prime的子程序,用于测试一个整数是否是素数,主子程序间的参数传递通过堆栈完成。调用Prime子程序求出2〜100之间的所有素数,并将它们存入Parray数组中,素数的个数存入变量 Pcounter中。;Win32ConsoleApplication;利用子程序求2~100之间的所有素数。;目的:学习子程序的构造与参数的传递方法。includeio32.inc.dataPrime dword 100dup⑺Pcounter dword ?flagbyte?.codemain procxor esi,esi;esi素数个数计数器,兼做Prime下标。movecx,2 ;循环控制变量.while(ecx<=100)pushoffsetflag;flag的地址进栈,传地址pushecx ;ecx进栈,传值callprimecmpflag,1jnenextmovPrime[esi*4],ecxincesimoveax,ecxcalldispuid输出,用于验证。可以删掉calldispcrlf;输出,用于验证。可以删掉next:incecx.endwmovPcounter,esiret;returntoWindowsmain endp ;endofmainprime proc;function:判断一个无符号整数 x是否是素数;Receives:从栈获取无符号整数x及标志变量flag的地址;Returns:ifxisprimenumberthenflag=1elseflag=0;注意:[ebp+8]是最后一个压入栈中的参数 !;以[ebp+8]为基准,从栈中获取其它的参数。;算法描述:;1.flag=1;

;2.fori=x/2downto2do; ifxmodi=0then{flag=0;break;};注意合理的分配使用寄存器, ecx=i,兼做除数。;edx,eax做被除数,ebx=flag的地址,edi=x,用于暂存xpushebpmovebp,esp;建立访问栈参数的指针基准pusheax;保护子程序中要使用的寄存器pushebxpushecxpushedxpushedimovebx,[ebp+12]movbyteptr[ebx],1moveax,[ebp+8]movedi,eaxmovecx,eaxpushedimovebx,[ebp+12]movbyteptr[ebx],1moveax,[ebp+8]movedi,eaxmovecx,eaxshrecx,1.while(ecx>=2);变量flag的地址;flag=1;eax=x;edi=x,用于暂存x;ecx=x/2moveax,edi;eax=x,注意:此句极易漏掉!导致逻xor edx,edx;被除数送edx,eax,32位除法divecx ;div指令执行后eax=商,edx=余数oredx,edx;cmpedx,0jnznext;ifeaxmodecx<>0thengotonextmovbyteptr[ebx],0;flag=0jmprestorenext:dececx.endwrestore:popedi;恢复子程序中使用过的寄存器popedxpopecxpopebxpopeaxpopebpret2*4;清理栈中的参数primeendpendmain;endofassembly.编程写一个名为Gcd的求两个数最大公约数子程序,主子程序间的参数传递通过堆栈完成。调用Gcd子程序求出三个双自变量:dvar1、dvar2与dvar3的最大公约数并输出。显示一个无符号数的子程序为:dispuid,入口参数:EAX要显示无符号数的值。;Win32ConsoleApplication;利用子程序求3个无符号整数的最大公约数。;目的:学习子程序的构造与参数的传递方法。.686.modelflat,stdcalloptioncasemap:noneincludelibmsvcrt.libprintfPROTOC:dword,:vararg.datadvar1dword2012dvar2dword128dvar3dword456dgcddword?;存放2个无符号整数的最大公约数fmtStrbyte'gcd(%d,%d,%d)=%d',13,10,0.codemain procpushdvar1pushdvar2;Z参数dvar1,dvar2进栈,传值pushoffsetdgcd;dgcd的地址进栈,传地址callGcd;dgcd=dvar1,dvar2的最大公约数pushdvar3pushdgcd ;参数dvar3,dgcd进栈,传值pushoffsetdgcd;dgcd的地址进栈,传地址callGcdinvokeprintf,offsetfmtStr,dvar1,dvar2,dvar3,dgcdret;returntoWindowsmainendp;endofmainGcdproc;function:求2个无符号整数的最大公约数。;Receives:从栈中获取无符号整数 a,b及; 存放最大公约数变量gcd的地址;Returns:gcd=无符号整数a,b的最大公约数。;注意:[ebp+8]是最后一个压入栈中的参数!;以[ebp+8]为基准,从栈中获取其它的参数。;算法思想:采用欧几里得算法。 gcd(a,0)=a;; gcd(a,b)=gcd(b,amodb);算法描述:;1.whileb<>0do; {r=amodb;a=b;b=r;};2.gcd=a;;注意合理的分配使用寄存器, edx,eax做被除数;ebx=gcd的地址,eax=a,ecx=bpushebpmovebp,esp;建立访问栈参数的指针基准pusheax;保护子程序中要使用的寄存器pushebxpushecx

pushedxmovebx,[ebp+8];ebx=变量gcd的地址movecx,[ebp+12];ecx=bmoveax,[ebp+16];eax=a.while(ecx!=0)xor edx,edx;被除数送edx,eax,32位除法divecx ;div指令执行后eax=商,edx=余数moveax,ecx;a=bmovecx,edx;b=r,edx=余数.endwmov[ebx],eax;gcd一取人公约数restore:popedx;恢复子程序中使用过的寄存器popecxpopebxpopeaxpopebpret3*4 ;清理栈中的参数Gcdendp;endofGcdendmain;endofassemblyY",否SACII码。.Y",否SACII码。则显示“N”。显示一个字符的子程序为: dispc,入口参数:AL那显示个字符的;Win32ConsoleApplication;串模式匹配算法,求子串在源串中第一次出现的起始位置。;若子串在源串中出现则显示“ Y”,否则显示“N”。;算法思想:采用人工串匹配的方法,就是从左向右扫描,;当源串没有结束时,从源串的第 i个字符开始与子串进行比较,;若相等,则继续比较后续字符,否则从源串的第 i+1;个字符开始重新与字串进行比较。这种算法的效率非常低,;一种朴素串模式匹配算法改进的算法称为 KMP算法。;算法描述:;1.i=j=0;数组下标从0开始,sStr为源串,tStr为子串;2.while(i<sLen&&j<tLen)do; ifsStr[i]==tStr[j] then; {i++;j++}; else; {i=i-j+1;j=0;};3.if(j==tlen)then; flag='Y';;else; flag='N';;4.printfflag;合理分配寄存器:i=esi,j=edi,flag=al;采用相对寻址处理数组。;Q:若将此算法改为子程序,如何修改 ?Includeio32.inc.datasStrbyte'Ifyoufindanyerrorintheprogram,youcanDEBUGit.'tStr byte'BUG'sLen equsizeofsStrtLen equsizeoftStr.codemain procxor esi,esi;i=esimovedi,eax;j=edi.while(esi<sLen&&edi<tLen)moval,sStr[esi];从源串中取一个字符cmpal,tStr[edi];与子串中的字符进行比较jnerestartincesiincedijmpeowrestart:subesi,edi ;i=(esi-edi+1)指向源串的第i+1个字符inc esixor edi,edieow:.endw.if(edi==tLen)moval,'Y';子串匹配成功,esi指向子串在源串的起始位置.elsemoval,'N'.endifcalldispccalldispcrlfret;returntoWindowsmain endp ;endofmainend main ;endofassembly.已知一个字符串的长度,剔除其中所有的空格字符。请从字符串最后一个字符开始逐个向前判断、并进行处理。;Win32ConsoleApplication;紧缩字符串算法,从右向左扫描剔除其中所有的空格字符。;算法思想:假设串以0作为结束标志,从右向左扫描 ,遇到空格后,;将其后的所有字符向前移动一个位置,直到首字符为止。;由于串长是动态变化的,所以需要设置三个指针, tailP指向串尾,;扫描用的指针scanP及移动时用的指针 moveP;算法描述:;1.scanP=tailP=sLen-2;数组下标从0开始;2.while(scanP>=0)do;ifsStr[scanP]==''then; formoveP=scanP+1totailPdo; sStr[moveP-1]=sStr[moveP];; tailP--;;else; scanP++;;3.printsStr;;合理分配寄存器:tailP=edi,scanP=esi,moveP=ebx;采用相对寻址处理数组。;Q:若将此算法改为子程序,如何修改?Includeio32.inc.datasStrbyte' ILoveXAUT!',0dh,0ah,0.codemainprocleaeax,sStr;显示处理前的字符串calldispmsgmovedi,lengthofsStr-2;尾指针tailPmovesi,edi ;从右向左扫描工作指针 scanP.whilesdwordptresi>=0;sdwordptresi指示将esi按有符号数处理cmpsStr[esi],20h;检测是否是空格jnznextleaebx,[esi+1];移动字符工作指针 moveP=scanP+1.whileebx<=edi ;循环移动开始moval,sStr[ebx]movsStr[ebx-1],al;字符向前移一个位置incebx.endwdecedi;尾指针tailP向前移一个位置next:decesi ;向左扫描工作指针 scanP向前移一个位置.endwmovbyteptrsStr[edi+1],0 ;串结束标志leaeax,sStr ;显示处理后的字符串calldispmsgret;returntoWindowsmain endp ;endofmainend main ;endofassembly14.编写一子程序,将一个32位二进制数用8位十六进制形式在屏幕上显示出来。采用堆栈方法传递这个32位二进制数,并写主程序验证它。显示一个字符的子程序为: dispc,入口参数:AL成显示个字符的SACII码。

;Win32ConsoleApplication;将一个32位二进制数转换为 8位十六进制,;并在屏幕上显示出来的子程序。;目的:学习子程序的构造与参数的传递方法。includeio32.inc.datadvardword 1234abe8h;tablebyte '0123456789abcdef;采用查表法进行转换.codemainprocpushdvar ;堆栈传递参数callbtoh;returntoWindows;endofmainretmainendpbtohproc;returntoWindows;endofmainfunction:将一个32位二进制数转换为 8位十六进制,并在屏幕上显示出来。Receives:堆栈中获取要转换为十六进制的 32位数Returns:无。算法思想:采用循环左移,一次移动 4位。利用最低4位的值查表,转换为十六进制的数 ASCII码。算法描述:ecx=8;whileecx>0{roreax,4;ebx=eax;eax=eaxand0fh;al=table[eax];printal;eax=ebx;ecx--;}pushebpmovebp,esp;建立访问栈参数的指针基准pushebx;保护子程序中要使用的寄存器push ecxmov ecx,8mov eax,[ebp+8]again:roleax,4;eax的最高的4位移动到最低的4位movebx,eaxandeax,0fh保留eax的最低的4位moval,table[eax]calldispcmoveax,ebxloopagaincalldispcrlfrestorepopecx;恢复子程序中使用过的寄存器popebxpopebpret1*4tablebyte'0123456789abcdef;米用查表法进行转换btohendp;endofBubbleendmain;endofassembly15.编程写一个名为Bubble的冒泡排序子程序,主子程序间的参数传递通过堆栈完成;并写主程序验证它。显示一个无符号数的子程序为: dispuid,入口参数:EAX要显示无符号数的值。;Win32ConsoleApplication;冒泡排序子程序。;目的:学习子程序的构造与参数的传递方法。includeio32.inc.dataarraydword12,4,168,122,-33,56,78,99,345,66,-5countequlengthofarray.codemainprocpushoffsetarray;array的首地址进栈,传地址pushcount ;数组元素的个数进栈,传值callBubblexoresi,esi;以下的while循环用于验证。可以删掉.while(esi<count)moveax,array[esi*4]incesicalldispsidcalldispcrlf.endwret ;returntoWindowsmain endp ;endofmainBubble proc;function:BubbleSort;Receives:从栈获取数组的首地址及元素的个数;Returns:无;注意:[ebp+8]是最后一个压入栈中的参数 !;以[ebp+8]为基准,从栈中获取其它的参数。;BubbleSort的思想:从第一个元素开始,;相邻的两个元素依次进行比较,若关系不对则交换。;这样较小的数就向上移动,而较大的数则向下移动,;这就是冒泡排序的由来。经过N-1次比较,;最大的数被移动到最后一个位置,;这个过程称之为一趟扫描。;显然,经过N-1趟扫描排序过程就结束了;;并且每趟扫描的比较次数比前一趟减少一次。;算法描述:;1.ecx=n-1;;2.whileecx>0; {esi=array;数组的首地址; ebx=ecx;; whileebx>0; {if[esi]>[esi+4]then; swap[esi],[esi+4];; esi=esi+4;ebx--;; }; ecx--;};pushebpmovebp,esp;建立访问栈参数的指针基准pusheax;保护子程序中要使用的寄存器pushebxpushecxpushesipushedimovesi,[ebp+12] ;array的首地址movedi,esimovecx,[ebp+8] ;数组元素的个数dececxagain:movesi,edi;esi=array的首地址movebx,ecx.while(ebx>0)moveax,[esi]cmpeax,[esi+4];比较两相令卜的兀素jlnextxchgeax,[esi+4]mov[esi],eax;交换两个相邻的兀素next:addesi,4;esi指向卜一个兀素

decebx.endwloopagainrestore:popedi;恢复子程序中使用过的寄存器popesipopecxpopebxpopeaxpopebpret2*4;清理栈中的参数Bubbleendp;endofBubbleendmain;endofassembly第六章微机总线6.1.选择地址总线为20位的微处理器可直接寻址的最大范围是(A)。A1MBB16MBC64MBD4GB8086的INTR信号线表示(C)A可屏蔽中断响应A可屏蔽中断响应B不可屏蔽中断 C可屏蔽中断D不可屏蔽中断响应当控制线READY=0寸,应在(C)之间插入等待周期TwAT1和T2之间 BT2和T3之间CT3和T4之间 D任何时候8086的NMI信号线表示(B)A可屏蔽中断响应B不可屏蔽中断C可屏蔽中断D不可屏蔽中断响应8086的READY言号线表示(A)A就绪B复位C时钟D测试8086的HOLD信号线表示(A)A总线请求 B总线响应 C中断请求D中断响应8086的写总线周期在T1状态(B)D检测数据传送D检测数据传送D检测数据传送DD检测数据传送D检测数据传送D检测数据传送D检测数据传送8086的写总线周期在T2状态(C)A完成数据传送 B输出地址 C输出控制信号8086的写总线周期在T3状态(D)A完成数据传送 B输出地址 C输出控制信号8086的写总线周期在T4状态(A)A完成数据传送B输出地址C输出控制信号MB/s的含义是 (B)A总线上每秒传输的最大数据量B总线上每秒传输的最大字节量C总线上每秒传输的二进制位数D总线上每秒传输的十进制位数总线上每秒传输的最大字节量称为 (C)。A总线位宽 B总线字宽C总线带宽 D数据位数C近距离D远距离的数据传送。C近距离D远距离的数据传送。C近距离D远距离B通用的并行总线接口D新外设标准插头A不同类型 B同类型并行通信适用于微机间 (C)A不同类型 B同类型USB是一种(A)A通用的串行总线接口C新型的微机内部总线名词解释.芯片总线:大规模集成电路芯片内部或系统中各种不同器件连接在一起的总线 ..内总线:微机系统中功能单元与功能单元间连接的总线..外总线:微机系统与其外设或微机系统之间连接的总线.总线仲裁:确定使用总线的主模块,目的是避免多个主模块同时使用时占用总线,确保任何时候总线上只有一个模块发送信息..总线带宽:单位时间传送的数据量,也成总线.总线时序:描述总线信号随时间变化的规律以及总线信号的相互作用 ..指令周期:一条指令在处理器中从取指、译码到最终执行完成的过程.总线周期:伴随着数据交换的总线操作.机器周期:完成一个基本工作所需要的时间。.时钟周期:每个时钟脉冲的持续时间。.存储器读:处理器从存储器读取代码或操作数。.存储器写:处理器向存储器写入操作数。.I/O读:存储器从外设读操作数.I/O写:存储器向外设写操作数.ALE:地质所存允许,是一种三态输出高电平有效的信号判断TOC\o"1-5"\h\z.低电平有效是指信号为低电平时候表示信号的功能。 T.处理器读取存储器操作数时和读取代码时,都发生存储器读的总线操作。 T.8086准备好READYS脚输出给存储器或外设有效信号, 表明处理器准备好交换数据了。 F.8086总线周期的T1状态发出地址,属于总线操作的寻址阶段。 T.总线操作的同步时序是指总线操作的各个过程由共用的总线时钟信号控制。 T.总线操作的半同步时序是指总线操作仍由共用的总线时钟信号控制,但慢速模块可以通过等待信号让快速模块等待。 T.总线操作的异步时序是指总线操作需要握手( Handshake)联络(应答)信号控制,总线时钟信号可有可无。T.能够控制总线传输信息的设备称为从设备。 F.处理器引脚是典型的芯片总线。 T.现代微型计算机采用分级总线结构,以适应不同部件的要求。 T.高性能总线都支持数据块传送,即猝发传送。 T.某一时刻可以有多个主模块控制总线。 F.总线类似于一个“公路网”,通过不同的总线把系统内的各个模块连接起来。 T.总线信号并不是各自独立发挥作用,而是相互配合实现总线操作。 T.处理器通过引脚对外操作主要有存储器读,存储器写, I/O读,I/O写四种操作。T填空.某个处理器具有16个地址总线,通常可以用 Ad表达最低位地址信号,用A!5_表达最高地址信号。.8086有3个最基本的读写控制信号,它们是M/IO、/WR和/RD。.8086执行指令"MOVAX,[BX]”时,在其引脚上将产生存储器读总线操作;执行指令“MOV[BX],AX'时,在其引脚上将产生 存储器写总线操作:.8086无等待的总线周期由 4个T状态组成,Pentium无等待的总线周期由 2个T状态组成。.占用总线进行数据传输,一般需要经过总线请求和仲裁、 寻址、数据传送和结束4个阶段。.总线按照信号分类可以分为数据总线, 地址总线,控制总线。.总线按照信号分类可以分为 数据总线,地址总线,控制总线。.总线按照数据传输方式分为 并行总线和串行总线。.8086处理器的数据总线为16位,时钟频率为5MHz,那么实现一次16为数据传送的总线带宽是_20M106b/s。而对于系统时钟频率为 66MHz的Pentium处理器来说,其2-1-1-1的猝发传送周期用5个时钟传送32个字节数据,则其总线带宽是 422.4MB/S。.通常情况下,我们用AB表示地址总线,那么DB表示数据总线,用CB—表示控制总线。.位于集成电路内部的总线被称为 芯片总线。用于同一块印刷电路板上的总线是 —内总线。.总线仲裁的方法有用 集中仲裁和分布仲裁。.通常总线带宽与位宽成 正比,如果总线的频率为88MHz,总线的位宽为8位,则总线的带宽应为 。.外部总线也称为 通信总线,其表现形式是位于微机后面板上的一些 一外部接口_。.

温馨提示

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

评论

0/150

提交评论