您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 招聘面试 > 微机原理常见学生提问问题解答
1《微型计算机原理与接口技术》部分问题解答1.程序运行过程中堆栈段与数据段之间数据的联系。答:堆栈段和数据段是两个不同的逻辑段,在程序运行中,数据放在数据段,通过指令对变量进行访问,而堆栈段中的数据访问是通过BP指针或SP指针进行的,不能通过其他方法。进栈时SP指针是由高地址向低地址变化,出栈时SP指针是由低地址向高地址变化。这样操作的结果满足了数据先进后出的特性。一般情况下,用户不使用堆栈区存放变量,仅保留若干单元用于存放断点等信息,而由系统指针SP自动对进栈和出栈数据进行管理。使用CALL指令、INTn指令时CPU会自动通过SP指针对堆栈进行管理。2.宏定义与子程序的区别?答:宏指令是用户自己设计的指令,是系统已有若干指令的集合。而子程序也是由若干指令构成,但它是以一个过程出现的。他们的区别主要在使用方法和运行效率上有所不同,我们通过举例来说明现在要做加法23H+12H和42H+12H。宏指令的用法先定义宏指令:ADDITIONMACRON1,N2MOVAL,N1MOVBL,N2ADDAL,BLENDM使用时,按如下方法进行::ADDITION23H,12HMOVSUM1,ALADDITION42H,12HMOVSUM2,AL:以上程序,计算机经过汇编后,执行时的指令序列如下::MOVAL,23HMOVBL,12HADDAL,BLMOVSUM1,ALMOVAL,42HMOVBL,12HADDSUM2,ALMOVSUM2,AL:就是说,计算机在执行的时候,每执行一次宏指令,都会展开执行由宏体定义的全部指令,这些展开的指令都要占用存储空间。所以空间比较浪费,但执行速度快。下面再看子程序的用法先定义子程序:宏体2ADDITIONPROCADDAL,BLRETADDITIONENDP主程序中按如下方法调用::MOVAL,23H;先送第一个加法参数到AL,BL中MOVBL,12HCALLADDITION;第1次调用MOVSUM1,ALMOVAL,42H;第2次加法参数MOVBL,12HCALLADDITION;第2次调用MOVSUM2,AL:要注意,计算机执行CALL指令,将转移到ADDITION子程序执行,每一次CALL指令,CPU都要转移到同一个位置的子程序去执行,并不会在原有的程序中增加新的指令序列。它是一种转移操作,而和宏指令不同,宏指令是将宏体定义的指令插入其中(不是转移)。所以,CALL指令只用到一个子程序体,节省存储空间,但是每次调用都要保护断点和恢复,所以占有额外时间,速度会受到一定影响。综上所述,宏指令和子程序都可以完成多次使用同一功能但参数不同的程序设计中,但又有它们各自的特点。3.移位指令的区别答:先看逻辑移位和算术移位,逻辑移位的要点是移出的空余位用0填充,而算术右移是用符号位填充,注意:算术左移与逻辑左移相同,空余位用0填充。算术左移例子:AL=11001111执行SHLAL,1或SALAL,1后,AL=10011110,原有最高位1移入CF中。AL=11001111执行SHLAL,4或SALAL,4后,AL=11110000,CF=0算术右移例子,注意空余位用符号位填充。如:AL=11001111执行SARAL,1后,AL=11100111原最低位D0=1移入CF中。最高位符号位用符号位填充仍为1。循环移位要分清通过CF和不通过CF的两种形式。P69图3-3的(d)和(c)是操作数与CF构成一个头尾相连的循环体进行移位的;而(f)和(g)是仅操作数自身循环移位,除此之外,每次移出的位都会进入CF,下一次移出的位又会进入CF,从而更新CF值。也就是说,CF只能保留操作数移出的一位状态。4.PTR功能运用答:PTR为临时修改操作数属性的操作符。看以下例子N1DB11H,22H,33H,44H数据段定义变量N1的类型属性是字节,正确访问方法是MOVAL,N1、MOVAL,N1+1但如果想要以字类型属性访问,使用MOVAX,N1就是非法的,怎么解决?使用PTR。如:MOVAX,WORDPTRN1,在PTR前面加上WORD表示这条指令临时修改属性按照字类型3访问,这就是合法的。又例如:INC[BX]非法:正确为:INCWORDPTR[BX],或INCBYTEPTR[BX],明确指定是对字节加1还是对字加1。注意:PTR一定用在存储器操作数前面。寄存器和立即操作数前面不需要用。5.有重复前缀的字节串比较REPECOMPS的执行过程是怎样的?答:重复前缀REPE的含义是相等时重复执行后面的指令,在串比较指令REPECOMPS操作中,它是对源串和目的串中的每个数据逐个进行比较,如果两两相同,即重复进行下一个单元的两两比较。那末指令是如何结束的呢?有两种情况结束,其一,逐个比较一直到所有字符都比较完毕(长度计数CX=0),此时源和目的串中的每个字符都相同的,从而退出该指令,置ZF=1,用户可以使用JZ指令判断该标志知道该两个字符串相同。其二,如果比较操作中发现源和目的某两个对应单元中的字符不等,此时CX还没有递减到0,这时立即退出该指令,因为前缀含义就是相等重复,既然现在发现已经不相等了,当然也就不再需要重复执行后面的比较操作了,退出COMPS指令后置ZF=0,用户可使用条件判断指令JNZ了解字符串比较不相等后转移到某个标号处理。6.对条件转移指令容易混淆。条件转移指令分为几类,主要记忆以下几种:(1)重点掌握按进位标志转移的JC/JNC,按符号标志转移的JS/JNS,按零标志转移的JZ/JNZ。按奇偶标志转移的JP/JNP和按溢出标志转移的JO/JNO指令仅作一般了解即可。JC/JNC纯粹判断进位标志。也可用在无符号数的比较上,这里,JNC表示没有借位,JC表示有借位,指令后面的标号表示当条件满足时转移的目标,否则,顺序执行下一条指令。如DECCXJNZNEXT;表示当CX结果不为零时转移到NEXT标号处执行,否则顺序执行它下面的指令MOVAL,BL(2)另外要记忆的就是无符号数和有符号数的条件转移指令无符号数比较JA/JNA;被减数大于减数时转移/被减数不大于减数时转移(即小于或等于)有符号数转移JG/JGE;被减数大于减数时转移/被减数大于等于减数时转移(指的是真值)JL/JLE;被减数小于减数时转移/被减数小于等于减数时转移(指的是真值)例:AL=-1,BL=23H,要求判断将较小的数送入NUM单元因为是有符号数,所以应该使用有符号条件指令CMPAL,BLJLSMALL;AL小于BL转移到SMALL:SMALL:MOVNUM,AL注意:以上程序不能使用JC判断,如:CMPAL,BLJCSMALL;因为JC这里解释为有借位转移,是指无符号数,但-1的机器数是FFH,它的值大于23H,所以使用JC不能将较小的有符号数送入SMALL单元。7.伪指令的作用是什么?答:伪指令不是计算机CPU可以执行的指令,它是汇编程序这个翻译程序本身所使用的一些指令,使4用的目的是为了帮助汇编语言源程序编写者更加方便的编写程序,定义变量、分配存储单元、划分逻辑段等。这些伪指令由汇编程序进行翻译并进行操作,而不由CPU执行。比如DB伪指令,它的作用就是对变量进行初始化赋值,如果没有这个伪指令,那么我们如何方便的在数据段中设置变量初值呢?。8.8254定时/计数器方式2输出连续的负脉冲是什么含义?答:方式2输出的负脉冲是在计数器计数到1至0时产生的,由于计数到0的同时又自动重新装入计数初值,接着继续减一计数,这一过程周而复始,所以输出的负脉冲具有连续性。用户一般用这个负脉冲信号控制外部电路,因此称为连续的负脉冲。9.8254初始化的编程不是很清楚。答:8254初始化过程要注意这几点:(1),控制字如何写;(2)控制字端口地址如何确定,(3)计数值写入端口地址和初值如何确定(4),控制字和计数值如何写入。我们用具体例子说明初始化过程。设82540号计数器工作在方式3,输入频率2MHZ,要求输出20KHZ频率的方波,8254端口地址是200H~203H,问如何编程?首先确定8254工作方式,因是方波,所以是方式3。再计算计数初值N=(2×1000000)÷(20×1000)=100再确定端口地址,控制口地址是203H,0号计数器端口地址是200H确定控制字,因为计数初值是100,小于256,所以写入可以采用仅写8位或写入16位两种方式。第一种,仅写低8位,控制字是00010110B程序为:MOVDX,203HMOVAL,00010110BOUTDX,ALMOVAL,100;仅写低字节MOVDX,200HOUTDX,AL第二种,写16位方式,控制字是00110110B程序为:MOVDX,203HMOVAL,00110110BOUTDX,ALMOVAX,100MOVDX,200H;16位计数值要向同一端口写入两次,先写低字节、再写高字节。OUTDX,AL;先写低字节MOVAL,AHOUTDX,AL;再写高字节注意:凡是I/O端口地址大于0FFH的一律要放到DX中,使用间接寻址方式访问。不能使用OUT203H,AL切记!!!!10.微机系统I/O空间为0000H~FFFFH连续的字节空间,寻址I/O设备需使用16位地址线A0~A15,为什么端口地址只用了10位?答:PC系统这样设计是为了简化译码电路,实际也已够用,并无其他道理。511.控制线AEN=1和0有什么不同?答:在I/O译码电路中,有一个AEN信号控制,这个信号是ISA总线产生的信号,表示DMA地址允许。即当处于DMA操作时,AEN=1;非DMA操作时,AEN=0。将AEN信号加入译码电路的目的就是只有在AEN=0的情况下才可对I/O电路进行译码,否则无效。12.端口一般只允许接纳一种信息(命令、数据、状态),当有些接口芯片发生端口共用时,区别方法一般有哪些?答:I/O控制端口和状态端口一般可共用,因为,控制端口仅执行写操作,而状态端口仅执行读操作,而有读有写的端口不能共用,否则无法区分。13.DIV指令如何用答:DIV指令是无符号除法指令,该指令要掌握操作数存放的默认规则。例如16位除法操作,被除数是32位,除数是16位,系统要求被除数只能放在DX和AX中,除数可以放在其他寄存器中或内存中,指令执行完毕,商在AX中,余数在DX中。要正确使用指令,一定要搞清入口参数和结果参数的存放位置。例如:123456H除以2345HMOVDX,12HMOVAX,3456HMOVBX,2345HDIVBX;商在AX,余数在DX中要注意,如果给出的被除数是十进制数,则要先转换成16进制数,然后分别装入DX和AX中。13.BP何时判断是基址寻址,什么时候是变址寻址?答:BP只能作为基址寻址寄存器或寄存器间接寻址寄存器,不能作为变址寻址寄存器。如果是[BP]则是寄存器间接寻址,如果是[BP+位移量]则是基址寻址。变址寄存器使用[SI]和[DI]。14.串操作的比较指令,如何把数据放在附加段里面?答:所有串操作指令,都要求源操作数放在数据段,目的操作数放在附加段。可以由两种方法,第一,定义一个数据段,但段地址赋值时同时赋值到DS和ES中,这样,数据段和附加段实际上共享同一个物理空间,但源和目的缓冲区偏移地址不同,所以不会产生任何冲突;第二种方法是定义两个数据段,一个赋值到DS中,一个赋值到ES中,这样,源和目的缓冲区不共享同一个物理空间。15.哪些指令目的操作数和源操作数不能同为内存操作数?答:所有指令都遵守这个原则。出现这样的指令都是非法的,如ADD[BX],NUM,MOVNUM1,NUM2等;其中NUM、NUM1、NUM2为内存变量。16.哪些指令操作结果影响标志位,具体改变哪些标志位?答:因为不同指令对标志位影响不一样,具体细节要看英文原文手册。这里只能讲一些常用指令影响标志位的情况。MOV类指令不影响任何标志位;算术逻辑类指令影响Z、S、C、P、O;A标志在BCD码运算中会影响;INC/DEC指令不影响C标志;转移和调用指令不影响任何标志位。17.P45的偏移地址超出是什么意思?答:该例子是
本文标题:微机原理常见学生提问问题解答
链接地址:https://www.777doc.com/doc-4458432 .html