题目
第1章微型计算机系统〔习题1.1〕简答题(1)计算机字长(Word)指的是什么?(2)总线信号分成哪三组信号?(3)PC机主存采用DRAM组成还是SRAM组成?(4)Cache是什么意思?(5)ROM-BIOS是什么?(6)中断是什么?(7)32位PC机主板的芯片组是什么?(8)教材中MASM是指什么?(9)处理器的“取指-译码-执行周期”是指什么?(10)本课程的主要内容属于计算机系统层次结构中哪个层次?〔解答〕①处理器每个单位时间可以处理的二进制[1]数据位数称计算机字长。②总线信号分成三组,分别是数据总线[2]、地址总线[3]和控制总线[4]。③PC机主存采用DRAM组成。④高速缓冲存储器[5]Cache是处理器与主存之间速度很快但容量较小的存储器。⑤ROM-BIOS是“基本输入输出系统[6]”,操作系统通过对BIOS的调用驱动各硬件设备,用户也可以在应用程序中调用BIOS中的许多功能。byte '70 |',70h,20h,71h,20h,72h,20h,73h,20h,74h,20h,75h,20h,76h,20h,77h,20h,78h,20h,79h,20hbyte 7ah,20h,7bh,20h,7ch,20h,7dh,20h,7eh,20h,7fh,20h,13,10byte 0.codestart:mov eax,offset tablecall dispmsgexit 0end start〔习题3.15〕数据段有如下定义,IA-32处理器将以小端[7]方式保存在主存:vardword12345678h现以字节为单位按地址从低到高的顺序,写出这个变量内容。并说明如下指令的执行结果:mov eax,var; EAX=__________mov bx,var; BX=__________mov cx,var+2; CX=__________mov dl,var; DL=__________mov dh,var+3; DH=__________可以编程使用十六进制[8]字节显示子程序[9]DSIPHB顺序显示各个字节进行验证,还可以使用十六进制双字显示子程序DSIPHD显示该数据进行对比。〔解答〕小端方式采用“低对低、高对高”,即低字节数据存放在低地址存储单元[10]、高字节数据存放在高地址存储单元。以字节为单位按地址从低到高的顺序,var变量的内容:78H、56H、34H、12H。; EAX=12345678H; BX=5678H; CX=1234H; DL=78H; DH=12H〔习题3.16〕使用若干MOV指令实现交互指令“XCHG EBX,[EDI]”功能。〔解答〕push eax;可以没有moveax,ebxmovebx,[edi]mov[edi],eaxpop eax;可以没有〔习题3.17〕假设当前ESP=0012FFB0H,说明下面每条指令后,ESP等于多少?pusheaxpushdxpush dword ptr0f79hpopeaxpopword ptr[bx]popebx〔解答〕ESP=0012FFACHESP=0012FFAAHESP=0012FFA6HESP=0012FFAAHESP=0012FFACHESP=0012FFB0H〔习题3.18〕已知数字0~9对应的格雷码依次为:18H、34H、05H、06H、09H、0AH、0CH、11H、12H、14H;请为如下程序的每条指令加上注释,说明每条指令的功能和执行结果。; 数据段tablebyte18h,34h,05h,06h,09h,0ah,0ch,11h,12h,14h; 代码段movebx,offsettablemov al,8xlat为了验证你的判断,不妨使用本书的I/O子程序库提供的子程序DISPHB显示换码后AL的值。如果不使用XLAT指令,应如何修改?〔解答〕; 数据段tablebyte18h,34h,05h,06h,09h,0ah,0ch,11h,12h,14h;定义格雷码表; 代码段movebx,offsettable; EBX=格雷码表首地址mov al,8; AL=8xlat; AL=12H(8的格雷码)不使用XLAT指令:movebx,offsettable; EBX=格雷码表首地址mov eax,0mov al,8; AL=8mov al,[eax+ebx]; AL=12H(8的格雷码)〔习题3.19〕请分别用一条汇编语言[11]指令完成如下功能:(1)把EBX寄存器[12]和EDX寄存器的内容相加,结果存入EDX寄存器。(2)用寄存器EBX和ESI的基址变址[13]寻址方式[14]把存储器的一个字节与AL寄存器的内容相加,并把结果送到AL中。(3)用EBX和位移量0B2H的寄存器相对寻址[15]方式把存储器中的一个双字和ECX寄存器的内容相加,并把结果送回存储器中。(4)将32位变量VARD与数3412H相加,并把结果送回该存储单元中。(5)把数0A0H与EAX寄存器的内容相加,并把结果送回EAX中。〔解答〕① add edx,ebx② add al,[ebx+esi]③ add [bx+0b2h],cx④add varw,3412h⑤add eax,0a0h〔习题3.20〕分别执行如下程序片断,说明每条指令的执行结果:(1)moveax,80h; EAX=__________addeax,3; EAX=__________,CF=__________,SF=__________addeax,80h; EAX=__________,CF=__________,OF=__________adceax,3; EAX=__________,CF=__________,ZF=__________(2)moveax,100; EAX=__________addax,200; EAX=__________,CF=__________(3)moveax,100; EAX=__________addal,200; EAX=__________,CF=__________(4)moval,7fh; AL=__________subal,8; AL=__________,CF=__________,SF=__________subal,80h; AL=__________,CF=__________,OF=__________sbbal,3; AL=__________,CF=__________,ZF=__________〔解答〕(1); EAX=80H; EAX=83H,CF=0,SF=0; EAX=103H,CF=0,OF=0; EAX=106H,CF=0,ZF=0(2); EAX=100; EAX=300,CF=0(3); EAX=100; EAX=44,CF=1(包含256的进位含义:256+44=300)(4)moval,7fh; AL=7FHsubal,8; AL=77H,CF=0,SF=0subal,80h; AL=F7H,CF=1,OF=1sbbal,3; AL=F3H,CF=0,ZF=0〔习题3.21〕给出下列各条指令执行后AL值,以及CF、ZF、SF、OF和PF的状态:mov al,89hadd al,aladd al,9dhcmp al,0bchsub al,aldec alinc al〔解答〕mov al,89h;AL=89HCFZFSFOFPFadd al,al;AL=12H10011add al,9dh;AL=0AFH00101cmp al,0bch;AL=0AFH10101sub al,al;AL=00H01001dec al;AL=0FFH00101inc al;AL=00H01001〔习题3.22〕有两个64位无符号整数存放在变量buffer1和buffer2中,定义数据、编写代码完成EDX.EAX←buffer1-buffer2功能。〔解答〕;数据段buffer1qword 67883000hbuffer2qword 67762000h;代码段mov eax,dword ptr buffer1mov edx,dword ptr buffer1+4sub eax,dword ptr buffer2sbb edx,dword ptr buffer2+4〔习题3.23〕分别执行如下程序片断,说明每条指令的执行结果:(1)movesi,10011100b; ESI=__________Handesi,80h; ESI=__________Horesi,7fh; ESI=__________Hxoresi,0feh; ESI=__________H(2)moveax,1010b; EAX=__________Bshr eax,2; EAX=__________B,CF=__________shl eax,1; EAX=__________B,CF=__________and eax,3; EAX=__________B,CF=__________(3)moveax,1011b; EAX=__________Brol eax,2; EAX=__________B,CF=__________rcr eax,1; EAX=__________B,CF=__________oreax,3; EAX=__________B,CF=__________(4)xoreax,eax; EAX=__________,CF=__________,OF=__________;ZF=__________,SF=__________,PF=__________〔解答〕(1); ESI=9CH; ESI=80H; ESI=FFH; ESI=01H(2); EAX=1010B(可以有前导0,下同); EAX=0010B,CF=1; EAX=0100B,CF=0; EAX=0000B,CF=0(3); EAX=1011B(可以有前导0,下同); EAX=101100B,CF=0; EAX=10110B,CF=0; EAX=10111B,CF=0(4); EAX=0,CF=0,OF=0; ZF=1,SF=0,PF=1〔习题3.24〕3.24给出下列各条指令执行后AX的结果,以及状态标志CF、OF、SF、ZF、PF的状态。mov ax,1470hand ax,axor ax,axxor ax,axnot axtest ax,0f0f0h〔解答〕mov ax,1470h;AX=1470HCFOFSFZFPFandax,ax;AX=1470H00000orax,ax;AX=1470H00000xorax,ax;AX=0000H00011notax;AX=FFFFH00011testax,0f0f0h;AX=0F0F0H00101〔习题3.25〕逻辑运算指令怎么实现复位、置位和求反功能?〔解答〕AND指令同“0”与实现复位,OR指令同“1”或实现置位,XOR同“1”异或实现求反。〔习题3.26〕说明如下程序段[16]的功能:mov ecx,16mov bx,axnext:shr ax,1rcr edx,1shr bx,1rcr edx,1loop nextmov eax,edx〔解答〕将AX的每一位依次重复一次,所得的32位结果保存于EAX中。〔习题3.27〕编程将一个64位数据逻辑左移3位,假设这个数据已经保存在EDX.EAX寄存器对中。〔解答〕; 代码段mov ecx,3again:shl eax,1rcl edx,1loop again〔习题3.28〕编程将一个压缩BCD码变量(例如92H)转换为对应的ASCII码,然后调用DISPC子程序(在输入输出子程序库中)显示。〔解答〕; 数据段bcdbyte 92h; 代码段mov al,bcdshr al,4add al,30hcall dispcmov al,bcdand al,0fhadd al,30hcall dispc〔习题3.29〕以MOVS指令为例,说明串操作指令的寻址[17]特点,并用MOV和ADD等指令实现MOVSD的功能(假设DF=0)。〔解答〕MOVS指令的功能是:ES:[EDI]←DS:[ESI];ESI←ESI±1/2/4,EDI←EDI±1/2/4由此可看出串操作指令的寻址特点:源操作数[18]用寄存器ESI间接寻址[19],默认在DS指向的数据段,但可以改变;目的操作数用寄存器EDI间接寻址,只能在ES指向的附加数据段;每执行一次串操作,源指针ESI和目的指针EDI将自动修改:±1(字节),±2(字)或±4(双字)。指针的增量和减量控制由DF标志确定,DF=0,进行增量;DF=1,进行减量。push eaxmov eax,[esi]mov es:[edi],eaxadd esi,4add edi,4〔习题3.30〕说明如下程序执行后的显示结果:;数据段msgbyte'WELLDONE',0;代码段mov ecx,(lengthof msg)-1mov ebx,offset msgagain:mov al,[ebx]add al,20hmov [ebx],aladd ebx,1loop againmov eax,offset msgcall dispmsg如果将其中语句“mov ebx,offset msg”改为“xor ebx,ebx”,则利用EBX间接寻址的两个语句如何修改成EBX寄存器相对寻址,就可以实现同样功能?〔解答〕显示结果:welldoneEBX寄存器相对寻址:moval,msg[ebx]movmsg[ebx],al〔习题3.31〕下面程序的功能是将数组ARRAY1的每个元素加固定值(8000H),将和保存在数组ARRAY2。在空白处填入适当的语句或语句的一部分。;数据段array1dword1,2,3,4,5,6,7,8,9,10array2dword10 dup(?);代码段mov ecx,lengthof array1mov ebx,0again:mov eax,array1[ebx*4]add eax,8000hmov______________add ebx,__________loop again〔解答〕mov________________________________add ebx,________〔习题3.32〕上机实现本章的例题程序,编程实现本章的习题程序。
第1章微型计算机系统〔习题
1.1〕简答题(1)计算机字长(Word)指的是什么?(2)总线信号分成哪三组信号?(3)PC机主存采用DRAM组成还是SRAM组成?(4)Cache是什么意思?(5)ROM-BIOS是什么?(6)中断是什么?(7)32位PC机主板的芯片组是什么?(8)教材中MASM是指什么?(9)处理器的“取指-译码-执行周期”是指什么?(10)本课程的主要内容属于计算机系统层次结构中哪个层次?〔解答〕①处理器每个单位时间可以处理的二进制[1]数据位数称计算机字长。②总线信号分成三组,分别是数据总线[2]、地址总线[3]和控制总线[4]。③PC机主存采用DRAM组成。④高速缓冲存储器[5]Cache是处理器与主存之间速度很快但容量较小的存储器。⑤ROM-BIOS是“基本输入输出系统[6]”,操作系统通过对BIOS的调用驱动各硬件设备,用户也可以在应用程序中调用BIOS中的许多功能。byte '70 |',70h,20h,71h,20h,72h,20h,73h,20h,74h,20h,75h,20h,76h,20h,77h,20h,78h,20h,79h,20hbyte 7ah,20h,7bh,20h,7ch,20h,7dh,20h,7eh,20h,7fh,20h,13,10byte 0.codestart:mov eax,offset tablecall dispmsgexit 0end start〔习题
3.15〕数据段有如下定义,IA-32处理器将以小端[7]方式保存在主存:vardword12345678h现以字节为单位按地址从低到高的顺序,写出这个变量内容。并说明如下指令的执行结果:mov eax,var; EAX=__________mov bx,var; BX=__________mov cx,var+2; CX=__________mov dl,var; DL=__________mov dh,var+3; DH=__________可以编程使用十六进制[8]字节显示子程序[9]DSIPHB顺序显示各个字节进行验证,还可以使用十六进制双字显示子程序DSIPHD显示该数据进行对比。〔解答〕小端方式采用“低对低、高对高”,即低字节数据存放在低地址存储单元[10]、高字节数据存放在高地址存储单元。以字节为单位按地址从低到高的顺序,var变量的内容:78H、56H、34H、12H。; EAX=12345678H; BX=5678H; CX=1234H; DL=78H; DH=12H〔习题
3.16〕使用若干MOV指令实现交互指令“XCHG EBX,[EDI]”功能。〔解答〕push eax;可以没有moveax,ebxmovebx,[edi]mov[edi],eaxpop eax;可以没有〔习题
3.17〕假设当前ESP=0012FFB0H,说明下面每条指令后,ESP等于多少?pusheaxpushdxpush dword ptr0f79hpopeaxpopword ptr[bx]popebx〔解答〕ESP=0012FFACHESP=0012FFAAHESP=0012FFA6HESP=0012FFAAHESP=0012FFACHESP=0012FFB0H〔习题
3.18〕已知数字0~9对应的格雷码依次为:18H、34H、05H、06H、09H、0AH、0CH、11H、12H、14H;请为如下程序的每条指令加上注释,说明每条指令的功能和执行结果。; 数据段tablebyte18h,34h,05h,06h,09h,0ah,0ch,11h,12h,14h; 代码段movebx,offsettablemov al,8xlat为了验证你的判断,不妨使用本书的I/O子程序库提供的子程序DISPHB显示换码后AL的值。如果不使用XLAT指令,应如何修改?〔解答〕; 数据段tablebyte18h,34h,05h,06h,09h,0ah,0ch,11h,12h,14h;定义格雷码表; 代码段movebx,offsettable; EBX=格雷码表首地址mov al,8; AL=8xlat; AL=12H(8的格雷码)不使用XLAT指令:movebx,offsettable; EBX=格雷码表首地址mov eax,0mov al,8; AL=8mov al,[eax+ebx]; AL=12H(8的格雷码)〔习题
3.19〕请分别用一条汇编语言[11]指令完成如下功能:(1)把EBX寄存器[12]和EDX寄存器的内容相加,结果存入EDX寄存器。(2)用寄存器EBX和ESI的基址变址[13]寻址方式[14]把存储器的一个字节与AL寄存器的内容相加,并把结果送到AL中。(3)用EBX和位移量0B2H的寄存器相对寻址[15]方式把存储器中的一个双字和ECX寄存器的内容相加,并把结果送回存储器中。(4)将32位变量VARD与数3412H相加,并把结果送回该存储单元中。(5)把数0A0H与EAX寄存器的内容相加,并把结果送回EAX中。〔解答〕① add edx,ebx② add al,[ebx+esi]③ add [bx+0b2h],cx④add varw,3412h⑤add eax,0a0h〔习题
3.20〕分别执行如下程序片断,说明每条指令的执行结果:(1)moveax,80h; EAX=__________addeax,3; EAX=__________,CF=__________,SF=__________addeax,80h; EAX=__________,CF=__________,OF=__________adceax,3; EAX=__________,CF=__________,ZF=__________(2)moveax,100; EAX=__________addax,200; EAX=__________,CF=__________(3)moveax,100; EAX=__________addal,200; EAX=__________,CF=__________(4)moval,7fh; AL=__________subal,8; AL=__________,CF=__________,SF=__________subal,80h; AL=__________,CF=__________,OF=__________sbbal,3; AL=__________,CF=__________,ZF=__________〔解答〕(1); EAX=80H; EAX=83H,CF=0,SF=0; EAX=103H,CF=0,OF=0; EAX=106H,CF=0,ZF=0(2); EAX=100; EAX=300,CF=0(3); EAX=100; EAX=44,CF=1(包含256的进位含义:256+44=300)(4)moval,7fh; AL=7FHsubal,8; AL=77H,CF=0,SF=0subal,80h; AL=F7H,CF=1,OF=1sbbal,3; AL=F3H,CF=0,ZF=0〔习题
3.21〕给出下列各条指令执行后AL值,以及CF、ZF、SF、OF和PF的状态:mov al,89hadd al,aladd al,9dhcmp al,0bchsub al,aldec alinc al〔解答〕mov al,89h;AL=89HCFZFSFOFPFadd al,al;AL=12H10011add al,9dh;AL=0AFH00101cmp al,0bch;AL=0AFH10101sub al,al;AL=00H01001dec al;AL=0FFH00101inc al;AL=00H01001〔习题
3.22〕有两个64位无符号整数存放在变量buffer1和buffer2中,定义数据、编写代码完成ED
X.EAX←buffer1-buffer2功能。〔解答〕;数据段buffer1qword 67883000hbuffer2qword 67762000h;代码段mov eax,dword ptr buffer1mov edx,dword ptr buffer1+4sub eax,dword ptr buffer2sbb edx,dword ptr buffer2+4〔习题
3.23〕分别执行如下程序片断,说明每条指令的执行结果:(1)movesi,10011100b; ESI=__________Handesi,80h; ESI=__________Horesi,7fh; ESI=__________Hxoresi,0feh; ESI=__________H(2)moveax,1010b; EAX=__________Bshr eax,2; EAX=__________B,CF=__________shl eax,1; EAX=__________B,CF=__________and eax,3; EAX=__________B,CF=__________(3)moveax,1011b; EAX=__________Brol eax,2; EAX=__________B,CF=__________rcr eax,1; EAX=__________B,CF=__________oreax,3; EAX=__________B,CF=__________(4)xoreax,eax; EAX=__________,CF=__________,OF=__________;ZF=__________,SF=__________,PF=__________〔解答〕(1); ESI=9CH; ESI=80H; ESI=FFH; ESI=01H(2); EAX=1010B(可以有前导0,下同); EAX=0010B,CF=1; EAX=0100B,CF=0; EAX=0000B,CF=0(3); EAX=1011B(可以有前导0,下同); EAX=101100B,CF=0; EAX=10110B,CF=0; EAX=10111B,CF=0(4); EAX=0,CF=0,OF=0; ZF=1,SF=0,PF=1〔习题
3.24〕
3.24给出下列各条指令执行后AX的结果,以及状态标志CF、OF、SF、ZF、PF的状态。mov ax,1470hand ax,axor ax,axxor ax,axnot axtest ax,0f0f0h〔解答〕mov ax,1470h;AX=1470HCFOFSFZFPFandax,ax;AX=1470H00000orax,ax;AX=1470H00000xorax,ax;AX=0000H00011notax;AX=FFFFH00011testax,0f0f0h;AX=0F0F0H00101〔习题
3.25〕逻辑运算指令怎么实现复位、置位和求反功能?〔解答〕AND指令同“0”与实现复位,OR指令同“1”或实现置位,XOR同“1”异或实现求反。〔习题
3.26〕说明如下程序段[16]的功能:mov ecx,16mov bx,axnext:shr ax,1rcr edx,1shr bx,1rcr edx,1loop nextmov eax,edx〔解答〕将AX的每一位依次重复一次,所得的32位结果保存于EAX中。〔习题
3.27〕编程将一个64位数据逻辑左移3位,假设这个数据已经保存在ED
X.EAX寄存器对中。〔解答〕; 代码段mov ecx,3again:shl eax,1rcl edx,1loop again〔习题
3.28〕编程将一个压缩BCD码变量(例如92H)转换为对应的ASCII码,然后调用DISPC子程序(在输入输出子程序库中)显示。〔解答〕; 数据段bcdbyte 92h; 代码段mov al,bcdshr al,4add al,30hcall dispcmov al,bcdand al,0fhadd al,30hcall dispc〔习题
3.29〕以MOVS指令为例,说明串操作指令的寻址[17]特点,并用MOV和ADD等指令实现MOVSD的功能(假设DF=0)。〔解答〕MOVS指令的功能是:ES:[EDI]←DS:[ESI];ESI←ESI±1/2/4,EDI←EDI±1/2/4由此可看出串操作指令的寻址特点:源操作数[18]用寄存器ESI间接寻址[19],默认在DS指向的数据段,但可以改变;目的操作数用寄存器EDI间接寻址,只能在ES指向的附加数据段;每执行一次串操作,源指针ESI和目的指针EDI将自动修改:±1(字节),±2(字)或±4(双字)。指针的增量和减量控制由DF标志确定,DF=0,进行增量;DF=1,进行减量。push eaxmov eax,[esi]mov es:[edi],eaxadd esi,4add edi,4〔习题
3.30〕说明如下程序执行后的显示结果:;数据段msgbyte'WELLDONE',0;代码段mov ecx,(lengthof msg)-1mov ebx,offset msgagain:mov al,[ebx]add al,20hmov [ebx],aladd ebx,1loop againmov eax,offset msgcall dispmsg如果将其中语句“mov ebx,offset msg”改为“xor ebx,ebx”,则利用EBX间接寻址的两个语句如何修改成EBX寄存器相对寻址,就可以实现同样功能?〔解答〕显示结果:welldoneEBX寄存器相对寻址:moval,msg[ebx]movmsg[ebx],al〔习题
3.31〕下面程序的功能是将数组ARRAY1的每个元素加固定值(8000H),将和保存在数组ARRAY2。在空白处填入适当的语句或语句的一部分。;数据段array1dword1,2,3,4,5,6,7,8,9,10array2dword10 dup(?);代码段mov ecx,lengthof array1mov ebx,0again:mov eax,array1[ebx*4]add eax,8000hmov______________add ebx,__________loop again〔解答〕mov________________________________add ebx,________〔习题
3.32〕上机实现本章的例题程序,编程实现本章的习题程序。
1.1〕简答题(1)计算机字长(Word)指的是什么?(2)总线信号分成哪三组信号?(3)PC机主存采用DRAM组成还是SRAM组成?(4)Cache是什么意思?(5)ROM-BIOS是什么?(6)中断是什么?(7)32位PC机主板的芯片组是什么?(8)教材中MASM是指什么?(9)处理器的“取指-译码-执行周期”是指什么?(10)本课程的主要内容属于计算机系统层次结构中哪个层次?〔解答〕①处理器每个单位时间可以处理的二进制[1]数据位数称计算机字长。②总线信号分成三组,分别是数据总线[2]、地址总线[3]和控制总线[4]。③PC机主存采用DRAM组成。④高速缓冲存储器[5]Cache是处理器与主存之间速度很快但容量较小的存储器。⑤ROM-BIOS是“基本输入输出系统[6]”,操作系统通过对BIOS的调用驱动各硬件设备,用户也可以在应用程序中调用BIOS中的许多功能。byte '70 |',70h,20h,71h,20h,72h,20h,73h,20h,74h,20h,75h,20h,76h,20h,77h,20h,78h,20h,79h,20hbyte 7ah,20h,7bh,20h,7ch,20h,7dh,20h,7eh,20h,7fh,20h,13,10byte 0.codestart:mov eax,offset tablecall dispmsgexit 0end start〔习题
3.15〕数据段有如下定义,IA-32处理器将以小端[7]方式保存在主存:vardword12345678h现以字节为单位按地址从低到高的顺序,写出这个变量内容。并说明如下指令的执行结果:mov eax,var; EAX=__________mov bx,var; BX=__________mov cx,var+2; CX=__________mov dl,var; DL=__________mov dh,var+3; DH=__________可以编程使用十六进制[8]字节显示子程序[9]DSIPHB顺序显示各个字节进行验证,还可以使用十六进制双字显示子程序DSIPHD显示该数据进行对比。〔解答〕小端方式采用“低对低、高对高”,即低字节数据存放在低地址存储单元[10]、高字节数据存放在高地址存储单元。以字节为单位按地址从低到高的顺序,var变量的内容:78H、56H、34H、12H。; EAX=12345678H; BX=5678H; CX=1234H; DL=78H; DH=12H〔习题
3.16〕使用若干MOV指令实现交互指令“XCHG EBX,[EDI]”功能。〔解答〕push eax;可以没有moveax,ebxmovebx,[edi]mov[edi],eaxpop eax;可以没有〔习题
3.17〕假设当前ESP=0012FFB0H,说明下面每条指令后,ESP等于多少?pusheaxpushdxpush dword ptr0f79hpopeaxpopword ptr[bx]popebx〔解答〕ESP=0012FFACHESP=0012FFAAHESP=0012FFA6HESP=0012FFAAHESP=0012FFACHESP=0012FFB0H〔习题
3.18〕已知数字0~9对应的格雷码依次为:18H、34H、05H、06H、09H、0AH、0CH、11H、12H、14H;请为如下程序的每条指令加上注释,说明每条指令的功能和执行结果。; 数据段tablebyte18h,34h,05h,06h,09h,0ah,0ch,11h,12h,14h; 代码段movebx,offsettablemov al,8xlat为了验证你的判断,不妨使用本书的I/O子程序库提供的子程序DISPHB显示换码后AL的值。如果不使用XLAT指令,应如何修改?〔解答〕; 数据段tablebyte18h,34h,05h,06h,09h,0ah,0ch,11h,12h,14h;定义格雷码表; 代码段movebx,offsettable; EBX=格雷码表首地址mov al,8; AL=8xlat; AL=12H(8的格雷码)不使用XLAT指令:movebx,offsettable; EBX=格雷码表首地址mov eax,0mov al,8; AL=8mov al,[eax+ebx]; AL=12H(8的格雷码)〔习题
3.19〕请分别用一条汇编语言[11]指令完成如下功能:(1)把EBX寄存器[12]和EDX寄存器的内容相加,结果存入EDX寄存器。(2)用寄存器EBX和ESI的基址变址[13]寻址方式[14]把存储器的一个字节与AL寄存器的内容相加,并把结果送到AL中。(3)用EBX和位移量0B2H的寄存器相对寻址[15]方式把存储器中的一个双字和ECX寄存器的内容相加,并把结果送回存储器中。(4)将32位变量VARD与数3412H相加,并把结果送回该存储单元中。(5)把数0A0H与EAX寄存器的内容相加,并把结果送回EAX中。〔解答〕① add edx,ebx② add al,[ebx+esi]③ add [bx+0b2h],cx④add varw,3412h⑤add eax,0a0h〔习题
3.20〕分别执行如下程序片断,说明每条指令的执行结果:(1)moveax,80h; EAX=__________addeax,3; EAX=__________,CF=__________,SF=__________addeax,80h; EAX=__________,CF=__________,OF=__________adceax,3; EAX=__________,CF=__________,ZF=__________(2)moveax,100; EAX=__________addax,200; EAX=__________,CF=__________(3)moveax,100; EAX=__________addal,200; EAX=__________,CF=__________(4)moval,7fh; AL=__________subal,8; AL=__________,CF=__________,SF=__________subal,80h; AL=__________,CF=__________,OF=__________sbbal,3; AL=__________,CF=__________,ZF=__________〔解答〕(1); EAX=80H; EAX=83H,CF=0,SF=0; EAX=103H,CF=0,OF=0; EAX=106H,CF=0,ZF=0(2); EAX=100; EAX=300,CF=0(3); EAX=100; EAX=44,CF=1(包含256的进位含义:256+44=300)(4)moval,7fh; AL=7FHsubal,8; AL=77H,CF=0,SF=0subal,80h; AL=F7H,CF=1,OF=1sbbal,3; AL=F3H,CF=0,ZF=0〔习题
3.21〕给出下列各条指令执行后AL值,以及CF、ZF、SF、OF和PF的状态:mov al,89hadd al,aladd al,9dhcmp al,0bchsub al,aldec alinc al〔解答〕mov al,89h;AL=89HCFZFSFOFPFadd al,al;AL=12H10011add al,9dh;AL=0AFH00101cmp al,0bch;AL=0AFH10101sub al,al;AL=00H01001dec al;AL=0FFH00101inc al;AL=00H01001〔习题
3.22〕有两个64位无符号整数存放在变量buffer1和buffer2中,定义数据、编写代码完成ED
X.EAX←buffer1-buffer2功能。〔解答〕;数据段buffer1qword 67883000hbuffer2qword 67762000h;代码段mov eax,dword ptr buffer1mov edx,dword ptr buffer1+4sub eax,dword ptr buffer2sbb edx,dword ptr buffer2+4〔习题
3.23〕分别执行如下程序片断,说明每条指令的执行结果:(1)movesi,10011100b; ESI=__________Handesi,80h; ESI=__________Horesi,7fh; ESI=__________Hxoresi,0feh; ESI=__________H(2)moveax,1010b; EAX=__________Bshr eax,2; EAX=__________B,CF=__________shl eax,1; EAX=__________B,CF=__________and eax,3; EAX=__________B,CF=__________(3)moveax,1011b; EAX=__________Brol eax,2; EAX=__________B,CF=__________rcr eax,1; EAX=__________B,CF=__________oreax,3; EAX=__________B,CF=__________(4)xoreax,eax; EAX=__________,CF=__________,OF=__________;ZF=__________,SF=__________,PF=__________〔解答〕(1); ESI=9CH; ESI=80H; ESI=FFH; ESI=01H(2); EAX=1010B(可以有前导0,下同); EAX=0010B,CF=1; EAX=0100B,CF=0; EAX=0000B,CF=0(3); EAX=1011B(可以有前导0,下同); EAX=101100B,CF=0; EAX=10110B,CF=0; EAX=10111B,CF=0(4); EAX=0,CF=0,OF=0; ZF=1,SF=0,PF=1〔习题
3.24〕
3.24给出下列各条指令执行后AX的结果,以及状态标志CF、OF、SF、ZF、PF的状态。mov ax,1470hand ax,axor ax,axxor ax,axnot axtest ax,0f0f0h〔解答〕mov ax,1470h;AX=1470HCFOFSFZFPFandax,ax;AX=1470H00000orax,ax;AX=1470H00000xorax,ax;AX=0000H00011notax;AX=FFFFH00011testax,0f0f0h;AX=0F0F0H00101〔习题
3.25〕逻辑运算指令怎么实现复位、置位和求反功能?〔解答〕AND指令同“0”与实现复位,OR指令同“1”或实现置位,XOR同“1”异或实现求反。〔习题
3.26〕说明如下程序段[16]的功能:mov ecx,16mov bx,axnext:shr ax,1rcr edx,1shr bx,1rcr edx,1loop nextmov eax,edx〔解答〕将AX的每一位依次重复一次,所得的32位结果保存于EAX中。〔习题
3.27〕编程将一个64位数据逻辑左移3位,假设这个数据已经保存在ED
X.EAX寄存器对中。〔解答〕; 代码段mov ecx,3again:shl eax,1rcl edx,1loop again〔习题
3.28〕编程将一个压缩BCD码变量(例如92H)转换为对应的ASCII码,然后调用DISPC子程序(在输入输出子程序库中)显示。〔解答〕; 数据段bcdbyte 92h; 代码段mov al,bcdshr al,4add al,30hcall dispcmov al,bcdand al,0fhadd al,30hcall dispc〔习题
3.29〕以MOVS指令为例,说明串操作指令的寻址[17]特点,并用MOV和ADD等指令实现MOVSD的功能(假设DF=0)。〔解答〕MOVS指令的功能是:ES:[EDI]←DS:[ESI];ESI←ESI±1/2/4,EDI←EDI±1/2/4由此可看出串操作指令的寻址特点:源操作数[18]用寄存器ESI间接寻址[19],默认在DS指向的数据段,但可以改变;目的操作数用寄存器EDI间接寻址,只能在ES指向的附加数据段;每执行一次串操作,源指针ESI和目的指针EDI将自动修改:±1(字节),±2(字)或±4(双字)。指针的增量和减量控制由DF标志确定,DF=0,进行增量;DF=1,进行减量。push eaxmov eax,[esi]mov es:[edi],eaxadd esi,4add edi,4〔习题
3.30〕说明如下程序执行后的显示结果:;数据段msgbyte'WELLDONE',0;代码段mov ecx,(lengthof msg)-1mov ebx,offset msgagain:mov al,[ebx]add al,20hmov [ebx],aladd ebx,1loop againmov eax,offset msgcall dispmsg如果将其中语句“mov ebx,offset msg”改为“xor ebx,ebx”,则利用EBX间接寻址的两个语句如何修改成EBX寄存器相对寻址,就可以实现同样功能?〔解答〕显示结果:welldoneEBX寄存器相对寻址:moval,msg[ebx]movmsg[ebx],al〔习题
3.31〕下面程序的功能是将数组ARRAY1的每个元素加固定值(8000H),将和保存在数组ARRAY2。在空白处填入适当的语句或语句的一部分。;数据段array1dword1,2,3,4,5,6,7,8,9,10array2dword10 dup(?);代码段mov ecx,lengthof array1mov ebx,0again:mov eax,array1[ebx*4]add eax,8000hmov______________add ebx,__________loop again〔解答〕mov________________________________add ebx,________〔习题
3.32〕上机实现本章的例题程序,编程实现本章的习题程序。
题目解答
答案
array 2 [ebx*4] ,eax 1