4.举例说明CF和OF标志的差异。•溢出标志OF和进位标志CF是两个意义不同的标志进位标志表示无符号数运算结果是否超出范围,运算结果仍然正确;溢出标志表示有符号数运算结果是否超出范围,运算结果已经不正确•例1:3AH+7CH=B6H无符号数运算:58+124=182,范围内,无进位有符号数运算:58+124=182,范围外,有溢出•例2:AAH+7CH=(1)26H无符号数运算:170+124=294,范围外,有进位有符号数运算:-86+124=28,范围内,无溢出5.什么是8086中的逻辑地址和物理地址?逻辑地址如何转换成物理地址?请将如下逻辑地址用物理地址表达:(1)FFFFh:0(2)40h:17h(3)2000h:4500h(4)B821h:4567h•对应每个物理存储单元都有一个唯一的20位编号,就是物理地址,从00000H~FFFFFH•在8086内部和用户编程时,采用的段基地址:段内偏移地址形式称为逻辑地址•将逻辑地址中的段地址左移4位,加上偏移地址就得到20位物理地址•请将如下逻辑地址用物理地址表达:(1)FFFFh:0=FFFF0H(2)40h:17h=00417H(3)2000h:4500h=24500H(4)B821h:4567h=BC777H(不要算错)8、已知DS=2000H、BX=0100H、SI=0002H,存储单元[20100H]~[20103H]依次存放12345678H,[21200H]~[21203H]依次存放2A4CB765H,说明下列每条指令执行完后AX寄存器的内容。(1)movax,1200h(2)movax,bx(3)movax,[1200h](4)movax,[bx](5)movax,[bx+1100h](6)movax,[bx+si](7)movax,[bx][si+1100h](1)AX=1200h(2)AX=0100h(3)AX=4C2Ah(4)AX=3412h(5)AX=4C2Ah(6)AX=7856h(7)AX=65B7h9、指出下列指令的错误(1)movcx,dl(2)movip,ax(3)moves,1234h(4)moves,ds(5)moval,300(6)mov[sp],ax(7)movax,bx+di(8)mov20h,ah(1)两操作数类型不匹配(2)IP指令指针禁止用户访问(3)立即数不允许传给段寄存器(4)段寄存器之间不允许传送(5)两操作数类型不匹配(6)目的操作数应为[BP](7)源操作数应为[BX+DI](8)立即数不能作目的操作数10、已知数字0~9对应的格雷码依次为:18H、34H、05H、06H、09H、0AH、0CH、11H、12H、14H,它存在于以table为首地址(设为200H)的连续区域中。请为如下程序段的每条指令加上注释,说明每条指令的功能和执行结果。leabx,tablemoval,8xlatleabx,table;获取table的首地址,BX=200Hmoval,8;传送欲转换的数字,AL=8xlat;转换为格雷码,AL=12H11、给出下列各条指令执行后AL值,以及CF、ZF、SF、OF和PF的状态:moval,89haddal,aladdal,9dhcmpal,0bchsubal,aldecalincalCFZFSFOFPFAL=89hCFZFSFOFPFAL=12h10011AL=0afh00101AL=0afh10101AL=00h01001AL=0ffh00101AL=00h0100112、分别用一条汇编语言指令完成如下功能:(1)把BX寄存器和DX寄存器的内容相加,结果存入DX寄存器。(2)用寄存器BX和SI的基址变址寻址方式把存储器的一个字节与AL寄存器的内容相加,并把结果送到AL中。(3)用BX和位移量0B2H的寄存器相对寻址方式把存储器中的一个字和CX寄存器的内容相加,并把结果送回存储器中。(4)用位移量为0520H的直接寻址方式把存储器中的一个字与数3412H相加,并把结果送回该存储单元中。(5)把数0A0H与AL寄存器的内容相加,并把结果送回AL中。(1)ADDDX,BX(2)ADDAL,[BX+SI](3)ADD[BX+0B2H],CX(4)ADDWORDPTR[0520H],3412H(5)ADDAL,0A0H13、设X、Y、Z、V均为16位带符号数,分别装在X、Y、Z、V存储单元中,阅读如下程序段,得出它的运算公式,并说明运算结果存于何处。movax,XimulYmovcx,axmoxbx,dxmovax,Zcwdaddcx,axadcbx,dxsubcx,540sbbbx,0movax,Vcwdsubax,cxsbbdx,bxidivX;为了避免与操作数地址混淆,将题中X,Y,Z,V字操作数改为A,B,C,Dmovax,X;ax=AimulY;dx,ax=A*B(将操作数看作符号数,以下同)movcx,axmovbx,dx;bx,ax--dx,ax=A*Bmovax,Z;ax=Ccwd;dx,ax=C(扩展符号后为双字)addcx,axadcbx,dx;bx,cx--bx,cx+dx,ax=A*B+Csubcx,540sbbbx,0;bx,cx--A*B+C-540movax,V;ax=Dcwd;dx,ax=D(扩展符号后为双字)subax,cxsbbdx,bx;dx,ax=dx,ax-bx,cx=D-(A*B+C-540)idivX;运算结果:[D-(A*B+C-540h)]/A;ax存商,dx存余数14、给出下列各条指令执行后的结果,以及状态标志CF、OF、SF、ZF、PF的状态。movax,1470handax,axorax,axxorax,axnotaxtestax,0f0f0h注意:1.mov,not指令不影响标志位2.其他逻辑指令使CF=OF=0,根据结果影响其他标志位。16、假设DS=2000H,BX=1256H,SI=528FH,位移量TABLE=20A1H,[232F7H]=3280H,[264E5H]=2450H,试问执行下列段内间接寻址的转移指令后,转移的有效地址是什么?(1)JMPBX(2)JMPTABLE[BX](3)JMP[BX][SI](1)JMPBx;转移的有效地址EA=BX=1256h(2)JMPtABLE[Bx];转移的有效地址EA=[ds:20a1h+1256h]=[232f7]=3280h(3)JMP[Bx][si];转移的有效地址EA=[ds:1256h+528fh]=264e5h=2450h17、判断下列程序段跳转的条件(1)xorax,1e1ehjeequal(2)testal,10000001bjnzthere(3)cmpcx,64hjbthere(1)xorax,1e1ehjeequal;AX=1e1eh(异或后为0)(2)testal,10000001bjnzthere;AL的D0或D7至少有一位为1(3)cmpcx,64hjbthere;CX(无符号数)<64h指令AX的值CFOFSFZFPFMovax,1407h1470h-----Andax,ax1470h00000Orax,ax1470h00000Xorax,ax000011Notax0ffffh-----Testax,0f0f0h0ffffh0010119、有一个首地址为array的20个字的数组,说明下列程序段的功能。movcx,20movax,0movsi,axsum_loop:addax,array[si]addsi,2loopsum_loopmovtotal,ax答:将首地址为array得20个字的数组求和,并将结果存入total单元中。2.20按照下列要求,编写相应的程序段:⑴起始地址为string的主存单元中存放有一个字符串(长度大于6),把该字符串中的第1个和第6个字符(字节量)传送给DX寄存器。movdl,string[1]movdh,string[6]⑵有两个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(不考虑溢出或借位)存于原处。movcx,100movbx,0again:subarray[bx],1incbxloopagain2.21AAD指令是用于除法指令之前,进行非压缩BCD码调整的。实际上,处理器的调整过程是:AL←AH×10+AL,AH←0。如果指令系统没有AAD指令,请用一个子程序完成这个调整工作。aadpprocpushbxshlah,1movbl,ahshlah,1shlah,1addbl,ahaddal,blmovah,0popbxretaadpendp2.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:…