习题解答习题解答习题一1.1解释下列名词:汇编语言汇编程序汇编目标程序机器语言【解】:汇编语言:用符号书写的,其操作与机器指令基本上一一对应的,并遵循一定语法规则的计算机语言称为汇编语言。汇编语言编写的程序,称为汇编语言源程序。目标程序:把汇编语言源程序翻译成机器语言程序,又称目标程序.机器语言:计算机所具有的各种机器指令的集合,称作计算机的机器指令系统,又称作机器语言。1.2计算机语言的发展经历了哪几个阶段?各阶段有什么特点?【解】:机器语言是由0、1代码组成的面向机器的语言。机器语言程序的编写、阅读和调试都十分困难,但它是计算机可直接识别执行的语言程序,占内存少,执行速度快。汇编语言是用符号表示替代机器指令的面向机器的语言。与机器语言相比,汇编语言易于理解和记忆,汇编语言程序也易于编写、阅读和调试。由于其语句与机器指令语句一一对应,所以具有占内存少、执行速度快的特点,并且能直接控制计算机的硬件设备,充分发挥计算机的硬件功能。高级语言源程序经过编译后才能翻译成计算机可识别、执行的目标程序,所以不能产生有效的机器语言程序,其运行速度较慢,占内存较大。1.3将下列十进制数分别转换成二进制数和十六进制数。586819225532766【解】:十进制数二进制数十六进制数586100100101024A81921000000000000020002551111111FF327661111111111111107FFE1.4将下列二进制数分别转换成十进制数和十六进制数。11010100000001111111111100111【解】:二进制数十进制数十六进制数11010261A100000001288011111111255FF11100111231E71.5将下列十六进制数分别转换成二进制数和十进制数。FB0FFFF567858F【解】:十六进制数十进制数二进制数习题解答FB04016111110110000FFFF65535111111111111111156782213610101100111100058F1423101100011111.6写出下列有符号十进制数的8位二进制数补码。-49-128120-111【解】:十进制数8位二进制数补码-4911001111-1281000000012001111000-111011011111.7写出字符0、9、A、a、2的ASCII码。【解】:字符ASCII码030939A41a612321.8写出字符十进制数1234和123的BCD码和压缩BCD码【解】:十进制数BCD码压缩BCD码123400000001000000100000001100000100000100100011010012300000001000000100000001100000001001000111.9用十六进制完成下列计算。(1)21CH+0ABH(3)7A0BH+6F3H(2)6B2CH-9AFH(4)289EH-0BFAH【解】:(1)2C7,(2)80FE,(3)617D,(4)1CA41.10用8位补码完成下列计算,并把结果转换回十进制数(1)(+43)+(+27)(5)(+25)+(-49)(2)(-92)+(+33)(6)(-76)+(-18)(3)(+43)-(+27)(7)(+25)-(-49)(4)(-92)-(+33)(8)(-76)-(-18)【解】:(1)70,(2)-59,(3)-16,(4)-125,(5)-24,(6)-94,(7)74,(8)-58习题二2.18086/8088的段寄存器有哪些?各起什么作用?【解】:段寄存器共有4个CS、DS、SS、ES。代码段寄存器CS表示当前使用的指令代码可以从该段寄存器指定的存储器段中取得,相应的偏移值则由IP提供;堆栈段寄存器SS指定当前堆栈的起始地址;数据段寄存器DS指示当前程序使用的数据所存放段的起始地址;附加段寄存器ES则指出当前程序使用附加段地址的起始位置,该段一般用来存放原始数据或运算结果。2.2解释物理地址和程序地址的意义。习题解答【解】:物理地址:完成存储器单元或I/O端口寻址的实际地址成为物理地址,CPU型号不同其物理地址也不同。物理地址是指CPU和存储器进行数据交换时实际所使用的地址,而逻辑地址是程序使用的地址。物理地址由两部分组成:段基址(段起始地址高16位)和偏移地址。前者由段寄存器给出,后者是指存储单元所在的位置离段起始地址的偏移距离。2.3某程序分为代码段、数据段和堆栈段三个段,其代码段、数据段和堆栈段的长度分别为12KB、2KB和1KB,该程序被装入内存后,CS、DS和SS寄存器的值分别为1300H、1400H和1500H。试画出其在内存中的位置的示意图。【解】:13000h14000h14800h15000h15400h16000h2.4三个字型数据1234H、5678H和9ABCH存放在物理地址为12340H开始的内存区域中,试画出这些数据的存储示意图。【解】:34127856BC9A2.5一个双字型数据12345678H,存放在内存中的连续的4个字节单元中,试画出其存储示意图。【解】:78563412…..12345Hcsdsss12340H习题解答2.6说明8086/8088的地址转换的方法。【解】:当CPU寻址某个存储单元时,先将段寄存器的内容左移4位,然后加上指令中提供的16位偏移地址而形成20位物理地址。在取指令时,CPU自动选择代码段寄存器CS,左移4位后,加上指令提供的16位偏移地址,计算出要取指令的物理地址。堆栈操作时,CPU自动选择堆栈段寄存器SS,将其内容左移4位后,加上指令提供的16位偏移地址,计算出栈顶单元的物理地址。每当存取操作数时,CPU会自动选择数据段寄存器(或附加段寄存器ES),将段基值左移4位后加上16位偏移地址,得到操作数在内存的物理地址。2.78086/8088如何获取要执行的下一条指令的地址?【解】:IP寄存器在程序执行过程中,它总是指向下一条指令的第一个字节的偏移地址,它与代码段寄存器CS结合确定下一条指令第一个字节的物理地址。当控制器使用该地址寻址存储器时,就可以取得下一次要执行的指令,而一旦控制器取得这条指令就马上修改IP的内容(段内)或马上修改CS、IP的内容(段间),使它指向下一条指令的第一个字节的偏移地址。2.8简要说明8086/8088的标志寄存器中各标志位的意义。【解】:(1)6个状态标志位的功能分别叙述如下:CF(CarryFlag)——进位标志位。当执行一个加法(或减法)运算,使最高位产生进位(或借位)时,CF为1;否则为0。PF(ParityFlag)——奇偶标志位。该标志位反映运算结果中1的个数是偶数还是奇数。当指令执行结果的低8位中含有偶数个1时,PF=1;否则PF=0。AF(AuxiliarycarryFlag)——辅助进位标志位。当执行一个加法(或减法)运算,使结果的低4位向高4位有进位(或借位)时,AF=1;否则AF=0。ZF(ZeroFlag)——零标志位。若当前的运算结果为零,ZF=1;否则ZF=0。SF(SignFlag)——符号标志位。它和运算结果的最高位相同。OF(OverflowFlag)——溢出标志位。当补码运算有溢出时,OF=1;否则OF=0。(2)3个控制标志位用来控制CPU的操作,由指令进行置位和复位。DF(DirectionFlag)——方向标志位。它用以指定字符串处理时的方向,当该位置“1”时,字符串以递减顺序处理,即地址以从高到低顺序递减。反之,则以递增顺序处理。IF(InterruptenableFlag)——中断允许标志位。它用来控制8086是否允许接收外部中断请求。若IF=1,8086能响应外部中断,反之则不响应外部中断。注意:IF的状态不影响非屏蔽中断请求(NMI)和CPU内部中断请求。TF(TrapFlag)——跟踪标志位。它是为调试程序而设定的陷阱控制位。当该位置“1”时,8086CPU处于单步状态,此时CPU每执行完一条指令就自动产生一次内部中断。当该位复位后,CPU恢复正常工作。习题三【注】各题中都使用以下已定义的变量:va,vb,vc:同一个段中的字节型变量,缺省段寄存器是DSvx,vy,vz:同一个段中的字型变量,缺省段寄存器是ES3.1说明下面指令中每个操作数的寻址方式,如果操作数的寻址方式作数是内存型,还要指出段地址和偏移地址的来源。(1)MOVAX,BX(2)ADD[BX],AX(3)DIV[va](4)MUL[vy](5)SUB[vc+BX],1(6)DIVWORDPTR[BP+SI](7)MUL[vz+SI+4](8)MOV[BP],SP习题解答【解】:(1)寄存器寻址(2)寄存器间接寻址段地址:DS偏移地址:[BX](3)直接寻址段地址:DS偏移地址:VA(4)直接寻址段地址:ES偏移地址:VY(5)寄存器相对寻址段地址:DS偏移地址:VC+BX(6)基址变址寻址方式,段地址:SS偏移地址:BP+SI,(7)基址变址相对寻址方式,段地址:DS偏移地址:VZ+SI+4(8)寄存器间接寻址段地址:SS偏移地址:[BP]3.2设DS=2000H,ES=3000H,SS=4000H,SI=00A0H,BX=0100H,BP=0010H,变量va的偏移地址为0050H,指出下列指令源操作数的寻址方式,对内存型操作数计算出其物理地址。(1)MOVAX,0AH(2)MOV[BX],CL(3)MOVAX,WORDPTR[va](4)MOVAX,SS:[va](5)MOVAX,ES:[BX](6)MOVBX,[BX](7)MOVAX,[BP](8)MOVAX,[BP+SI](9)MOVDI,[BX+10](10)MOVDH,[va+BX](11)MOVDS,[BX+SI](12)MOVAL,[va+BX+SI]【解】:(1)立即数(2)寄存器间接寻址20100H(3)直接寻址20050H(4)直接寻址40050H(5)寄存器间接寻址30100H(6)寄存器间接寻址20100H(7)寄存器间接寻址40010H(8)基址变址寻址方式400B0H(9)寄存器相对寻址20110H(10)寄存器相对寻址20150H(11)基址变址寻址方式201A0H(12)基址变址相对寻址方式,201F0H3.3I/O指令中,不经DX寄存器提供,可在指令中直接指定的I/O端口号为多少个?【解】:256习题四4.1已知一个数据段定义如下:dataSEGMENTvvlDB‘xyz‘,13,10,‘$‘vv2DW‘xy‘,12AHcc=$-vv2ppDBccpp1DBcc+1qqDW$dataENDS画出data段相应的内存图。习题解答【解】:4.2编写数据段定义,并画出相应的内存分配图,在段中依次定义以下变量:varl为字节型数组,初值是字符串“personalcomputer”var2为字节型变量,初值是32;var3为字节型变量,初值是20H;var4为字节型变量,初值是00111110B;var5为字节型数组,初值是以ASCII形式表示的十进制整数65536各个位上的数码;var6为字节型数组,初值是10个0;var7为字型变量,初值是3000;var8为字型变量,初值是3000H;var9为字型数组,初值依次是1、2、3、4、5;var10为字型数组,初值是10个十进制数10;var11为字型变量,初值是varl的字符串串长。【解】:datasegmentvar1db‘personalcomputer‘var2db32var3db30hvar4db00111110Bvar5db‘65536‘var6db10dup(0)var7dw3000var8dw3000hvar9dw1,2,3,4,5var10dw10dup(10)var11dwvar2-var1dataends内存分配图如下:7879800C0A2478792A0104050C00VV1VV2PPqqPP1习题解答变量名内存内容var17065