1《16/32位微机原理、汇编语言及接口技术教程》作业和习题解答第1章微型计算机系统概述(习题1)1.7简答如下概念:(3)所谓系统ROM-BIOS指的是什么?它的主要功能是什么?解答:BIOS:基本输入输出系统(BasicInput/OutputSystem)。可视为一个永久记录在ROM的软件,是操作系统的一部分。主要负责机器的启动和系统中重要硬件的控制及驱动并为高层软件和用户提供基层调用。它包括自诊断程序、系统自举装载程序、CMOS设置程序和主要I/O设备的驱动程序及中断服务。主要功能:用来驱动和管理诸如键盘、显示器、打印机、磁盘、时钟、串行通信接口等基本的输入输出设备(5)ISA总线是指IBMPC/AT机上使用的系统总线。PC/XT使用8位数据总线、20位地址总线的共62个信号的IBMPC总线,PC/AT在此基础上增加了36个信号形成16位数据总线、24位地址总线的IBMAT总线。由于PC获得了广泛应用,所以IBMAT结构常称为PC工业标准结构,其IBMAT总线则称为ISA总线。第2章微处理器指令系统(习题2)2.8问题:已知DS=2000H、BX=0100H、SI=0002H,存储单元[20100H]~[20103H]依次存放12H、34H、56H、78H,[21200H]~[21203H]依次存放2AH、4CH、B7H、65H,说明下列每条指令执行完后AX寄存器的内容,以及源操作数的寻址方式?解答:⑴movax,1200h;AX=1200H,立即数寻址⑵movax,bx;AX=0100H,寄存器寻址⑶movax,[1200h];AX=4C2AH,直接寻址⑷movax,[bx];AX=3412H,寄存器间接寻址⑸movax,[bx+1100h];AX=4C2AH,寄存器相对寻址⑹movax,[bx+si];AX=7856H,基址变址寻址⑺movax,[bx][si+1100h];AX=65B7H,相对基址变址寻址22.11问题:给出下列各条指令执行后AL值,以及CF、ZF、SF、OF和PF的状态:解答:moval,89h;AL=89HCFZFSFOFPFaddal,al;AL=12H10011addal,9dh;AL=0AFH00101cmpal,0bch;AL=0AFH10101subal,al;AL=00H01001decal;AL=0FFH00101incal;AL=00H010012.12问题:请分别用一条汇编语言指令完成如下功能:解答:⑴把BX寄存器和DX寄存器的内容相加,结果存入DX寄存器adddx,bx⑵用寄存器BX和SI的基址变址寻址方式把存储器的一个字节与AL寄存器的内容相加,并把结果送到AL中addal,[bx+si]⑶用BX和位移量0B2H的寄存器相对寻址方式把存储器中的一个字和CX寄存器的内容相加,并把结果送回存储器中add[bx+0b2h],cx⑷用位移量为0520H的直接寻址方式把存储器中的一个字与数3412H相加,并把结果送回该存储单元中addwordptr[0520h],3412h⑸把数0A0H与AL寄存器的内容相加,并把结果送回AL中addal,0a0h2.13运算公式是:(V-(Z+X×Y-540))/X商存于AX中,余数存于DX中。2.14问题:给出下列各条指令执行后的结果,以及状态标志CF、OF、SF、ZF、PF的状态。解答:movax,1470h;AX=1470HCFZFSFOFPFandax,ax;AX=1470H00000orax,ax;AX=1470H00000xorax,ax;AX=0000H010013notax;AX=FFFFH01001testax,0f0f0h;AX=FFFFH001012.20问题:按照下列要求,编写相应的程序段。解答:⑴起始地址为string的主存单元中存放有一个字符串(长度大于6),把该字符串中的第1个和第6个字符(字节量)传送给DX寄存器。movdl,string[0]movdh,string[5]⑵有两个32位数值,按“小端方式”存放在两个缓冲区buffer1和buffer2中,编写程序段完成DX.AX←buffer1-buffer2功能。movax,wordptrbuffer1subax,wordptrbuffer2;先减低16位movdx,wordptrbuffer1+2sbbdx,wordptrbuffer2+2;后减高16位,需减低16位的借位⑶编写一个程序段,在DX高4位全为0时,使AX=0;否则使AX=-1。testdx,0f000hjznextmovax,-1jmpdonenext:movax,0done:…⑷把DX.AX中的双字右移4位答:movcx,4again:shrdx,1;右移一位,移出的低位进入CF标志rcrax,1;将CF移进AX高位,同时实现AX右移loopagain;循环4次,实现4位右移⑸有一个100个字节元素的数组,其首地址为array,将每个元素减1(不考虑溢出或借位)存于原处。4movcx,100movbx,0again:subarray[bx],1incbxloopagain习题2.2解答:见教材P19页图2-3.习题2.3解答:参考教材第2.1.3节(第20-21页)习题2.5-1问题:什么是8088中的逻辑地址和物理地址?逻辑地址如何转换成物理地址?1MB最多能分成多少个逻辑段?解答:物理地址:物理存储单元具有的一个唯一的20位编号逻辑地址:在8088内部和用户编程时,所采用的“段地址:偏移地址”形式将逻辑地址中的段地址左移二进制4位(对应16进制是一位,即乘以16),加上偏移地址就得到20位物理地址1MB最多能分成1MB÷16B=220÷24=216个逻辑段,因为每隔16个字节单元就可以开始一个逻辑段习题2.5-2问题:请将如下逻辑地址用物理地址表达:解答:⑴FFFFH:0=FFFF0H⑵40H:17H=00417H⑶2000H:4500H=24500H⑷B821H:4567H=BC777H习题2.17问题:判断下列程序段跳转的条件解答:⑴xorax,1e1ehjeequal;AX=1e1eh(异或后为0)⑵testal,10000001bjnzthere;AL的D0或D7至少有一位为15⑶cmpcx,64hjbthere;CX(无符号数)<64h2.19程序段完成的功能是:把20个字数据累加求和,结果存入total字单元里。2.25编写一个程序段:先提示输入数字“InputNumber:0~9”,然后在下一行显示输入的数字,结束;如果不是键入了0~9数字,就提示错误“Error!”,继续等待输入数字。解答:;数据段inmsgdb‘InputNumber:0~9’,0dh,0ah,’$’ermsgdb‘Error!’,’$’;代码段movdx,offsetinmsgmovah,9int21h;显示输入数字0~9again:movah,1int21h;接受一个字符cmpal,’0’;判断是否输入的是数字0~9jberdispcmpal,’9’jaerdispmovdl,almovah,2int21h;显示输入的数字jmpdone;结束erdisp:movdx,offsetermsgmovah,9int21h;显示输入错误jmpagain;继续输入done:…