




已阅读5页,还剩34页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
汇编语言程序设计教程(第二版)习题参考答案第1章 计算机基础知识1. 计算机的应用分哪几个方面,请举例说明书中未提到的领域的计算机应用。科学计算、数据处理、计算机控制、计算机辅助设计、人工智能、企业管理、家用电器、网络应用。书中未提及的如:远程教育、住宅小区控制、飞行系统控制与管理等。2. 简述计算机的发展过程,请查阅相关资料,列出微机的发展过程。电子管、晶体管、集成电路、大规模集成电路以IBM为例,微机的发展:4004、8008、8080、8086/8088、80286、80386、80486、Pentium系列3. 计算机的字长是怎么定义的,试举例说明。计算机能同时处理二进制信息的位宽定义为计算机的字长。如8086能同时进行16位二进制数据的运算、存储和传输等操作,该机器的字长为16位。4. 汇编语言中的基本数据类型有哪些?数值型数据和非数值型数据。非数值数据如字符、字符串、逻辑值等。5. 简述定点数和浮点数的区别。指标定点数浮点数表示范围较小比定点数范围大精度决定于数的位数规格化时比定点高运算规则简单运算步骤多运算速度快慢控制电路简单,易于维护复杂,难于维护成本低高程序编制选比例因子,不方便方便溢出处理由数值部分决定由阶码大小判断6. 按要求完成进制转换。(1)7BCH=011110111100B=1980D(2)562Q=101110010B=370D(3)90D=01011010B=5AH(4)1110100.111B=164.7Q=74.EH7. 当字长为八位时,写出下列各数的原码、补码和反码真值原码反码补码25000110010001100100011001- 25100110011110011011100111100011001000110010001100100- 1001110010010011011100111008. 列出数字09、大写字母AZ及小写字母az的ASCII码值。30H39H 41H5AH 61H7AH9. 在汇编语言中,如何表示二进制、八进制、十进制和十六进制的数值?用相应进制的数值加上进制标记即可。二进制用B,如10101010B八进制用Q,如437Q。十进制用D或不用,如54D,或54。十六进制用H,如27A8H10. 完成下列二进制数的加减运算。(1)10101010 + 11110000 (2)11001100 + 01010100 =110011010 =100100000(3)11011010 - 01010010 (4)11101110 - 01001101 =10001000 =1010000111. 完成下列十六进制数的加减运算。(1)0FEA9 - 8888=7621H (2)0FFFF - 1234=EDCBH(3)0EAC0 + 0028=EAE8H (4)3ABC + 1678=5134H12. 完成下列BCD码的运算。(1)3+5 =8 0011+0101=1000 不用进行十进制调整(2)4+7 =110100+0111=1011 此码不是BCD码,需要进行十进制调整1011+0110=10001=0001,0001(3)6+5 =110110+0101=1011 此码不是BCD码,需要进行十进制调整1011+0110=10001=0001,0001(4)8+8 =161000+1000=10000 此码不是BCD码,需要进行十进制调整10000+0110=10110=0001,0110第2章 微型计算机系统概述1. 说明二进制位(bit),字节(byte),字(word),双字(double word)的含义及相互之间的关系。位(bit):一个二进制位字节(byte):8位二进制位字(word):一般为机器字长,在8086机器中为16位二进制位,即两个字节。双字(double word):双倍字长,在8086机器中为32位二进制位。2. 一台微型计算机,数据线有8根,地址线有16根,如果采用字节编址,那么它可以访问的最大存储空间是多少字节?试用十六进制数表示该机的地址范围。216 = 64KB,0000HFFFFH3. 8088CPU内部分为哪两个大的功能部件?试述这两个部件的作用是什么?8088微处理器内部分为执行单元(EU)和总线接口单元(BIU)两部分。BIU单元用来实现EU的所有总线操作。它由地址加法器,段寄存器CS、DS、SS、ES,指令指针IP,指令队列缓冲器和总线控制逻辑组成。BIU负责CPU与存储器或外部设备之间的信息交换。地址加法器将段和偏移地址相加,生成20位的物理地址。EU单元负责指令的执行,由算术逻辑单元ALU、标志寄存器F、通用寄存器及EU控制器等组成,主要进行16位的各种运算及有效地址的计算。EU不与计算机系统总线相关,而从BIU中的指令队列取得指令。这个指令队列中,存放着BIU预先由存储器中取出的若干个字节的指令。4. 8088微处理器中有哪些寄存器?说明它们的功能及分组情况。5. 8086的寄存器中,有哪些16位寄存器可分为两个8位寄存器来使用?AX(AH,AL)、BX(BH,BL)、CX(CH,CL)、DX(DH,DL)6. 8086/8088的标志寄存器F中有哪些标志位?它们的名称和功能是什么?CF进位标志(Carry Flag)。若CF=1,表示算术运算时产生进位或借位,否则CF=0。移位指令会影响CF。PF奇偶标志(Parity Flag)。若PF=1,表示操作结果中“1”的个数为偶数,否则PF=0。这个标志位主要用于检查数据传送过程中的错误。AF辅助进位标志(Auxiliary Carry Flag)。若AF=1表示字节运算产生低半字节向高半字节的进位或借位,否则AF=0。辅助进位也称半进位标志,主要用于BCD码运算的十进制调整。ZF全零标志(Zero Flag)。若ZF=1,表示操作结果全为零,否则ZF=0。SF符号标志(Sign Flag)。若SF=1,表示符号数运算后的结果为负数,否则SF=0。OF溢出标志(Overflow Flag)。若OF=1,表示当进行算术运算时,结果超过了最大范围,否则OF=0。IF中断允许标志(Interrupt Enable Flag)。若IF=1,则CPU可以响应外部可屏蔽中断请求;若IF=0,则CPU不允许响应中断请求。IF的状态可由中断指令设置。DF方向标志(Direction Flag)。若DF=1,表示执行字符串操作时按着从高地址向低地址方向进行;否则DF=0。DF位可由指令控制。TF单步标志(Trace Flag)。又称跟踪标志。该标志位在调试程序时可直接控制CPU的工作状态。当TF=1时为单步操作,CPU每执行一条指令就进入内部的单步中断处理,以便对指令的执行情况进行检查;若TF=0,则CPU继续执行程序。7. 80386有哪几种工作方式?简述每种工作方式的特点。80386有三种工作方式:实地址方式、保护方式和虚拟8086方式。实地址方式80386在实地址方式下的工作原理与8086相同,主要差别是80386可以处理32位的数据,如进行32位的寄存器的运算,以及偏移地址在64KB以内的32位的数据传送。另外,在实地址方式下80386新增加的两个段寄存器FS和GS是可用的。实地址方式是80386复位后立即出现的工作方式。保护方式80386在保护方式下可以访问4G字节的物理存储空间,段的长度在启动页功能时是4G字节,不启动页功能时是1M字节,页功能是可选的。在此方式下,可以引入虚拟存储器的概念,以扩充软件所占有的存储器空间。保护方式是支持多任务的方式,提供了一系列的保护机制,如任务地址空间的分离、03共四个特权级、特权指令、段和页的访问权限(只读或只执行等)以及段限检查。虚拟8086方式这是一种既有保护功能,又能执行8086代码的工作方式,是一种动态方式。在此方式下,80386能够迅速、反复进行虚拟8086方式和保护方式的切换。从保护方式进入虚拟8086方式执行8086程序,然后离开虚拟8086方式,进入保护方式继续执行固有的80386程序。8. 80486有哪些寄存器?简述各寄存器的功能。表2-4 80486的寄存器组基本结构寄存器组系统级寄存器组浮点寄存器组通用寄存器指令指针寄存器标志寄存器段寄存器系统地址寄存器控制寄存器测试寄存器调试寄存器数据寄存器标记字寄存器指令和数据指针寄存器控制字寄存器9. Pentium有哪些主要的寄存器,简述各组寄存器的功能。Pentium的寄存器组织可以分成三大类,即基本寄存器组、系统寄存器组和浮点寄存器组。其中系统寄存器组只供系统程序访问,其他两组寄存器则供系统程序和应用程序共同访问。Pentium微处理器对80486的寄存器作了一些扩充。EFLAGS标志寄存器增加了两位:VIF(位19)和VIP(位20),它们用于控制Pentium虚拟8086方式扩充部分的虚拟中断。控制寄存器CR0的CD位和NW位被重新定义以控制Pentium的片内高速缓存,并新增了CR4控制寄存器对80486结构扩充。此外,还增加了几个模式专用寄存器,用于控制可测试性、执行跟踪、性能检测和机器检查错误等功能。10. 在8086系统中,段地址和偏移地址如下所示,请分别计算它们的物理地址。(1)F000:0100 物理地址为:F0000H+0100H=F0100H(2)2350:1ABC物理地址为:23500H+1ABCH=24FBCH(3)3200:1234物理地址为:32000H+1234H=33234H(4)5000:010E物理地址为:50000H+010EH=5010EH(5)10E0:2020物理地址为:10E00H+2020H=12E20H(6)2010:1020物理地址为:20100H+1020H=21120H(7)1000:1000物理地址为:10000H+1000H=11000H(8)C0C0:C0C0物理地址为:C0C00H+C0C0H=CCCC0H11. 从8086开始的所有80x86系列微机系统中,寻址内存的地址总线有多少位?内存的寻址范围为多少?数据宽度为多少?机型地址总线宽度内存地址范围数据总线宽度808620位00000HFFFFFH16位8028624位000000HFFFFFFH16位8038632位00000000HFFFFFFFFH32位8048632位00000000HFFFFFFFFH32位Pentium32位00000000HFFFFFFFFH64位12. 简述上题所涉及的各种微机系统的内存组织方式。8086:存储器分段管理。80286:存储器分段管理,在保护方式下,存储器寻址使用32位指针,包含一个16位的选择子分量和一个16位的偏移量分量。但选择子的内容不再是一个物理存储器的地址的高16位,而是进入某一个存储器常驻表的变址值,所要求的段的24位段基地址要从存储器中的表内取得。16位偏移量用来加到段基址上,形成24位的物理地址80386:CPU可直接寻址的物理空间达4GB,除了保留存储器分段管理外,还增加了内存分页管理。80386的段选择寄存器是在80286选择寄存器基础之上新增了两个支持当前数据段的段选择寄存器FS和GS,与段选择寄存器相关联的段描述符高速缓冲器扩充到64位。80486:80486具有32位的内存地址空间,对存储器段的访问采用段描述符管理机制。具有三种工作方式,即实地址方式、虚拟地址保护方式和虚拟8086方式。在虚拟地址保护方式下,可寻址4GB物理地址空间以及64TB虚拟地址空间。80486内部的存储器管理部件MMU由分段部件和分页部件组成。分段部件用来把指令给出的逻辑地址转换成线性地址,并对逻辑地址空间进行管理,实现多任务之间存储器空间的隔离和保护,同时也实现了指令和数据区的再定位。分页部件用来把线性地址转换成物理地址,并对物理地址空间进行管理,实现虚拟存储器技术。Pentium:地址总线仍为32位,因此物理寻址范围仍为4GB。Pentium微处理器在工作方式方面,还增加了一种“系统管理方式(SMM)”,以实现对电源和OS进行管理等高级功能。13. 简述从8086到Pentium微处理器在组成结构上的变化,分析这些变化,你能得出什么结论?8086:8086微处理器内部分为执行单元(EU)和总线接口单元(BIU)两部分。BIU单元用来实现EU的所有总线操作,EU单元负责指令的执行。80286:在内部结构上,8086中的总线接口部件BIU在80286中又分成了地址部件AU、指令部件IU和总线部件BU,从而加快了处理器的运行速度。80386:80386的内部结构由总线接口单元、指令预取部件、指令译码部件、执行部件、分段部件和分页部件6个逻辑功能部件组成,每个部件都能独立操作,又可以对同一条指令的不同部分同时并行操作,使多条指令重叠进行,大大提高了CPU的速度。80386是对80286微处理器的彻底改进,在内存管理和处理速度上比80286之前的CPU有了很大的突破,是一种功能完善高可靠性的CPU,并在目标代码上保持与8086、80286的向上兼容。80486:80486芯片的内部结构由总线接口、高速缓存、指令预取、指令译码、控制、算术逻辑运算、浮点运算、分段和分页九大部件组成。这些部件可以重叠工作,并构成五级流水线的指令处理。芯片内具有8KB的数据/指令高速缓存Cache,可为频繁访问的数据和指令提供高速缓存,从而加快CPU与存储器之间的信息交换。片内集成了浮点运算部件,可支持32位、64位和80位的浮点算术运算。由于与CPU之间的数据通道总线加宽,而引线缩短,它们之间的信息交换速度也得到提高。片内具有存储管理部件MMU,可支持对存储器地址实施管理和对存储器空间进行保护。Pentium:Pentium微处理器的基本组成包括总线接口部件、分页部件、片内Cache存储器、浮点部件、控制部件、执行部件以及分支目标缓冲器等。Pentium提供了一个称为分支目标缓冲器BTB(Branch Target Buffer)的1KB的Cache来动态地预测程序的分支操作。Pentium芯片内部集成了16KB的Cache,其中8KB作为数据Cache,另外8KB作为指令Cache,这两个超高速的Cache可以并行工作。将指令Cache和数据Cache分离的目的是使指令预取和数据操作之间可能发生的冲突降至最低,从而提高CPU的效率。浮点指令流水线具有8级,实际上它是U流水线的扩充。U流水线的前4级用来准备一条浮点指令,浮点部件中的后4级执行特定的运算操作并报告执行错误。CPU内部的功能部件数量增加,集成度依次提高,将某些原在CPU外部的功能部件集成到CPU内部,功能越来越完善。第3章 微型计算机的指令系统1. 8086/8088指令系统中操作数的类型有哪几种?关于操作数的寻址方式有哪几类?立即数、寄存器数和内存单元数。 立即寻址、寄存器寻址、寄存器间接寻址、直接寻址、寄存器相对寻址、基址加变址寻址、基址加变址相对寻址。2. 指出段地址、偏移地址与物理地址之间的关系。有效地址EA又是指什么?段地址左移四位加上偏移地址形成20位的物理地址。 EA是指段内偏移地址,即表示段内某单元相对于段起始地址的空间位置。3. 指出能用于寄存器间接寻址及变址寻址的寄存器有哪些?它们通常与哪个段寄存器配合形成物理地址?能用于寄存器间接寻址及变址寻址的寄存器有基址寄存器BX和BP,变址寄存器SI和DI,BX、SI、DI与DS配合形成物理地址,而BP与SS配合形成物理地址。4. 与8086相比,80386的堆栈操作类指令有那些改变?80386的堆栈操作指令格式功能PUSH 32位立即数将32位立即数压入堆栈。该指令执行后SP的值将减4。PUSHAD将所有通用寄存器EAX、ECX、EDX、EBX、ESP、EBP、ESI和EDI的内容顺序压入堆栈,其中压入堆栈的ESP是该指令执行前ESP的值。执行该指令后,ESP的值减32。POPAD将当前栈顶内容顺序弹至EDI、ESI、EBP、ESP、EBX、EDX、ECX和EAX,但是最终ESP的值为弹出操作对堆栈指针调整后的值(而不是堆栈中保存的ESP的值)。即执行该指令后ESP的值,可以通过增加32来恢复。PUSHFD将32位标志寄存器EFLAGS的内容压入堆栈。POPFD将当前栈顶的4字节内容弹至EFLAGS寄存器。5. 简述80386微处理器中“系统设置和测试指令”的功能。系统设置和测试指令80386新增加的,它们一般出现在操作系统中,用于对系统的设置和测试。(1)清除TS标志指令CLTS,这条指令用来清除机器状态字中的任务切换标志TS。(2)存储全局/局部/中断描述符表寄存器指令SGDT/SLDT/SIDT,这三条指令分别将全局描述符表寄存器、局部描述符表寄存器或中断描述符表寄存器的内容送到存储器中。(3)装入全局/局部/中断描述符表寄存器指令LGDT/LLDT/LIDT,这三条指令分别将存储器中的字节装入全局描述符表寄存器、局部描述符表寄存器或中断描述符表寄存器。局部描述符表寄存器为两个字节,其他两个寄存器为六字节宽。(4)存储任务寄存器指令STR,例如:STR EBX ;将任务寄存器的两个字节内容送到内存,内存首字节地址由EBX指出。(5)装入任务寄存器指令LTR,这条指令一般用于多任务操作系统中,它将内存中两个字节装入任务寄存器TR。执行LTR指令后,相应的任务状态段TSS标上“忙”标志。(6)装入访问权指令LAR,本指令将两个字节选择子中的访问权字节送到目的寄存器。(7)装入段界限值指令LSL,LSL将描述符中的段界限值送目的寄存器,在指令中,由选择子来指出段描述符。(8)检测段类型指令VERR/VERW,VERR检测一个选择子所对应的段是否可读,VERW则检测一个选择子所对应的段是否可写。(9)调整请求特权级指令ARPL,这条指令的功能为调整选择子的RPL字段,由此常用来阻止应用程序访问操作系统中涉及安全的高级别的子程序。ARPL的第一个操作数可由存储器或寄存器指出,第二个操作数则必定为寄存器。如果前者的RPL(最后两位)小于后者的RPL,则ZF置为1,且将前者的RPL增值,使其等于后者的RPL;否则,ZF=0,并不改变前者的RPL。(10)存储机器状态字指令SMSW,将机器状态字MSW存到内存指定单元对应的两个字节中。(11)装入机器状态字指令LMSW本指令将存储器中两个字节送到机器状态字MSW中,通过这种方式,可以使CPU切换到保护方式。6. 列出80486和Pentium微处理器新增加的指令,并简述每条指令的功能。除了浮点操作指令系统外,80486新增加了6条指令。(1) BSWAP双字交换。使32位寄存器中的操作数按字节首尾交换,即D31D24与D7D0交换,D23D16与D15D8交换。(2) XADD将源操作数与目的操作数交换并相加,其中源操作数必须为寄存器,而目的操作数可以是寄存器也可以是内存单元,然后相加,其结果存放在源寄存器中。(3) CMPXCHG比较与交换。该指令使用3个操作数:一个寄存器中的源操作数、一个寄存器或内存储器单元的目的操作数和一个隐含(不出现在用户所书写的指令中)的累加器(AL/AX/EAX)。如果目的操作数与累加器的值相等,源操作数送目的单元,否则将目的操作数送累加器。(4) INVDCache无效指令。擦除整个片内Cache,使之无效,并且启动一个擦除总线周期,使外部电路清除片外二级Cache的内容。(5) WBINVDCache无效且回写指令。擦除整个片内Cache,使之无效,并启动一个回写总线周期,将片外二级Cache中的数据回写到内存中,再清除二级Cache中的内容。(6) INVLPG转换检测缓冲器TLB无效指令。该指令带有一个操作数,指示TLB中的某一项,使之无效。与80486相比,Pentium新增加了3条处理器专用指令和5条系统控制指令,但某些新增的指令是否有效与Pentium的型号有关,可利用处理器特征识别指令CPUID判别处理器是否支持某些新增指令。1、处理器特征识别指令CPUID根据EAX中的参数,将处理器的说明信息送EAX,特征标志字送EDX。2、8字节比较交换指令CMPXCHG8B该指令带有一个内存储器单元操作数。它能实现将EDX:EAX中的8字节值与指定的8字节存储器操作数相比较,若相等,则使ZF=1,且将ECX:EBX中的值送指定的8字节存储单元替换原有的存储器操作数;否则使ZF=0,且将指定的8字节存储器操作数送EDX:EAX。3、读时间标记计数器指令RDTSC将Pentium中的64位时间标记计数器的高32位送EDX,低32位送EAX。该计数器随每一个时钟递增,在Reset后该计数器被置0。利用该计数器可检测程序运行性能。4、读模型专用寄存器指令RDMSR将ECX所指定的模型专用寄存器的内容送EDX、EAX,具体来说,高32位送EDX,低32位送EAX。若所指定的模型寄存器不是64位,则EDX、EAX中的对应位无定义。5、写模型专用寄存器指令WRMSR将EDX、EAX的内容送到由ECX指定的模型专用寄存器。具体来说,EDX和EAX的内容分别作为高32位和低32位。若指定的模型寄存器有未定义或保留的位,则这些位的内容不变。6、复位到系统管理模式指令RSM7、将32位寄存器中的内容送控制寄存器CR4的指令格式为:MOV CR4,R32 8、将控制寄存器CR4的内容送32位寄存器的指令格式为:MOV R32,CR47. 什么是堆栈操作?以下关于堆栈操作的指令执行后,SP的值是多少?PUSH AXPUSH CXPUSH DXPOP AXPUSH BXPOP CXPOP DX堆栈被定义为一种先进后出的数据结构,即最后进栈的元素将被最先弹出来。堆栈从一个称为栈底的位置开始,数据进入堆栈的操作称为压入(或压栈),数据退出堆栈的操作称为弹出,每进行一次弹出操作,堆栈就减少一个元素,最后一次压入的元素,称为栈顶元素,压入弹出操作都是对栈顶元素进行的堆栈的两种基本的操作。在进行以上一系列堆栈操作后,SP指针的值是原SP+2。8. 用汇编语言指令实现以下操作。(1) 将寄存器AX、BX和DX的内容相加,和放在寄存器DX中。ADD AX,BXADD DX,AX(2) 用基址变址寻址方式(BX和SI)实现AL寄存器的内容和存储器单元BUF中的一个字节相加的操作,和放到AL中。ADD AL,BYTE PTR BXSI(3) 用寄存器BX实现寄存器相对寻址方式(位移量为100H),将DX的内容和存储单元中的一个字相加,和放到存储单元中。ADD 100HBX,DX(4) 用直接寻址方式(地址为0500H)实现将存储器中的一个字与立即数3ABCH相加,和放回该存储单元中。ADD 0500H,3ABCH(5) 用串操作指令实现将内存定义好的两个字节串BUF1和BUF2相加后,存放到另一个串BUF3中的功能。MOV CX,COUNTMOV SI,OFFSET BUF1MOV DI,OFFSET BUF3MOV BX,OFFSET BUF2AGAIN:LODSBADD AL,BXSTOSBINC BXDEC CXJNZ AGAIN9. 指出下列指令中,源操作数及目的操作数的寻址方式。(1) SUB BX,BP+35 ;寄存器寻址、寄存器相对寻址(2) MOV AX,2030H ;寄存器寻址、立即寻址(3) SCASB ;隐含操作数为寄存器寻址和寄存器间接寻址(4) IN AL,40H ;寄存器寻址、立即寻址(5) MOV DI+BX,AX ;基址加变址寻址、寄存器寻址(6) ADD AX,50HDI ;寄存器寻址、寄存器相对寻址(7) MOV AL,1300H ;寄存器寻址、直接寻址(8) MUL BL ;寄存器寻址、目的操作数为隐含寄存器寻址10. 已知(DS)= 1000H,(SI)= 0200H,(BX)= 0100H,(10100H)= 11H,(10101H)= 22H,(10600H)= 33H,(10601H)= 44H,(10300H)= 55H,(10301H)= 66H,(10302H)= 77H,(10303H)= 88H,试分析下列各条指令执行完后AX寄存器的内容。(1) MOV AX,2500H (AX)=2500H(2) MOV AX,500HBX (AX)=4433H(3) MOV AX,300H (AX)=6655H(4) MOV AX,BX (AX)=2211H(5) MOV AX,BXSI (AX)=6655H(6) MOV AX,BX+SI+2 (AX)=8877H11. 判断下列指令是否有错,如果有错,说明理由。(1) SUB BL,BX ;两个操作数的宽度不一样(2) MOV BYTE PTRBX,3456H ;将16位的立即数传送到一个字节的内存单元(3) SHL AX,CH ;移位指令的移位位数用CL给出,不能用CH。(4) MOV AH,SIDI ;不能用两个变址寄存器来实现寻址操作(5) SHR AX,4 ;只有当移位位数为1时,才能用立即数表达(6) MOV CS,BX ;不能对CS实现传送操作(7) MOV 125,CL ;立即数不能做目的操作数(8) MOV AX,BYTE PTRSI ;源操作数限定为字节,与目的操作数宽度不一致(9) MOV DI,SI ;两个操作数不能同时为内存数12. 设(DS)= 1000H,(ES)= 2000H,(SS)= 3000H,(SI)= 0080H,(BX)= 02D0H,(BP)= 0060H,试指出下列指令的源操作数字段是什么寻址方式?它的物理地址是多少?(1) MOV AX,0CBH 立即寻址(2) MOV AX,100H 直接寻址,物理地址为:10100H(3) MOV AX,BX 寄存器间接寻址,物理地址为:102D0H(4) MOV AX,BP 寄存器间接寻址,物理地址为:20060H(5) MOV AX,BP+50 寄存器相对寻址,物理地址为:200B0H(6) MOV AX,BXSI 基址加变址寻址,物理地址为:10350H13. 分别说明下列每组指令中的两条指令的区别.(1) AND CL,0FH 按位相“与”,高4位为“0000”,低4位保留原值;OR CL,0FH 按位相“或”,高4位为原值,低4位为“1111”。(2) MOV AX,BX 将BX寄存器的内容传送到AX寄存器中;MOV AX,BX 将BX寄存器所指的内存单元的内容送AX寄存器中。(3) SUB BX,CX BX寄存器内容减去CX寄存器的内容,结果送回到BX;CMP BX,CX BX内容减去CX内容,但结果不送回,而根据标志位的情况做进一步的动作。(4) AND AL,01H AL内容与01H相“与”,结果为“0000000x”送回AL寄存器;TEST AL,01H AL内容与01H相“与”,结果为“0000000x”不送回AL寄存器,而根据标志位(ZF)情况做进一步的动作。(5) JMP NEAR PTR NEXT NEXT所指指令在当前指令的同段内(16位地址范围);JMP SHORT NEXT NEXT所指指令在当前指令的8位地址范围内。(6) ROL AX,CL 循环左移,进位标志位不参与循环;RCL AX,CL 循环左移,进位标志位参与循环。(7) PUSH AX 将AX内容存入栈顶指针处,即进栈操作;POP AX 将栈顶内容弹出装入AX寄存器中,即出栈操作。14. 试分析以下程序段执行完后BX的内容为何?MOV BX,1030HMOV CL,3SHL BX,CLDEC BX程序执行完后,BX=817FH,执行过程如下。15. 写出下列指令序列中每条指令的执行结果,并在DEBUG环境下验证,注意各标志位的变化情况。MOV BX,126BHADD BL,02AHMOV AX,2EA5HADD BH,ALSBB BX,AXADC AX,26HSUB BH,-8第4章 8086/8088汇编语言1. 8086汇编语言指令由几部分组成?各部分的作用是什么?名字 指令操作符 操作数 ;注释名字可以是常量名、变量名、过程名、段名等标识符等,起标识和标记的作用;指令操作符字段说明指令的功能;操作数字段提供指令操作所需要的源数据和目的数据;注释字段用于程序员对语句或程序段落进行解释说明,增加可读性。2. 请解释变量和标号的含义,两者有何区别?所定义内存单元的名称为变量,可进行读、写操作,一般为数据区。标号是某条指令的地址标记,在代码段。3. 试描述汇编语言源程序的一般结构。STACK SEGMENT STACK DW 256 DUP(?)STACK ENDSDATA SEGMENTDATA ENDSCODE SEGMENT ASSUME CS:CODE,SS:STACK,DS:DATASTART:CODE ENDS END START4. 开发汇编语言源程序的主要步骤有哪些?首先用EDIT等编辑程序产生汇编语言的源程序,源程序是用汇编语言的语句编写的且不能为机器所识别的程序,所以要经过汇编程序加以翻译,因此汇编程序的作用就是把源文件转换成用二进制代码表示的目标文件(称为OBJ文件)。在转换的过程中,如果源程序中有语法错误,则汇编结束后,汇编程序将指出源程序中的错误信息,如非法格式,未定义的助记符、标号,漏掉操作数等。用户还可以用编辑程序来修改源程序中的错误,最后得到无语法错误的目标文件。目标文件虽然已经是二进制文件,但它还不能直接上机运行,必须经过连接程序(LINK)把目标文件与库文件或其他目标文件连接在一起形成可执行文件(EXE文件),才可以在机器上运行。5. 数值返回运算符有哪几种?简述LENGTH与SIZE的区别。数值返回运算符有TYPE、LENGTH、SIZE、OFFSET和SEG5种。这些操作符把一些特征或存储器地址的一部分作为数值回送,但不改变原操作数的属性。其中:TYPE是类型操作符。LENGTH是分配单元长度操作符。SIZE是分配字节操作符。OFFSET是偏移量操作符。SEG是段基址操作符。且有关系:SIZE=TYPE*LENGTH。6. 在BUF1变量中依次存储了5个字数据,接着定义了一个名为BUF2的字单元,表示如下:BUF1 DW 8765H,6CH,0,1AB5H,47EAHBUF2 DW ?(1) 设BX中是BUF1的首地址,请编写指令将数据50H传送给BUF2单元。ADD BX,10MOV WORD PTRBX,50H(2) 请编写指令将数据FFH传送给数据为0的单元。ADD BX,4MOV WORD PTRBX,FFH7. 下面是一个数据段的定义,请用图表示它们在内存中存放的形式。DATA SEGMENTA1 DB 25H,35H,45HA2 DB 3 DUP(5)A3 DW 200,3AB6HA4 DW 3000H,6A6FHDATA ENDSA125H35H45HA205H05H05HA300H02HB6H3AHA400H30H6FH6AH8. 说明下列语句所分配的存储空间及初始化的数据值。(1)BYTE_VAR DB BYTE,21,-42H,3 DUP(0,?,2 DUP(2,3),?)(2)WORD_VAR DW 5 DUP(4,2,0),?,-8,BY,TE256HBYTE_VAR42HWORD_VAR04H59H00H54H02H45H00H15H00H10111110B00H004H00H202H300H200H300H04H000H02H200H300H200H304H00H002H00H200H300H204H300H02H00H00H00H11111000B11111111B42H59H54H45H56H02H9. 在下列数据传送程序段中有些使用不当的语句,请改正之。A DB 10H,20H,OPQ,4FHB DB N DUP(?) ;改为B DB 6 DUP(?)MOV DI,A ;改为MOV DI,OFFSET AMOV SI,B ;改为MOV SI,OFFSET BMOV CX,LENGTH A ;改为MOV CX,LENGTH BCC: MOV AX,DIMOV SI,AXINC SIINC DIDEC CX ;去掉该句LOOP CC10. 以下程序段落拟实现在同一个段内的调用过程,试判断可行性,如不能实现,请改正。CODE SEGMENT ASSUME CS:CODEBEGIN: CALL SUB1 CALL SUB2 SUB1 PROC FAR MOV AX,X MOV BX,Y MUL BX RETSUB1 ENDPCODE ENDS END STARTSUB1应为NEAR型,过程SUB2并未定义,应定义SUB2。程序段落改为:CODE SEGMENT ASSUME CS:CODEBEGIN: CALL SUB1 CALL SUB2 SUB1 PROC NEAR MOV AX,X MOV BX,Y MUL BX RETSUB1 ENDPSUB2 PROC NEAR RETSUB2 ENDPCODE ENDS END BEGIN11. 有一个数据段定义了如下6个变量,请写出该数据段。(1)BUF1为十进制数字节变量:64;(2)BUF2为字符串变量:Teacher;(3)BUF3为十六进制数字节变量:2FH;(4)BUF4为双字变量:657AH;(5)BUF5为字变量:657AH;(6)BUF6为二进制数字节变量:10101101B。DATA SEGMENT BUF1 DB 64BUF2 DB TeacherBUF3 DB 2FHBUF4 DD 657AHBUF5 DW 657AHBUF6 DB 10101101B第5章 高级汇编技术1. 何谓宏指令?宏指令在程序中如何被调用?宏指令定义和子程序有什么区别?在编写程序过程中,若遇到一些要多次使用的程序段,为了简化程序,通常采用定义子程序的方法,同样,也可以采用宏定义的方法来达到这个目的。宏定义是源程序中一段有独立功能的程序代码。但必须先将这一段程序定义为一条宏指令,并具有一个相应的宏指令名,在程序中就可以多次调用它,调用时只需要引用一个宏指令名来代替这一段程序就可以了。宏定义:格式为:宏名 MACRO 形参表 (宏体) ENDM子程序定义:格式为:过程名 PROC 类型 (过程体)过程名 ENDP2. 结构数据类型如何说明?结构变量如何定义?结构字段如何引用?定义结构的格式为:结构名 STRUC字段名 (数据类型定义语句) 结构名 ENDS定义结构变量:结构变量名 结构名 字段值表引用结构变量的一般格式为:结构变量名引用结构变量的字段的一般格式为:结构变量名字段名3. 试述宏指令与子程序的区别。宏与子程序有本质的区别,主要反映在调用方式、传递参数和使用细节上。子程序和宏定义都可以节省存储空间及程序设计所花的时间,可提供模块化程序设计的条件,便于程序的调试及修改等。但是在子程序结构中,为转子程序和返回、保存及恢复寄存器以及参数的传递等操作都要增加程序的开销,这些操作所消耗的时间以及它们所占用的存储空间,都是为取得子程序结构使程序模块化的优点而增加的额外开销。因此,在子程序本身较短或者是需要传递的参数较多的情况下使用宏汇编技术。子程序是在程序执行期间由主程序调用的,它只占有它自身大小的一个空间,它不仅是源程序级别的简化,还是目标程序级的简化,形成的目标代码较短;而宏调用则是在汇编期间展开的,每调用一次就把宏定义体展开一次,它是源程序级的简化。因而它占有的存储空间与调用次数有关,调用次数越多则占有的存储空间也越大。如果宏调用次数较多的话,则其空间上的开销也是应该考虑的因素。宏调用的参数通过形参、实参结合实现传递,简洁直观、灵活多变。子程序需要利用寄存器、存储单元或堆栈等传递参数。对宏调用来说,参数传递错误通常是语法错误,会由汇编程序发现;而对子程序来说,参数传递错误通常反映为逻辑或运行错误,不易排除。4. 用条件汇编实现:如果AL寄存器的值小于20,则对语句块1进行汇编,否则对语句块2进行汇编。IF AL LT 20语句块1ELSE语句块2ENDIF5. 记录数据类型如何说明?简述MASK和WIDTH运算符的功能。 RECORD := ,:=说明:记录定义时,记录名和字段名不能省略。字段的宽度是指相应字段占的二进制位数,且所有的字段宽度之和不能大于16。如宽度之和大于8位,该记录按字处理,否则按字节处理。表达式是给字段赋的初值。MASK运算符返回一个8位或16位的二进制数,在这个数中,记录字段名所指定的字段的对应位为1,其他位为0。WIDTH运算符返回记录长度或记录字段在记录中所占的二进制位数。6. 定重复汇编与不定重复汇编有哪些区别?定重复汇编使汇编程序对重复体作重复汇编,
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年河南省郸城县中考一模历史试题(原卷版+解析版)
- 【HKIMR】2025生成式AI时代下的金融服务推进负责任应用报告
- 2024北京铁二中初一(下)期中数学试题及答案
- 湖南省株洲市景美高级中学2024-2025学年高一下学期入学考试历史试题(解析版)
- 旅游业新战略探讨
- 2025劳动合同范本格式
- 2025咖啡店店面装修合同
- 简游(视觉享受软件)APP项目策划书
- 《环境控制综合回顾》课件
- 《碳水化合物与能量代谢》课件
- 沪科版八年级物理《5.1-质量》课件
- 2023年东莞市网格员招聘笔试题库及答案解析
- 工龄认定文件
- 老旧小区改造要素设计课件
- 超市供应商合同:超市采购合同样本超市供应商超市食品供应商合同
- 6σ西格玛质量管理培训课程课件
- 脱硫调试方案计划
- 物业绿化养护方案绿化管理方案
- 2022年平凉市第二人民医院医护人员招聘笔试试题及答案解析
- 2023年河南工业职业技术学院单招综合素质考试笔试题库及答案解析
- 复变函数与积分变换教案
评论
0/150
提交评论