您好,欢迎访问三七文档
当前位置:首页 > 临时分类 > 以前的汇编语言期中试题及答案
试题A总9页第1页期中试题答案1.请写出8086CPU内部的16位寄存器的名称和各自的功能?(本题10分)程序可见的寄存器分为通用寄存器、专用寄存器、段寄存器3类。通用寄存器包括数据寄存器(AX、BX、CX、DX)、变址寄存器(SI、DI)、指针寄存器(SP、BP),专用寄存器包括指令指针寄存器(IP)和标志寄存器(FLAGS),段寄存器包括代码段寄存器(CS)、数据段寄存器(DS)、堆栈段寄存器(SS)、附加段寄存器(ES)。1.通用寄存器(1)数据寄存器AX(Accumulator)寄存器称为累加器。用途:它是算数运算的主要寄存器,在乘、除(MUL、IMUL、DIV、IDIV)指令中用来隐含地提供被乘数或被除数和存储结果;在扩展指令(CBW、CWD)中隐含地提供被扩展的操作数;在DOD和BIOS功能调用中,用AH存储指定调用功能号,AL存储指定调用子功能号;另外在所有的I/O指令(IN、OUT)中都使用这一寄存器和外部设备传送信息等。所以累加器(AX)使用频度最高,主要用于算术、逻辑运算以及与外设传送信息等。BX(BaseRegister)寄存器称为基址寄存器。用途:它可以作为普通的通用寄存器来使用,除此之外它常用来存储某一内存单元的偏移地址或偏移地址的一部分,偏移地址又叫有效地址或基地址,这也正是该寄存器名字的由来。它是4个16位数据寄存器中唯一一个能够用来存储存储器偏移地址的寄存器。CX(CountRegister)寄存器称为计数器。用途:一般在循环(LOOP)或串重复操作(REP、REPE、REPNE)等指令中用它作为的隐含计数器,控制指令重复循环的次数;在位操作(SHL、SHR、SAL、SAR、ROL、ROR、RCL、RCR)中,当移多位时,要用CL寄存器来存放移位的位数。DX(DataRegister)寄存器称为数据寄存器。用途:在16位机器中进行32位的算术运算时常用把DX和AX组合在一起存放双字数据,其中AX用来存放双字数据中的低字,而DX用来存放双字数据的高字,该双字可以表示成DX:AX;在进行乘、除运算时,它可作为默认的操作数参与运算和存储运算结果,在I/O指令中当外设端口地址大于255时,必须将外设端口地址存储到DX寄存器中,然后指令采用间接的寻址方式执行指令。(2)变址寄存器SI寄存器和DI寄存器称为变址寄存器(IndexRegister),它们是16位的寄存器,不能分成8位寄存器。变址寄存器除了可以当做普通的通用寄存器外,主要用途是用于存储某个存储单元的偏移地址或偏移地址的一部分。SI(SourceIndex)寄存器称为源变址寄存器,DI(DestinationIndex)寄存器称为目的变址寄存器。在字符串处理指令(MOVS、STOS、LODS、CMPS、SCAS)中,它们的主要用途是SI寄存器用来存储源字符串中字符所存储内存单元的偏移汇编语言程序设计试题A总9页第2页地址,DI寄存器用来存储目的字符串中字符所存储内存单元的偏移地址,并且在执行过程中SI和DI都具有自动增量或减量的功能,无需人工干预。(3)指针寄存器BP和SP寄存器称为指针寄存器(PointerRegister),它们同样是16位的寄存器,也不能分成8位寄存器。指针寄存器除了可以当做普通的通用寄存器外,它们的主要用途:是用于存放堆栈内存储单元的偏移地址。SP(StackPointer)寄存器称为堆栈指针寄存器,它的主要用途是用于存储当前堆栈中栈顶元素的偏移地址,入栈(PUSH)和出栈(POP)指令会自动修改它的值,从而实现访问堆栈中栈顶元素,用它可直接存取堆栈中的数据,该寄存器的内容机器自动修改,无需人工干预,也属于一个专用的寄存器。BP(BasePointer)为基址指针寄存器,它的主要用途是用于存储堆栈中某一存储单元的偏移地址,从而实现访问堆栈中非栈顶数据。通用寄存器可用于暂存数据,也可参与算术逻辑运算,并保存运算结果。除此之外,它们还各自具有一些规定的特殊用途。2.专用寄存器指令指针寄存器(IP)和标志寄存器(FLAGS),在汇编语言程序中不能直接引用寄存器名,寄存器的内容是由机器自动修改或根据指令执行的结果进行自动设置,不允许用户对它干预。(1)指令指针寄存器IP(InstructionPointer)称为指令指针寄存器。它的功能是存储下一条将要从主存中取出指令的偏移地址,也就是预取指令在内存中存储单元的偏移地址。在目标程序运行时,它始终指向下一条将要执行的指令,控制器一旦取得这条指令马上就修改IP寄存器的值,使它指向当前执行指令的下一条指令的偏移地址,IP寄存器的内容由微处理器硬件自动设置,程序不能直接访问IP,但一些指令却可改变IP的值,如转移指令(LOOP等)、子程序调用指令(CALL)等。(2)FLAGS寄存器FLAGS寄存器称为标志寄存器,又称为程序状态寄存器(Programstatusword,PSW),用来反映程序运行时CPU的状态信息,这个寄存器有6个状态(条件)标志位和3个控制标志位,某些指令执行后会对该寄存器的标志位产生影响。图2-17给出了16位标志寄存器的内容,图中没有标明的位暂时未用。1514131211109876543210OFDFIFTFSFZFAFPFCF图2-15标志寄存器1)状态标志位状态标志位用来记录程序运行结果的状态信息,根据许多指令的执行结果CPU都将相应地自动设置它的值。由于这些状态信息往往作为后续条件转移指令的转移控制条件,所以又称为条件标志位。它包括CF、PF、AF、ZF、SF和OF共6位。汇编语言程序设计试题A总9页第3页标志寄存器的第1位是进位标志CF(CarryFlag),主要用来反映运算结果是否向最高位产生进位(加法)或借位(减法)。如果运算结果的最高位产生了一个进位或借位时,CF位的值被置为1,否则CF位值为0。标志寄存器的第2位是奇偶标志位PF(ParityFlag),用来为机器中传送信息时可能产生的代码出错情况提供检验条件,在数据传送过程中,如果采用奇偶校验的方法来提高数据传送的可靠性,就可使用该标志位。当运算结果的低8位中1的个数是0个或偶数个的时候,PF位的值被置为1,否则PF位值为0。注意,奇偶标志位PF的值只与运算结果的低8位有关,无论运算结果是多少位的。标志寄存器的第4位是辅助进位标志AF(AuxiliaryCarryFlag),当进行算数运算时低4位向高4位进位(加法)或借位(减法)时,AF位的值被置为1,否则AF位的值为0。这个标志主要由处理器内部使用,用于十进制算术运算指令中,用户一般不必关心。标志寄存器的第6位是零标志位ZF(ZeroFlag),当运算结果等于0时,ZF位的值被置为1,否则ZF位值为0。在判断运算结果是否为0时,可使用此标志位。标志寄存器的第7位是符号标志SF位(SignFlag),用来记录运算结果的符号位,有符号数据利用最高有效位表示数据的符号,当运算结果为负数,即运算结果的最高位有效位为1时,SF位的值被置为1,否则SF位的值为0。在微机系统中,有符号数采用补码表示,SF位反映运算结果的正负号,运算结果为负数时,SF位的值被置为1,否则SF位的值为0。标志寄存器的第11位是溢出标志位OF(OverflowFlag);用于反映有符号数加减运算所得结果是否溢出。若算术运算的结果有溢出,OF的值被置为1,否则,OF的值为0。其中CF和OF标志位本质上都是表示溢出,CF表示无符号数溢出,即运算结果超过了无符号数的表数范围,OF表示有符号数溢出,即运算结果超过了有符号数的表数范围。以上6个状态标志位,在一般编程情况下,标志位CF、ZF、SF和OF的使用频率较高,而标志位PF和AF的使用频率较低。2)控制标志位控制标志位是用来控制处理器执行指令的方式,它包括TF、DF、IF共3个控制标志位,汇编中有专门的指令来改变他们的值。标志寄存器的第8位是陷阱标志位TF(TrapFlag),又称跟踪标志位(TraceFlag)或称单步标志位,当TF位被置为1时,CPU进入单步执行方式,即执行完一条指令,便产生一个编号为1的内部中断,这种内部中断称为单步中断。这种方式主要用于程序的调试。CPU指令系统中没有专门的指令来改变陷阱标志位TF的值,但程序员可用其它办法来改变其值。在Debug调试程序中,可以用T命令使程序单步运行,可逐一检查各寄存器、存储器的内容,当调试成功后让TF=0,CPU正常工作不产生单步中断。利用单步中断可对程序进行逐条指令的调试。这种逐条汇编语言程序设计试题A总9页第4页指令调试程序的方法就是单步调试。标志寄存器的第9位是中断允许标志位IF(Interrupt-enableFlag),用来决定CPU是否响应CPU外部的可屏蔽中断(INTR)发出的中断请求。当IF位的值为1时,CPU可以响应CPU外部的可屏蔽中断发出的中断请求,当IF位的值为0时,CPU不响应CPU外部的可屏蔽中断发出的中断请求。注意:IF标志位决定CPU是否响应CPU外部的可屏蔽中断发出的中断请求,而不是决定CPU响应外部的不可屏蔽中断所发出的中断请求,所以不管该标志为何值,CPU都必须响应CPU外部的不可屏蔽中断所发出的中断请求,以及CPU内部产生的中断请求。CPU的指令系统中有专门的指令来改变标志位IF的值。CLI指令复位中断标志使IF=0,STI指令置位中断标志使IF=1。标志寄存器的第10位是方向标志DF(DirectionFlag),用来决定在串操作指令执行时有关指针寄存器(SI、DI)发生调整的方向。用于串操作指令中,控制地址的变化方向,设置DF=0,串操作的存储器地址自动增加;设置DF=1,串操作的存储器地址自动减少。在微机的指令系统中,也提供了专门的指令来改变标志位DF的值。CLD指令复位方向标志使DF=0,STD指令置位方向标志使DF=1。3.段寄存器CS寄存器(CodeSegmentRegister),代码段寄存器,CS寄存器的用途是存放代码段的段地址。CS寄存器的内容是当前正在执行的代码段的段地址。SS寄存器(StackSegmentRegister),堆栈段寄存器,SS寄存器的用途是存放堆栈段的段地址。SS寄存器的内容是当前要访问的堆栈数据所在堆栈段的段地址。DS寄存器(DataSegmentRegister),数据段寄存器,DS寄存器的用途是存放数据段的段地址。CS寄存器的内容当前要访问的数据所在数据段的段地址。ES寄存器(ExtraSegmentRegister),附加段寄存器,ES寄存器的用途是存放附加段的段地址。CS寄存器的内容是当前要访问的数据所在附加段的段地址。2.请写出内存单元地址、内存单元内容、字内存单元地址、字内存单元内容、访存规则、逻辑段如何划分、逻辑地址、物理地址、逻辑地址如何转换成物理地址的概念?(本题10分)1.内存单元地址存储单元地址(内存单元地址)也称为物理地址是指为了CPU能够正确地存取存储单元信息,80X86计算机给每个字节存储单元规定一个唯一的编号来标识这个存储单元,存储单元的唯一的编号就是该内存单元的地址,用无符号数表示,地址从0开始,线性加1。为了书写方便通常用十六进制表示。2.内存单元内容存储单元内容(内存单元内容)是指该存储单元中存放的信息。存储单元用地址标识,用“(…)”表示地址“…”内存单元的内容。例如,(12000H)=45H,表示地址是12000H内存单元的内容是45H。3.字存储单元地址、内容和访存规则汇编语言程序设计试题A总9页第5页80X86计算机采用被称作“小端对齐”的方案,即(1)地址采用它们的低地址来表示该内存单元地址;(2)访存规则是:低字节在低地址单元,高字节在高地址单元,也就是“低低高高”的规则。所以,一个字存储单元是由内存中连续的两个字节组成,它的地址是两个字节内存单元的低地址,它的内容是按照“低低高高”的访存规则,访问的连续的两个字节内存单元的内容。例如,(12000H)字节=45H,(12001H)字节=23H,所以(12000H)字=2345H。
本文标题:以前的汇编语言期中试题及答案
链接地址:https://www.777doc.com/doc-2714102 .html