- 1.15 MB
- 2022-04-22 11:46:09 发布
- 1、本文档共5页,可阅读全部内容。
- 2、本文档内容版权归属内容提供方,所产生的收益全部归内容提供方所有。如果您对本文有版权争议,可选择认领,认领后既往收益都归您。
- 3、本文档由用户上传,本站不保证质量和数量令人满意,可能有诸多瑕疵,付费之前,请仔细先通过免费阅读内容等途径辨别内容交易风险。如存在严重挂羊头卖狗肉之情形,可联系本站下载客服投诉处理。
- 文档侵权举报电话:19940600175。
'《微机原理及应用》习题集(含答案)中原工学院电子信息学院微机原理课程组 2006年12月
习题一1.冯.诺依曼计算机由哪几个部分组成?各部分的功能是什么?答:冯.诺依曼在1946年提出了“存储程序”的计算机设计方案,计算机由运算器、控制器、存储器、输入设备和输出设备几个部分组成。输入设备用来向计算机输入程序和原始数据;输出设备用来输出计算机的处理结果及程序;存储器用来存放程序和数据;运算器是对数据进行运算的部件,其主要功能是对二进制数据进行算术运算(加、减、乘、除)和逻辑运算(与、或、非、移位),故又称为算术逻辑单元;控制器是整个计算机的控制中心,其功能是控制计算机各个部件自动协调工作。2.计算机的发展经历了哪几个时代?计算机有哪些方面的应用?答:第一代(1946年~1958年):电子管计算机;第二代(1959年~1964年):晶体管计算机;第三代(1965年~1970年):集成电路(IC)计算机;第四代(1971年以后):大规模/超大规模集成电路(LSIC/VLSIC)计算机。计算机应用主要有:1.科学计算;2.数据处理;3.实时控制;4.计算机辅助系统;5.人工智能;6.远程教育;7.电子商务等。3.微型计算机系统主要由哪些部分组成?各部分的主要功能是什么?答:微型计算机系统主要由:微处理器、主存储器、输入/输出接口、输入/输出设备、系统总线等部分组成。各部分的主要功能是:1.微处理器:它是微型计算机的核心部件,由运算器、控制器、寄存器等组成其主要功能是通过对指令的译码,产生微操作以控制计算机各个部件自动协调工作。2.主存储器:是微型计算机的重要组成部分之一,用于存储指令和数据。3.输入/输出接口:简称I/O接口,是微机与I/O设备进行信息传递的桥梁,即微机通过I/O接口与输入/输出设备进行信息交换。4.输入/输出设备:简称为I/O设备,人们通过I/O设备与微机进行信息交流。5.系统总线(systembus):是用来连接微处理器与其他部件的一束信号线,通过系统总线架起了微处理器与其他部件之间进行信息传递的通道。4.什么是微型计算机的系统总线?简要说明微处理器三总线的作用。答:系统总线是用来连接微处理器与其他部件的一束信号线,根据所传递的信息不同,可以将系统总线分为:地址总线(AB),用于传送存储器或I/O接口的地址;数据总线(DB),用于微处理器与其他部件的信息传递;控制总线(CB),用于传送各类控制信号,使外设和其它的部件在微处理器的控制下完成控制操作。5.解释下面术语的含义。(1)微处理器、微型计算机、微型计算机系统答:微处理器:它是微型计算机的核心部件,由运算器、控制器、寄存器等组成;微型计算机:体积小、重量轻,采用超大规模集成电路VLSIC,器件数量少,便于携带(笔记本),规模化生产、产量大、价格低廉、普及面大,结构配置灵活、可靠性高;微型计算机系统:由微型计算机构成的计算机系统。
(2)字节、字、字长答:字节:是计算机中比较通用的基本单位,一个字节由8位二进制数位组成。字:是计算机内部处理数据的基本单位。字长:是是指机器一次所能处理的数据位数。(3)主存、内存、高速缓冲存储器答:主存:是微型计算机的重要组成部分之一,按读写性能可以分为随机存储器(简RAM)和只读存储器(简称ROM)。内存:通常说内存容量,指的是随机存储器,并不包括只读存储器。高速缓冲存储器:在慢速的DRAM和快速CPU之间插入一速度较快、容量较小的SRAM,起到缓冲作用,使CPU可以以较快速度存取SRAM中的数据。(4)RAM、ROM答:RAM:随机存储器;ROM;只读存储器。(5)硬件、软件答:硬件:组成计算机的物理实体;软件:操作计算机运行的程序。
习题二1.数制转换(1)12=(1100)B=(0C)H(2)(0F89)H=(111110001001)B=(3977)D(3)(67.75)D=(1000011.11)B=(43.B)H(4)96.25=(1100000.01)B=(60.4)H(5)10111011B=(187)D=(0BB)H(6)(000110000010.0101)B=(386.3125)D=(182.5)H2.写出下列二进制数的原码、反码和补码。(1)+1111000B[X]原=01111000[X]反=00000111[X]补=01111000(2)-1000000B[X]原=11000000[X]反=10111111[X]补=11000000(3)-0000001B[X]原=10000001[X]反=11111110[X]补=11111111(4)-0101100B[X]原=10101100[X]反=11010011[X]补=110101003.求下列数的补码(用一个字节表示),如果用一个字表示结果如何?(1)-9[X]补=11110111(字节)[X]补=1111111111110111(字)(2)23[X]补=00010111(字节)[X]补=0000000000010111(字)(3)-65[X]补=10111111(字节)[X]补=1111111110111111(字)(4)-128[X]补=10000000(字节)[X]补=1111111110000000(字)4.已知[X]补,求X的真值。(1)[X]补=01111111BX=+127(2)[X]补=10000001BX=-127(3)[X]补=10000000BX=-128(4)[X]补=01111000BX=+1205.试将二进制数10000100B和00001110B相加,试说明不管把这两个数看作是无符号数还是有符号数,结果都正确(看作有符号数时采用补码表示)。10000100B答:当作为无符号数相加时和为146,小于255结果正确,+00001110B当作为有符号数,正数和负数相加,结果不会溢出。10010010B6.将有符号数10000100B和11100110B相加,判断结果是否溢出,为什么?答:用进位位法判别溢出:CY=1,CD=0,OF=CY⊕CD=1,10000100B产生溢出。因为两负数相加,其和大于-128,超出了表示的范围。+11100110B101101010B7.数值型数据,在加减运算中为什么采用补码表示?答:对数值型数据,有正数也有负数,采用补码表示时,可以将符号和数值位一起进行编码,并可将减运算转化成加运算。8.完成下列8421BCD码与其它数制/码制的转换。(1)(10010011)BCD=(93)D=(01011101)B
(2)(10000010.0101)BCD=(82.5)D=(01010010.1)B(3)(001101110110.0111)BCD=(376.7)D=(101111000.1011001)B(4)(11010001)B=(001000001001)BCD(5)(000110000010.0101)B=(001110000110.0011000100100101)BCD(6)(58.5)D==(111010.1)B=(01011000.0101)BCD9.计算下列BCD码的和,并按规则进行十进制调整。(1)98+87(2)48+68(3)59+84(4)456+989答:(1)98+87=18510011000个位相加和大于9,加6调整,+10000111十位相加和产生进位,加60H调整100011111结果为:185+01100110000110000101BCD答:(2)48+68=11601001000个位相加产生进位加6调整+01101000十位相加和大于9加60H调整10110000结果为:116+01100110000100010110BCD01011001答:(3)59+84=143+10000100个位相加和大于9,加6调整11011101十位相加和大于9,加60H调整+01100110结果为:143000101000011BCD答(4):456+989=1445010001010110个位、十位、百位相加和均大于9+100110001001个位、十位、百位均加加6调整110111011111结果为:1445+0110011001100001010001000101BCD10.A~Z、a~z、0~9的ASCII码分别是什么?空格、回车、换行、$、?、+、-的ASCII码是什么?答:ASCII码用16进制表示A~Z的ASCII码为:41H-5AH;a~z的ASCII码为:61H-7AH;0~9的ASCII码为:30H-39H;空格的ASCII码为:20H;回车的ASCII码为:0DH;换行的ASCII码为:0AH;“$”的ASCII码为:24H;“?”的ASCII码为:3FH;“+”的ASCII码为:2BH;
“-”的ASCII码为:2DH。11.什么是组合的BCD码?什么是非组合的BCD码?答:组合的BCD码是用一个字节表示2位BCD码;非组合的BCD码一个字节仅在低四位表示1位BCD码。12.简述汉字的编码规则。答:GB2312国标字符集呈二维表,分成94行×94列,行号称为区号,列号称为位号。每一个汉字或符号在码表中都有各自一个惟一的位置编码,该编码就是字符所在的区号(行号)及位号(列号)的二进制代码(7位区号在左、7位位号在右,共14位),也称为汉字的区位码。因此,字符集中的任何一个图形、符号及汉字都用唯一的区位码表示。为了不影响已经约定好的数据通信规程,将区位码的区号和位号都加32(即100000),变换成对应的国标码。
习题三1.8086CPU由哪两部分组成?他们的主要功能各是什么?8086CPU与8088CPU的主要区别是什么?答:由指令部件EU和总线接口部件BIU组成。EU功能:EU只负责执行指令。其中的算术逻辑单元(ALU)完成16位或8位的二进制运算,运算结果可通过内部总线送到通用寄存器组或BIU的内部寄存器中等待写入存储器。16位暂存器用来暂存参加运算的操作数。经ALU运算后的结果特征送入标志寄存器FR中保存;EU中的控制器负责从BIU的指令队列中取指令,并对指令进行译码,根据指令要求向EU内部各部件发出控制命令以完成各条指令的功能。BIU功能:总线接口单元BIU负责与存储器或I/O端口打交道,正常情况下,BIU通过地址加法器形成指令所在存储器中的物理地址后,启动存储器,从给定地址的存储器中取出指令代码送指令队列中等待执行,一旦指令队列中空出2个字节,BIU将自动进人读指令操作以填满指令队列。只要收到EU送来的操作数地址,BIU将立即形成操作数的物理地址,完成读/写操作数或运算结果的功能。答:8086CPU与8088CPU的主要区别:①8088BIU中指令队列长度仅有4个字节;②8088BIU通过总线控制电路与外部交换数据的总线宽度是8位,总线控制电路与专用寄存器组之间的数据总线宽度也是8位,而EU内部总线仍是16位,所以把8088CPU称之为准16位微处理器。2.8086内部的并行操作体现在哪里?答:EU执行指令时,不必访问存储器去取指令,而是直接从指令队列中取得指令代码,并分析执行它。BIU通过地址加法器形成指令所在存储器中的物理地址后,启动存储器,从给定地址的存储器中取出指令代码送入指令队列中等待执行。这两个过程是并行进行的。3.8086CPU中有哪些寄存器?各有什么用途?答:①通用寄存器组:4个16位通用寄存器,AX、BX、CX、DX,称作通用数据寄存器。可用来存放16位的数据或地址,另有隐含的专门用法;2个指针寄存器:SP和BP。它们均用来存放段内偏移地址;2个变址寄存器:SI和DI。这两个寄存器常用在字符串操作中,并分别用来存放源操作数的段内偏移量和目标操作数的段内偏移量。②段寄存器组:CS:代码段寄存器,存放代码段的基地址,要执行的指令代码均存放在代码段中;DS:数据段寄存器,存放数据段的基地址,指令中所需操作数常存放于数据段中;SS:堆栈段寄存器,存放堆栈段的基地址,堆栈操作所需的数据存放于堆栈段中;ES:附加段寄存器,存放附加段的基地址,附加段也是用来存放存储器操作数的。③标志寄存器FR:表示运算的特征或控制CPU的操作。④指令指针寄存器IP:用来存放将要执行的下一条指令代码在代码段中的偏移地址,在程序运行过程中,BIU可修改IP中的内容,使它始终指向将要执行的下一条指令4.标志寄存器FR中有哪些标志位?它们的含义和作用是什么?答:标志寄存器FR
①进位标志位CF:运算结果最高位若产生进位或借位,该标志置1,否则置0。②奇偶标志位PF:运算结果中1的个数为偶数,该标志置1,否则置0。③辅助进位标志位AF:加法/减运算中,若第3位有进/借位,AF=1,否则AF=1。④零标志位ZF:运算指令执行之后,若结果为0,则ZF=1,否则ZF=0。⑤符号标志位SF:它和运算结果的最高位相同。有符号运算时最高位表示符号,SF=1为负,SF=0为正。⑥溢出标志OF:若本次运算结果有溢出,则OF=1,否则OF=1。⑦中断标志位IF:该标志用于控制可屏蔽的硬件中断。IF=0,可接受中断;IF=0中断被屏蔽,不能接受中断。该标志可用指令置1或置0(复位)。⑧方向标志位DF:该标志位用于指定字符串处理指令的步进方向。当DF=1时,字符串处理指令以递减方式由高地址向低地址方向进行;当DF=0时,字符串处理指令以递增方式,由低地址向高地址方向进行。该标志可用指令置位或清零。⑨单步标志位TF:TF=1,表示控制CPU进人单步工作方式,此时,CPU每执行完一条指令就自动产生一次内部中断。单步中断用于程序调试过程中。5.为达到下述目的,各应判定哪个标志位并说明其状态。(1)两数相减后比较大小;答:无符号数A-B,判CF。A≥B时CF=0;A≤B时CF=1。有符号数A-B,判SF和OF。A≥B时SF⊕OF=0;A<B时:SF⊕OF=1。(2)比较两数是否相等;答:判ZF。当A=B时,ZF=1。(3)两数运算后是正数还是负数?答:对有符号数,判SF。当SF=1时,结果为负数;当SF=0时,结果为正数。(4)两数相加后是否产生溢出?答:对有符号数,判OF。当OF=1时,结果产生溢出;当OF=0,结果无溢出。6.什么是逻辑地址?它由哪两部分组成?答:在8086系统中,16位的地址称为逻辑地址。包括了段内“偏移地址”和“段基址”。7.8086系统的存储器的逻辑地址和物理地址之间有什么关系?答:物理地址为20位,是由“段基址”和“偏移地址”组成,其关系为:物理地址=段基址×16+偏移地址8.“最小模式”和“最大模式”系统的主要区别是什么?各有什么主要特点?答:最小模式是指单机系统,即系统中只有8086/8088一个微处理器。在这种系统中,8086/8088CPU直接产生所有的总统控制信号。最大模式系统中包含有两个或多个处理器,可构成多机系统,其中一个为主处理器8086/8088CPU。其它处理器称为协处理器,它们是协助主处理器进行工作的。在最大模式系统中,系统所需控制信号由总线控制器8288提供。两种模式的最主要区别体现在8086CPU的部分管脚(24~31引脚)具有不同的功能。9.8086系统中存储器为什么要分段?各逻辑段之间的关系如何?答:8086/8088系统中,可寻址的存储器空间达1M字节,要对整个存储器空间寻址,需要20位长的地址码,而CPU内部可以提供地址的寄存器及算术逻辑运算单元都是16位,
其寻址范围为64K字节(16位地址)。因此在8086/8088系统中,把整个存储空间分成许多逻辑段,这些逻辑段容量不能超过64K字节。对任何一个存储单元,只要能得到它所在段的首地址和段内的相对地址(16位),就可对它进行访问。逻辑段的首地址可在整个存储空间内进行设置,各个逻辑段之间可以紧密相连,也可以相互重叠(完全重叠或部分重叠)。10.在8086CPU中堆栈操作是字操作还是字节操作?已知SS=1050H,SP=0006H,AX=1234。若执行对AX的压栈操作后,则AX中的数据存放在何处?SP为什么值?答:堆栈操作是字操作。对AX压栈后,AX中的数据在10504H,10505H单元中,其中(10504H)=34H,(10505H)=12H,SP=0004H。11.已知当前数据段位于存储器的A1000H到B0FFFH范围内,DS段寄存器的内容是多少?答:DS=A100H,为数据段的“段基址”。12.若CS=234EH时,已知某一存储单元的物理地址为25432H。问若CS的内容被指定成1A31H时,该存储单元的物理地址应为什么?答:因为存储单元的物理地址是唯一的,当CS内容改变后,并不影响该存储单元的物理地址,故仍为:25432H。13.在8086系统中为什么用地址锁存器?答:因8086CPU的引脚采用了分时复用的地址/数据和地址/状态总线,为保证形成稳定的系统地址总线,故需采用地址锁存器以产生系统地址总线。14.8086CPU读/写总线周期各包含多少个时钟周期?什么情况下需要插入TW等待周期?应插入多少个TW,取决于什么因素?什么情况下会出现空闲状态TI?答:读写总线周期最少各包含了四个时钟周期,如果配合工作的存储器或I/O端口由于本身速度或其它原因来不及在T3时钟周期送出所需信息,则插入TW。否则不需插入等待周期TW。在T3周期结束后可立即进入T4周期;当检测到READY引脚为低电平,则在T3周期结后不进入T4周期,而应插入一个TW周期。以后在每一个TW周期的上升沿都要检测READY引脚电平,只有检则到5CE5AH34HREADY为高电平时,才在这个TW周期5CE5BH12H后进入T4周期。当BIU不访问存储器和外设时,总线时序出现空闲状态TI15.某程序数据段中存有两个数据字5DC45H6BH1234H和5A6BH,若已知DS=5AA0H,它们5DC46H5AH的偏移地址分别为245AH和3245H,试画出它们在储存器中的存放情况。答:它们在储存器中的存放情况见图:
16.80286CPU的结构中比8086CPU增加的部分有哪些?其主要用途是什么?答:8086CPU内部有BIU和EU两个独立部件并行工作,而80286CPU内部有4个部件BU(总线单元)、IU(指令单元)、EU(执行单元)和AU(地址单元)并行工作,提高了吞吐量,加快了处理速度。其中IU是增加的部分,该单元取出BU的预取代码队列中的指令进行译码并放入已被译码的指令队列中,这就加快了指令的执行过程。
习题四1.8086语言指令的寻址方式有哪几类?用哪一种寻址方式的指令执行速度最快?答:数据操作数的寻址方式有七种,分别为:立即寻址,寄存器寻址,直接寻址,寄存器间接寻址,寄存器相对基址变址和相对基址变址寻址。其中寄存器寻址的指令执行速度最快。2.若DS=6000H,SS=5000H,ES=4000H,SI=0100H,BX=0300H,BP=0400H,D=1200H,数据段中变量名NUM的偏移地址为0050H,试指出下列源操作数的寻址方式和物理地址是多少?(1)MOVAX,[64H]答:寻址方式为直接寻址;PA=60064H(2)MOVAX,NUM答:寻址方式为直接寻址;PA=60005H(3)MOVAX,[SI]答:寻址方式为寄存器间接寻址;PA=60100H(4)MOVAX,[BX]答:寻址方式为寄存器间接寻址;PA=60300H(5)MOVAX,[BP]答:寻址方式为寄存器间接寻址;PA=50400H(6)MOVAL,[DI]答:寻址方式为寄存器间接寻址;PA=61200H(7)MOVAL,[BX+1110H]答:寻址方式为寄存器相对寻址;PA=61410H(8)MOVAX,NUM[BX]答:寻址方式为寄存器相对寻址;PA=60305H(9)MOVAX,[BX+SI]答:寻址方式为基址变址寻址;PA=60400H(10)MOVAX,NUM[BX][DI]答:寻址方式为相对基址变址寻址;PA=61505H3.设BX=637DH,SI=2A9BH,位移量为C237H,试确定由这些寄存器和下列寻址方式产生的有效地址。(1)直接寻址答:有效地址为EA=C237H(2)用BX的寄存器间接寻址答:有效地址为EA=637DH(3)用BX的相对寄存器间接寻址答:有效地址为EA=125B4H(4)基址加变址寻址答:有效地址为EA=8E18H(5)相对基址变址寻址答:有效地址为EA=1504FH其中,(3)和(5)中产生进位,要把最高位1舍去。4.指出下列指令是否正确,若不正确情说明原因。(1)MOVDS,2010H;立即数不能传送到DS(2)PUSHAL;栈操作,操作数类型必须为WORD类型(3)MOVDX,[SP];SP寄存器不能做间址寄存器(4)INAL,0A00H;I/O指令的直接寻址,地址只能为8位(5)XCHGCL,CH;正确(6)SHRAX,3;移位超过一位时,应采用CL寄存器间址(7)AAACX;非组合的BCD码加法调整AAA指令应为隐含操作数(8)ADD[BP+DI];加法指令ADD,缺少源操作数(9)OUTDX,CL;I/O指令操作数只能用AX、AL提供,端口地址可以是8位的直接地址或用DX间址(10)CBWBH;符号扩展指令为隐含操作数(11)ADD03ECH;加法指令应为双操作数指令,立即数不能做目的操作数(12)MOVBX,[SI+DI];源操作数形式错误,SI和DI不能同时做为间址寄存器(13)MOVDI,[AX];AX不能做为间址寄存器
(14)OUT258H,BX;I/O指令格式错误,见(9)题的解释(15)SHLAX,3;移位指令,位移位数大于1时,应用CL来指明(16)MOV64H,AL;立即数不能做为目的操作数(17)ADDAL,6600H;源、目的操作数的类型不一致(18)MOV[BX],[SI];传送指令中,两个操作数不能同时为存储器操作数(19)XCHGAX,8800H;交换指令的操作数不能使用立即数(20)MOVAX,[BX+DX];传送指令的源操作数,不能使用立即数(21)LEABX,1000H;有效地址传送指令的源操作数不能为立即数,必须是存储器操作数(22)DIV0010H;正确(23)LEADX,DI;同(21)题,源操作数不能为寄存器操作数(24)MULAX,200H;乘法指令的目的操作数是隐含的,不能出现在指令中(25)MOVAX,[BX+BP];传送指令中源操作数格式错,BX和BP不能同时为间址寄存器(26)CMP[BX],[SI];比较指令的两个操作数不能同时为存储器操作数(27)OUTDX,BX;I/O指令中,源操作数只能使用AL或AX寄存器(28)ANDOFH,AL;“与”指令中,目的操作数不能使用立即数(29)SAL[BX],CX;移位指令,移位位移不能用CX寄存器指明(30)JMPFAR[BX+SI];转移指令中转移的目标地址表达方式错误;如果是段内间接转移,应为:JMPWORDPTR[BX+SI];如果是段间间接转移,应为:JMPDWORDPTR[BX+SI](31)JNZAAA;不相等转移指令中,符号地址(标识符)不能使用系统中的保留字(32)JMPNEXT;正确(33)SBCAX,[DX];指令助记符错,源操作数表示方式错(34)MOVCS,DS;段寄存器之间不能传送数据,CS寄存器也不能做为目的操作数(35)ADDDS,AX;加法指令中段寄存器不能做为操作数(36)MOVAL,CX;源、目的操作数的类型不一致,见(17)题(37)INC[BX];没有指定存储器操作数类型(38)MOVCL,A8H;源操作数为16进制的立即数,16进制数以字母开头时应在前面加“0”(39)MOVES,DS;错同(34)题(40)INAL,BX;I/O指令端口地址表示错误,只能用8位立即数或DX间址5.设一个字节数据X存放AL寄存器中,试说明下列程序的功能:XORAH,AH;AH清零SALAX,1;AX左移一位,相当于2XMOVBX,AX;2X送BX暂存MOVCL,2SALAX,CL;AX左移二位,2X×4=8XADDAX,BX;2X+8X=10X该段程序实现了字节数据X乘10,结果在AX中。6.试编程实现:
(1)AL寄存器的低4位清0(2)BL寄存器的低4位置1(3)CL寄存器的低4位取反(4)测试DL寄存器的最低2位是否同时为0,若是,将0送入BL寄存器;否则将1送入BL寄存器。答:程序段如下ANDAL,0F0H;①AL寄存器的低4位清0ORBL,0FH;②BL寄存器的低4位置1XORCL,0FH;③CL寄存器的低4位取反TESTDL,03H;④测试DL寄存器JZNEXTMOVBL,1JMPNEXT1NEXT:MOVBL,0NEXT1:HLT7.若有两个4字节的无符号数相加,这两个数分别存放在2000H和3000H开始的存储单元中,得到的和存放在2000H开始的内存单元。试编程完成。答:程序段如下MOVAX,[3000H]ADD[2000H],AXMOVAX,[3002H]ADC[2002H],AX8.设从2000H为首址的内存中,存放着10个带符号的字节数据,试编程完成:找出其中最大的数,并存入2000H单元。答:程序段如下MOVBX,2000HMOVCX,9MOVAL,[BX]N2:INCBXCMPAL,[BX]JGEN1MOVAL,[BX]N1:LOOPN2MOV[2000H],ALHLT9.用寄存器间接寻址方式时,BX、BP、SI、DI分别针对什么情况来使用?用这4个寄存器分别组合间接寻址时,物理地址是怎样计算的?举例说明。答:BX、SI、DI用于在数据段寻址,BP用于在堆栈段寻址。在数据段物理地址为:PA=DS×10H+BX/SI/DI或者为:PA=DS×10H+BX+SI或(BX+DI)在堆栈段物理地址为:PA=SS×10H+BP
或者为:PA=SS×10H+BP+SI或(BP+DI)举例如下:MOVAX,[BX+SI];在数据段寻址,PA=DS×10H+BX+SIMOVAX,[BP+DI];在堆栈段寻址,PA=SS×10H+BP+DI10.已知:DS=2000H,BX=0300H,SI=0002H,(20300H)=12H,(20301)=34H,(20302H)=56H,(20303H)=78H,(21400H)=2AH,(21401H)=4CH,(21402H)=B7H,(21403H)=65H试说明下列各条指令执行完后AX寄存器的内容。(1)MOVAX,1400H;答:执行完该条指令后AX=1400H(2)MOVAX,BX;答:执行完该条指令后AX=0300H(3)MOVAX,[1400H];答:执行完该条指令后AX=4C2AH(4)MOVAX,[BX];答:执行完该条指令后AX=3412H11.根据以下要求,试写出相应的汇编语言指令。(1)把BX寄存器和DX寄存器的内容相加,结果存入BX寄存器中。答:指令为ADDBX,DX(2)用寄存器BX和SI的基址变址寻址方式把存储器中的一个字节与AL寄存器的内容相加,并把结果送到AL寄存器中。答:指令为ADDAL,[BX+SI](3)用寄存器BX和位移量0B2H的寄存器相对寻址方式把存储器中的一个字和CX相加,并把结果存回存储器中。答:指令为ADD[BX+0B2H],CX(4)用位移量为0524H的直接寻址方式把存储器中的一个字与立即数3C5AH相加,并把结果送回该存储单元。答:指令为ADD[0524H],3C5AH12.已知堆栈段寄存器SS的内容是0FF0AH,堆栈指针寄存器SP的内容是0008H,先执行两条把8057H和0F7CH分别进栈的PUSH指令,再执行一条POPBX指令。试画出堆栈区和SP的内容过程变化示意图(标出存储单元的物理地址)。答:将8057H和0F7CH分别进栈后,SP=0004H,再执行一条POPBX指令后,SP=0006H,BX=0F7CH。堆栈区和SP的内容过程变化示意图如下:SP=0008HSP=0004HSP=0006HSS=0FF0AH0FF0A0H0FF0A1H0FF0A2H0FF0A3H0FF0A4HSP→7CH7CH0FF0A5H0FH0FH0FF0A6H57HSP→57H0FF0A7H80H80H0FF0A8H××H××H××HSP→0FF0A9H××H××H××H0FF0AAH××H××H××H
13.字节扩展指令和字扩展指令用在什么场合?举例说明。答:用在除法运算中,对带符号数的被除数进行扩展;例如:当被除数在AX中,除数在BX中时CDWIDIVBX14.写出执行以下计算的指令系列。其中X、Y、Z、R、W均为存放16位带符号数单元的地址。(1)Z←W+(Z-X)答:指令系列如下MOVAX,ZSUBAX,XADDAX,WMOVZ,AX(2)Z←W-(X+6)-(R-9)答:指令系列如下ADDX,6SUBR,9MOVAX,WSUBAX,XSUBAX,RMOVZ,AX(3)Z←(W×X)/(Y+6),R←余数答:指令系列如下MOVAX,WIMULXMOVBX,YADDBX,6IDIVBXMOVR,DX(4)Z←((W-X)/5×Y)×2答:指令系列如下MOVAX,WSUBAX,XCDWIDIV5IMULYIMUL2ADDDX,CFMOVZ,AX15.写出完成以下操作的程序段。假设各变量的值均为用压缩BCD码表示的二位十进制数(1)U←V+(S-6)答:程序如下
MOVAL,SSUBAL,6DASADDAL,VDAAMOVU,AL(2)U←(X+W)-(Z-V)答:程序如下MOVAL,ZSUBAL,VDASMOVBL,ALMOVAL,XADDAL,WDAASUBAL,BLDASMOVU,AL16.移位指令和循环移位指令在执行操作时,有什么差别?在编制乘除法程序中,为什么常用移位指令来代替乘除法指令?试编制一个程序段,实现CX中的数除以4,结果仍放在CX中。答:逻辑移位指令用于无符号数的移位,左移时,最低位补0,右移时,最高位补0。算术移位指令用于对带符号数的移位,左移时,最低位补0,右移时,最高位的符号在右移的同时,且保持。小循环移位指令ROL、ROR是只对目标操作数进行循环,即不含CF的左、右移循环移位。大循环移位指令RCL、RCR是把标志位CF也包含在循环中的左、右移循环移位。对于二进制数,左移一位相当于乘二,右移一位相当于除二,所以可以用移位指令来代替乘除法指令。SARCX,1;CX算术右移一位,除二SARCX,1;CX算术右移一位,除二17.在0628H单元处有一条二字节指令JMPSHORTOBJ,如果其中位移量为:①27H;②6BH;③0C6H,试问转向地址处的值为多少?答:段内短转移的把当前的IP值(即JMP指令的下一条指令的地址)与指令指定的8位偏移量之和送到IP,使程序运行发生转移。指令中的OBJ是一个带符号的八位偏移量。当OBJ=27H时,转移的目标地址值为:0651H当OBJ=6BH时,转移的目标地址值为:0692H当OBJ=0C6H时,转移的目标地址值为:05F0H18.带参数的返回指令用在什么场合?设栈顶地址为4000H,当执行RET0008H后,SP指针的值是多少?答:当调用程序为子程序提供一定的参数或参数的地址,这些参数是通过堆栈传递给子程序时;在子程序运行结束返回时,这些参数或参数地址已经没有在堆栈中保留的必要。因此,使用带参数的返回指令RETn,以便废弃一些CALL指令执行前入栈的参数。
设栈顶地址为4000H,当执行RET0008H后,执行SP←SP+n的操作,SP=4008H。19.假定AX和BX中内容为带符号数,CX和DX中的内容为无符号数。请用比较指令和条件转移指令实现以下判断。(1)若DX的内容高于CX的内容,转去执行EXCEED。(2)若BX的内容大于AX的内容,转去执行EXCEED。(3)若CX的内容等于零,转去执行ZERO。(4)若BX的内容小于等于AX的内容,转去执行EXCEED。(5)若DX的内容低于等于CX的内容,转去执行EXCEED。答:①CMPDX,CXJAEXCEED②CMPBX,AXJGEXCEED③CMPCX,0JZZERO④CMPBX,AXJLEEXCEED⑤CMPDX,CXJBEEXCEED20.分析下列程序段:ADDAX,BXJNOL1JNCL2SUBAX,BXJNCL3JNOL4JMPSHORTL5如果AX和BX的内容(带符号数)给定如下:AXBX(1)B568H54B7H(2)147BH80DCH(3)D023H9FD0H(4)42C8H608DH(5)B568H94B7H问该程序执行完后,程序转向哪里?答:①AX+BX没有产生溢出,程序转向L1②AX+BX没有产生溢出,程序转向L1③AX+BX产生溢出,产生进位,执行减运算,产生借位,产生溢出,程序转向L5④AX+BX产生溢出,无进位,程序转向L2⑤AX+BX产生溢出,产生进位,执行减运算,产生借位,产生溢出,程序转向L521.8086/8088用什么途径来更新CS和IP的值?答:出栈;转移;过程调用;中断。
22.设IP=3D8FH,CS=4050H,SP=0F17CH。当执行CALL2000:0094H后,试指出IP、CS、SP、(SP-1)、(SP-2)、(SP-3)和(SP-4)的值。答:CS=2000H,IP=0094H;SP=0F78H,(SP-1)=3DH,(SP-2)=8FH,(SP-3)=40H,(SP-3)=50H23.编写一段程序,比较两个5字节的字符串OLDS和NEWS,如果OLDS字符串不同于NEWS字符串,则执行NEW_LESS,否则顺序执行。答:设字符串OLDS位于数据段,字符串NEWS位于扩展段,程序段如下:LEASI,OLDS;取源串首址送SILEADI,NEWS;取目的串首址送DICLD;增址比较MOVCX,5;串长度为5REPECMPSB;相等重复串比较JNENEW_LESS;不相等转移HLT;暂停
习题五1.汇编程序和汇编语言源程序有什么区别?两者的作用是什么?答:汇编程序是对汇编源程序进行编译的系统程序;汇编源程序是编程人员利用汇编语言为解决某些问题而编写的程序。汇编程序用来对汇编源程序进行编译,从而产生目标代码的;而汇编源程序是用来执行程序动作的语句。2.汇编语言源程序的语句有哪几种?各自的作用是什么?答:汇编语言源程序是由指令语句、伪指令语句、宏指令语句组成。指令语句:产生目标代码,是CPU可以执行的能够完成特定功能的语句。伪指令语句:在汇编程序对源程序汇编期间由汇编程序处理的操作,它可以完成如处理器选择、定义数据、分配存储区、指示程序结束等功能,但不产生目标代码。宏指令语句:宏指令语句的目的在于简化汇编语言源程序的书写,不能缩小目标代码文件。3.标号和变量都有什么属性?各属性的作用是什么?答:有段属性、偏移地址属性和类型属性。①段属性:段属性定义了标号和变量的段起始地址,其值是在某一段寄存器中。②偏移地址属性:该属性表示标号和变量相距段起始地址的字节数,是一个16位无符号数。③类型属性:对于标号而言:用于指出该标号是在本段内引用还是在其它段中引用。标号的类型有NEAR(段内引用)和FAR(段间引用)两种;对变量而言:其类型属性由定义变量的伪指令DB(定义字节型)、DW(定义字型)、DD(定义双字型)等确定。4.试叙述汇编语言源程序的上机过程。答:分四步进行①编辑、②汇编、③连接、④调试。编辑:用编辑程序(例如EDIT.COM)建立扩展名为.ASM的汇编语言源程序文件。汇编:用汇编程序(例如MASM.EXE)将汇编语言源程序文件汇编成目标程序文件,其扩展名为.OBJ。如果在汇编过程中出现语法错误,根据错误信息提示(如错误位置、错误类型、错误说明),用编辑软件重新调入源程序文件进行修改,直至没有出现语法错误,再进行连接程序。连接:用连接程序(例如LINK.EXE)把目标程序文件转化成可执行文件,其扩展名为.EXE。调试:用调试程(例如DEBUG.EXE)序对可执行文件进行调试,直到无错误为止。此时的可执行文件在DOS命令下直接执行。5.已知数据段DATA从存储器02000H单元开始,DATA段的定义如下:DATASEGMENTVAR1DB2DUP(0,1,?)VAR2DW50DUP(?)VAR3DB10DUP(0,1,2DUP(3),4)DATAENDS试求出三个变量经SEG、OFFSET、TYPE、LENGTH、SIZE运算的结果。答:运算结果如下表所示:
回送符SEGOFFSETTYPELENGTHSIZE变量VAR10200H0000H1H2H2HVAR20200H0006H2H32H64HVAR30200H006AH1H0AH0AH6.已知数据段定义如下,试采用图示说明各变量在内存的分配情况以及数据的预置情况。DATASEGMENTA1DB50,100,2DUP(0,1)A2DB2DUP(2,3DUP(?),10H)A3DB‘happynewyear!’A4DW0,2000HA5DW?,‘AB’DATAENDS答:A10000HA30010HA4001FH32H68H00H64H61H00H00H70H00H01H70H20H79HA500H××H01H20H××HA202H6EH42H××H65H41H××H77H××H20H79H10H02H65H61H××H72H××H21H××H10H7.试采用图示说明各变量在内存的分配情况以及数据的预置情况。DATASEGMENTB10100H××HB2ORG0100H64H00HB1DB?B300HB2DW10000HB3DW2DUP(0)00H00HCOUNTEQU5B400HB4DBCOUNTDUP(0,1)01H00HB5DW‘12’,‘34’,‘56’01HDATAENDS00H01H答:内存的分配情况以及数据的预置情况见右图00H01H00H01HB532H31H34H33H36H35H
8.已知变量VAR1、VAR2、VAR3定义如下,试分析下面的指令是否正确,若有错误,请进行改正。DATASEGMENTVAR1DB?VAR2DB10VAR3EQU100DATAENDS(1)MOVVAR1,AX(2)MOVVAR3,AX(3)MOVBX,VAR1MOV[BX],10(4)CMPVAR1,VAR2(5)VAR3EQU50答:(1)类型不匹配,该为:MOVVAR1,AL(2)立即数不能作为目的操作数,该为:MOVAX,VAR3(3)第一句类型不匹配,改为:MOVBL,VAR1第二句未指明存储器操作数的类型,改为:MOVBYTEPTR[BX],10(4)两个存储器操作数之间不能直接作比较,改为:MOVAL,VAR1CMPAL,VAR2(5)符号VAR3已被定义,不能重复定义,应去掉。9.假设VAR1和VAR2为字变量,LAB为标号,试指出下面指令的错误之处,并加以改正。(1)ADDVAR1,VAR2答:两存储器操作数之间不能直接相加,改为:MOVAX,VAR1ADDAX,VAR2(2)SUBAL,VAR2答:两操作数类型不匹配,改为:SUBAX,VAR2(3)MOVCL,VAR1答:两操作数类型不匹配,改为:MOVCX,VAR1(4)JMPLAB[SI]答:相对寄存器寻址,相对位移量不能为标号,因为数据值。改为:JMP5[SI](5)JNZVAR1答:条件转移指令转移的目标地址,只能是标号或8位位移量。改为:JNZLAB10.试说明下面指令中哪些需要进行PTR说明。VAR1DB10H,100VAR2DW1000(1)MOVAL,VAR1(2)MOVDH,[BX](3)ADD[BX],2(4)MOVCL,VAR2(5)SUBAL,VAR1+1答:(3)、(4)条指令需要进行PTR说明
11.选择题(1)在顺序结构的流程图中,不包含有(C)。A)起始框B)终止框C)判断框D)处理框(2)设AL=0A8H,CX=2,CF=1,执行RCLAL,CL指令后,AL=(无正确选项)。A)51HB)46HC)47HD)0C5H注:正确的结果为:AL=0A3H(3)下述指令的执行结果是(C)MOVAL,0FFHXORAL,3FHA)AL=40HB)AL=20HC)AL=0C0HD)AL=0E0H12.在AX和DX中存有一个32位带符号数(DX中存放高16位),试编写程序求出它的相反数。答:程序设计如下:CODESEGMENTASSUMECS:CODESTART:MOVCX,0CLCSBBCX,AXMOVAX,CXMOVCX,0SBBCX,DXMOVDX,CXMOVAH,4CHINT21HCODEENDSENDSTART2213.编程实现求S=(X+Y)/Z的值,并将结果放入RESULT单元。(设:X、Y、Z均为字节数,且Z为无符号数)答:程序设计如下:DATASEGMENTXDB20HYDB35HZDB12HRESULTDW?DATAENDSCODESEGMENTASSUMECS:CODE,DS:DATASTART:MOVAX,DATAMOVDS,AXMOVAL,XMULAL
MOVDX,AXMOVAL,YMULALADDAX,DXMOVDX,0MOVBL,ZMOVBX,0DIVBXMOVRESULT,AXMOVAH,4CHINT21HCODEENDSENDSTART14.试编程实现将键盘输入的小写字母用大写字母显示出来。答:程序设计如下:CLRFMACRO;宏汇编命令,定义宏MOVDL,0DHMOVAH,02HINT21H;回车,使光标回到起始位置MOVDL,0AHMOVAH,02HINT21H;光标换行ENDM;宏定义结束DATASEGMENTSTRINGDB50,?,50DUP(?)DATAENDSCODESEGMENTASSUMECS:CODE,DS:DATASTART:MOVAX,DATAMOVDS,AXLEADX,STRINGMOVAH,0AHINT21HCLRF;宏指令MOVBL,STRING+1MOVBH,0LEASI,STRING+2ADDBX,SIMOVBYTEPTR[BX],‘$’NEXT:MOVDL,[SI]CMPDL,‘a’JBNEXT1CMPDL,‘z’
JANEXT1SUBDL,20HMOV[SI],DLNEXT1:INCSIDECBLJNZNEXTLEADX,STRING+2MOVAH,09HINT21HMOVAH,4CHINT21HCODEENDSENDSTART15.若在数组字变量SQTAB平方表中有十进制数0~100的平方值,用查表法找出35这个数的平方值放入字变量NUM中,写出程序段和有关的伪指令。答:程序设计如下DATASEGMENTSQTABDW0,1,4,9,16,25,36,……10000TABDB35NUMDW?DATAENDSCODESEGMENTASSUMECS:CODE,DS:DATASTART:MOVAX,DATAMOVDS,AXMOVBX,OFFSETSQTABMOVAL,TABSALAL,1MOVAH,0ADDBX,AXMOVAX,WORDPTR[BX]MOVNUM,AXMOVAH,4CHINT21HCODEENDSENDSTART16.试指出下列无条件转移指令的转移地址中的转移地址?(1)JMPBX答:转移地址为BX寄存器中的值。属段内间接转移,IP←BX(2)JMPWORDPTR[BX]答:转移地址为BX中的值指明的存储器字单元中的值。属段内间接转移,IP←(MEM)(3)JMPNEARPTRFOR
答:转移地址为当前IP+16位位移量。标号FOR表示16位位移量,属段内近转移。(4)JMPFARPTRFAR_PRO答:转移地址为标号FAR_PRO表示的16位段基址和16位偏移量。属段间直接转移。(5)JMPSHORTAGAIN答:转移地址为当前IP+8位位移量。标号AGAIN表示8位位移量,属段内短转移。(6)JMPDWORDPTR[BX][DI]答:转移地址为由基址变址寻址方式提供的存储器操作数(两个字)17.试分析下列程序段,如果AX和BX的内容分别给出如下5种情况,试问程序分别转向何处?(1)AX=1478H,BX=80DCH(2)AX=0B568H,BX=54B5H(3)AX=42C8H,BX=608DH(4)AX=0D023H,BX=9FD0H(5)AX=94B7H,BX=0B568HADDAX,BXJNOL1JNCL2SUBAX,BXJNCL3JNOL4JMPL5答:(1)转向L1(2)转向L1(3)转向L2(4)转向L5(5)转向L518.编写程序,计算下面函数的值。2X(X<0)S=3X(0≤X≤10)4X(X>10)答:程序设计如下DATASEGMENTXDB-17SDB?DATAENDSCODESEGMENTASSUMECS:CODE,DS:DATASTART:MOVAX,DATAMOVDS,AXMOVAL,XCMPAL,0JGELOOP1
ADDAL,ALMOVS,ALMOVAH,4CHINT21HLOOP1:CMPAL,0AHJGLOOP2MUL3MOVS,ALMOVAH,4CHINT21HLOOP2:MUL4MOVWORDPTRS,AXMOVAH,4CHINT21HCODEENDSENDSTART19.设内存中有三个互不相等的无符号字数据X、Y和Z,存放在X开始的字单元中,编程实现将三个数据从小到大排序后放到X、Y和Z中。答:程序设计如下DATASEGMENTXDW25H,27H,18HYDW?ZDW?DATAENDSCODESEGMENTASSUMECS:CODE,DS:DATASTART:MOVAX,DATAMOVDS,AXMOVAX,XCMPAX,X+2JBELOOP1XCHGAX,X+2LOOP1:CMPAX,X+4JBELOOP2XCHGAX,X+4LOOP2:MOVX,AXMOVAX,X+2CMPAX,X+4JBELOOP3MOVZ,AXMOVAX,X+4MOVY,AXJMPLOOP4
LOOP3:MOVY,AXMOVAX,X+4MOVZ,AXLOOP4:MOVAH,4CHINT21HCODEENDSENDSTART20.分析下面程序功能,并指出程序执行后,DAT2数据区中的内容是什么?DAT1DB0,1,2,3,4,5,6,7,8,9DAT2DB5DUP(?)︰MOVCX,5MOVBX,5MOVSI,0MOVDI,0NEXT:MOVAL,DAT1[BX+SI]MOVDAT2[DI],ALINCSIINCDILOOPNEXTHLT答:DAT2数据区中的内容为:5,6,7,8,921.编写程序求出首地址为DAT的100个有符号字数据中的最小偶数,并将这个数存放到DAT1字单元中。答:程序设计如下(提示:偶数的最末为是零)DATASEGMENTDATDB02H,0A8H,34H,23H,23H,34H,26H,0A2H……NUMEQU64HDAT1DB?DATAENDSCODESEGMENTASSUMECS:CODE,DS:DATASTART:MOVAX,DATAMOVDS,AXLEASI,DATMOVCX,NUMMOVAL,0NEXT:MOVDL,[SI]SHRDL,1JNCNNINCSIDECCX
JNZNEXTJMPMMNN:MOVAL,[SI]NN1:INCSIDECCXJZMMMOVBL,[SI]SHRBL,1JCNN1MOVBL,[SI]CMPAL,BLJLENN1MOVAL,BLJMPNN1MM:MOVDATI,ALMOVAH,4CHINT21HCODEENDSENDSTART22.试编写一个程序段,要求比较两个字符串STR1和STR2是否完全相等。若完全相等,则置AL=1;若不完全相等,则置AL=-1。答:程序设计如下DATASEGMENTSTR1DB‘FDASFDFDSA’,‘$’NUM1EQU$-STR1STR2DB‘FDASFDFDSA’,‘$’NUM2EQU$-STR2DATAENDSCODESEGMENTASSUMECS:CODE,DS:DATA,ES:DATASTART:MOVAX,DATAMOVDS,AXMOVES,AXMOVAX,NUM1MOVBX,NUM2CMPAX,BXJNELOOP1MOVCX,NUM1LEASI,STR1LEADI,STR2CLDREPECMPSBJCXZLOOP2
LOOP1:MOVAL,0FFHJMPEXITLOOP2:MOVAL,01HEXIT:MOVAH,4CHINT21HCODEENDSENDSTART23.按子程序说明信息编写子程序;子程序名:STRINGS_CMP;子程序功能:比较两个长度相同的字符串STR1和STR2;入口参数:STR1、STR2的首地址分别放在SI和DI中,长度在CX中;出口参数:STR1>STR2时,CF=0;STR1
您可能关注的文档
- 形式逻辑课后练习参考答案.doc
- 形式逻辑金岳霖课后习题答案.docx
- 彭剑锋教材《人力资源管理概论》各章要点思考题参考答案.doc
- 影视鉴赏课后答案.docx
- 徐寿昌主编《有机化学》(第二版)-课后1-13章习题答案.doc
- 徐寿昌编《有机化学》第二版习题参考答案.doc
- 徐州市《沟通与协调能力考试》判断题及参考答案.doc
- 徐恒钧《材料科学基础》第四章课后习题答案.pdf
- 微分方程习题及答案.doc
- 微型计算机原理与接口技术(第三版)冯博琴主编 课后答案.doc
- 微型计算机原理及应用课后习题答案.pdf
- 机系统原理及应用_第五版_课后习题全部答案__周明德版.doc
- 微机原理(何小海)习题解答.pdf
- 微机原理与接口技术 第二版 (周明德) 课后题答案.doc
- 微机原理与接口技术(楼顺天版)课后习题解答.pdf
- 微机原理与接口技术习题答案.doc
- 微机原理与接口技术习题答案2-9(朱红_著)1.doc
- 微机原理与接口技术习题答案第五版.pdf
相关文档
- 施工规范CECS140-2002给水排水工程埋地管芯缠丝预应力混凝土管和预应力钢筒混凝土管管道结构设计规程
- 施工规范CECS141-2002给水排水工程埋地钢管管道结构设计规程
- 施工规范CECS142-2002给水排水工程埋地铸铁管管道结构设计规程
- 施工规范CECS143-2002给水排水工程埋地预制混凝土圆形管管道结构设计规程
- 施工规范CECS145-2002给水排水工程埋地矩形管管道结构设计规程
- 施工规范CECS190-2005给水排水工程埋地玻璃纤维增强塑料夹砂管管道结构设计规程
- cecs 140:2002 给水排水工程埋地管芯缠丝预应力混凝土管和预应力钢筒混凝土管管道结构设计规程(含条文说明)
- cecs 141:2002 给水排水工程埋地钢管管道结构设计规程 条文说明
- cecs 140:2002 给水排水工程埋地管芯缠丝预应力混凝土管和预应力钢筒混凝土管管道结构设计规程 条文说明
- cecs 142:2002 给水排水工程埋地铸铁管管道结构设计规程 条文说明