大连交通大学--微机原理.docx
大连交通大学微机原理与接口技术第1章数制与码制1 .将下列十进制数转换成二进制数:(1) 58;(2)67.625;(3)5721;解:(1)58D = OO111010B(2) 67.625D =01000011.1010B(3) 5721D =0001011001011001B2 .将二进制数变换成十六进制数:(1) 10010101B:(2)1101001011B;(3)1111111111111101B;(4)0100000010101B;(5)01111111B;(6)010000000001B解:(1)10010101B =95H(2) 1101001011B =34BH(3) 1111111111111101B = FFFDH(4)0100000010101B =815H(5) 01111111B =7FH(6)010000000001B =401H3 .将十六进制数变换成二进制数和十进制数:(1) 78H;(2)0A6H;(3)1000H;(4) OFFFFH解:(1)78H=120D =01111000B(2) 0A6H =166D=10100110B(3) 1000H =4096D =0001000000000000H(4) OFFFFH =65535D =111111111111 HUB4 .将下列十进制数转换成十六进制数:(1) 39;(2)299.34375;(3)54.5625解:(1)39D =27H(2) 299.34375D =12B.58H(3) 54.5625D =36.9H5 .将下列二进制数转换成十进制数:(1) 10110.101B;(2)10010010.001B;(3)11010.1101B解:10110.101 B =22.625D(2) 10010010.001B=146.125D(3) 11010.1101B =26.8125D6 .计算(按原进制运算):(1) I0001101B +11010B;(2)10111B +11100101B;(3)1011110B-11IOB;(4) 124AH+78FH:(5)5673H+123H;(6)1000H-F5CH;解:(1)10100111B(2) 11111100B(3) 1010000B(4) 19D9H(5) 5796H(6) A4H7.已知a=1011B, b=11001B, c=100110B,按二进制完成下列运算,并用十进制运算检查计算结果:(1) a+b;(2) c-a-b;(3) aXb;(4) c4-b解:a=1011B=HDb=11001B=25Dc=100110B =38D(1) 100100B =36D(2) 10B =2D(3) 10001 OO11B=275D(4) IB 余1101B=13D8 .已知a=00111000B, b=l 100011 IB,计算下列逻辑运算:(1) a AND b;(2) a OR b;(3) a XOR b;(4) NOT a解:00000000B(2) 11111111B(3) 11111111B(4) 11000111B9 .设机器字长为8位,写出下列各数的原码和补码:(1) +1010101B;(2)-1010101B;(3)+1111111B;(4) -1111111B;(5)+1000000B;(6)-1000000B解:(1)原01010101B 补01010101B (2)原11010101B 补10101011B(3)原 OlHUllB 补 O1H原OB(4) 原11111111B1000000 IB(5) JM01000000B #010000008(6) 原11000000B 补11000000B10 .写出下列十进制数的二进制补码表示(设机器字长为8位):(1) 15;(2)-1;(3)117;(4)0;(4)-15:(5)127:(6)-128;(7)80解:(1)(00001111B)补(2) (111111116)补(3) (01110101B)补(4) (00000000B)补(5) (11110001B)补(6) (01111111B)补(7) (10000000B)补(8) (01010000B)补11 .设机器字长为8位,先将下列各数表示成二进制补码,然后按补码进行运算,并用十进制数运算进行检验:(1) 87-73;(2)87+(-73);(3)87-(-73);(4)(-87)+73:(5)(-87)-73:(6)(-87)一(-73);解:1110B=14D(2) 00001110B进位舍弃(3) 10100000B=-96D 溢出(4) U110010B=-14D(5) 01100000B=96D 溢出(6) 11110010B=-14D12 .已知 a,b,c,d 为二进制补码:a=00U0010B, b=01001010B, c=U101001B, d=10111010B,计算:(1) a+b;(2) a+c;(3) c+b;(4) c+d;(5) a-b;(6) c-a;(7) d-c;(8) a+d-c解:(1)01111100B(2) 00011011B(3) OO11OO11B(4) 1O1OOO1IB(5) 11101000B(6) 10110111B(7) 11010001B(8) 11B13 .设下列四组为8位二进制补码表示的十六进制数,计算a+b和a-b,并判断其结果是否溢出:(1) a=37H, b=57H;(2) a=0B7H, b=0D7H;(3) a=0F7H, b=0D7H;(4) a=37H, b=0C7H解: a+b=8EH溢出,a-b=EOH未溢出(2) 8EH未溢出,EOH未溢出(3) CEH未溢出,20H未溢出(4) FEH未溢出70H未溢出14 .求下列组合BCD数的二进制和十六进制表示形式:(1) 3251(2)12907(3)2006解:(1)001100100101 OOO1B =3251H(2)0001001010010111B=12907H(3)0010000000000110B =2006H15 .将下列算式中的十进制数表示成组合BCD码进行运算,并用加6/减6修正其结果:(1) 38+42;(2)56+77;(3)99+88;(4)34+69;(5)38-42;(6)77-56;(7)15-76:(8)89-23解:(1)00111000B +01000010B =01111010B 低 BCD 码位需要加6修正01111010B +00000U0B =10000000B =80BCD(2) 01010110B +01110111B =11001101B 高、低 BCD 码位都需要加6修正11001101B +01100110B =000100110011B=133BCD(3) 10011001B+10001000B =00010010000IB 高、低 BCD 码位都需要加6修正00010010000IB +01100110B =000110000111B=187BCD(4) 00110100B +01101001B =10011101B 低 BCD 码位需要加6修正10011101B +00000110B =101000UB修正结果使高BCD码位需要加6修正1010001 IB +01100000B =00010000001 IB =103BCD(5) 00111000B-01000010B =(-1)11110110B 高 BCD 码位需要减6修正(-1)11110110B -01100000B =(-1)10010110B=-100+96=-4BCD(6) 01110111B-01010110B =0010000IB =21BCD(7) 00011001B-01110110B =(-1)10011111B 高、低 BCD 码位都需要减6修正(-1)1001 HUB -01100110B =(-1) OOH 1001B =-100+39=-61BCD(8) 10001001B-00100011B =01100110B =66BCD16 .将下列字符串表示成相应的ASCH码(用十六进制数表示):(1) Example 1;(2) XiDian University;(3)-108.652;(4) How are you?;(5) Computer (6) Internet Web解:(1)45H,78H,61 H,6DH,70H,6CH,65H,20H,31H(2) 58H,69H,44H,69H,61H,6EH,20H,55H,6EH,69H,76H,65H,72H,73H,69H,74H,79H(3) 2DH,31 H,30H,38H,2EH,36H,35H,32H(4) 48H,6FH,77H,20H,61 H72H,65H,20H79H,6FH,75H(5) 43H,6FH,6DH,70H,75H,74H,65H,72H(6) 49H,6EH,74H,65H72H,6EH,65H,74H,20H,57H,65H,62H17 .将下列字符串表示成相应的ASCII码(用十六进制数表示):(1) Hello (2)123<CR>456;(注:<CR>表示回车)(3) ASCII;(4) The number is 2315解:48H,65H,6cH,6CH,6FH31H,32H,33H,0DH,34H,35H,36H(3)41H,53H,43H,49H,49H(4)54H,68H,65H,20H,6EH,75H,6DH,62H,65H,72H第2章8086 CPU结构与功能1 .微处理器内部结构由哪几部分组成?阐述各部分的主要功能。解:微处理器内部结构由四部分组成:(1)算术逻辑运算单元ALU:完成所有的运算操作;(2)工作寄存器:暂存寻址信息和计算过程中的中间结果;(3)控制器:完成指令的读入、寄存和译码,并产生控制信号序列使ALU完成指定操作;(4) I/O控制逻辑:处理I/O操作。2 .微处理器级总线有哪几类?各类总线有什么作用?解:微处理器级总线有三类:(1)数据总线:传送信息;(2)地址总线:传送地址码:(3)控制总线传送控制信号。3 .为什么地址总线是单向的,而数据总线是双向的?解:地址码只能由CPU生成。而数据需要在CPU和存储器之间传输。4 .8086/8088微处理器内部有哪些寄存器?其主要作用是什么?解:8086CPU内部有14个16位寄存器,其中8个通用寄存器(4数据寄存器AX、BX、 CX、DX,4地址指针/变址寄存器SI、DI、SP、BP),4个段寄存器(CS、DS、ES、SS),2个控制寄存器(指令指针IP,微处理器状态字PSW)。应该注意的是:可以在指令中用作为地址指针的寄存器有:SL DE BP和BX;在微处理器状态字PSW中,一共设定了9个标志位,其中6个标志位用于反映ALU前一次操作的结果状态(CF, PF, AF, ZF, SF, OF),另3个标志位用于控制CPU操作(DF, IF, TF)«5 .如果某微处理器有20条地址总线和16条数据总线:(1)假定存储器地址空间与I/O地址空间是分开的,则存储器地址空间有多大?(2)数据总线上传送的有符号整数的范围有多大?解:(1)存储器地址空间为:2?°=1/8(2)有符号数范围为:-2卜2”一1,即一32768327676 .将十六进制数62A0H与下列各数相加,求出其结果及标志位CF、AF、SF、ZF、OF1234H; (2)4321H; (3) CFAOH; (4)9D60H和PF的值:解:74D4HCF=0 AF=0 SF=O ZF=O OF=0 PF=1(2)A5CIHCF=0 AF=0 SF=1 ZF=0 OF=1 PF=O(3)3240HCF=1 AF=0 SF=O ZF=0 OF=0 PF=O(4)0000HCF=1 AF=0 SF=O ZF=1 OF=0 PF=1(1)7 .从下列各数中减去4AE0H,求出其结果及标志位CF、AF、SF、ZF、OF和PF的值:(1)1234H;(2)5D90H;(3)9090H;(4) EA04H解:(1)C754H CF=1 AF=0 SF=1 ZF=0 OF=0 PF=O(2)(3)12B0HCF=0 AF=0 SF=O ZF=O OF=0 PF=O 45 BOH CF=O AF=0 SF=O ZF=O OF=1 PF=O(4)9F24HCF=O AF=0 SF=1 ZF=0 OF=0 PF=19 .写出下列存储器地址的段地址、偏移地址和物理地址:(1) 2134:10A0;(2)1FA0:0A1F;(3)267A: B876解:物理地址=段地址*10H+偏移地址(1)段地址:2134H,偏移地址:10A0H,物理地址:223E0H(2)段地址:1FA0H,偏移地址:0A1FH,物理地址:2041FH(3)段地址:267AH,偏移地址:B876H,物理地址:32016H10 .给定一个数据的有效地址为2359H,并且(DS)=490BH,求该数据的物理地址。解:物理地址=段地址*10H+偏移地址物理地址=490BH +2359H =4B409H11 .如果在一个程序段开始执行之前,(CS)=0A7F0H,(IP)=2B40H,求该程序段的第一个字的物理地址。解:物理地址=段地址*10H+偏移地址物理地址=CS*10H+IP = AAA40H12 . IBM PC有哪些寄存器可用来指示存储器的地址?解:变址寄存器SI, DL堆栈指针SP, BP,另外还有BX。第3章8086CPU指令系统1.写出完成下列要求的变量定义语句:(1)在变量 varl 中保存6个字变量:4512H,4512,-1,100/3,10H,65530;(2)在变量 var2中保存字符串:'BYTE',' word',' WORD';(3)在缓冲区bufl中留出100个字节的存储空间;(4)在缓冲区buf2中,保存5个字节的55H,再保存10个字节的240,并将这一过程重复7次;(5)在变量var3中保存缓冲区bufl的长度;(6)在变量pointer中保存变量varl和缓冲区bufl的偏移地址。解:varlDW4512H,4512,-1,100/3,1 OH,65530var2DB'BYTE',word',WORD'buflDB100 DUP (?)buf2 DB7 DUP (5 DUP (55H),10 DUP (240)var3 DBLENGTH buflpointer DWvarl,bufl(或者 pointer DW OFFSET varl, OFFSET bufl)2.设变量varl的逻辑地址为0100:0000,画出下列语句定义的变量的存储分配图:varl DB 12,-12,20/6,4 DUP (0,55H)var2 DB'Assemble'var3 DW'AB','cd','E'var4 DW var2var5 DD var2解:0100:0000H0CHvarlOOOBH41Hvar20019HOBHvar4F4H73HOOH03H73H001BHOBHvar500H65HOOH55H6DHOOH00H62H01H55H6CHOOH65H55H0013H42Hvar3OOH41H55H64H63H45HOOH3.指令正误判断,对正确指令写出源和目的操作数的寻址方式,对错误指令指出原因(设VARI, VAR2为字变量,L1为标号):(1) MOV SI,100(2) MOV BX, VARISI(3) MOV AX,BX(4) MOV AL,DX(5) MOV BP, AL(6) MOV VARI, VAR2(7) MOV CS, AX(8) MOV DS,0100H(9) MOV BXSI,1(10) MOV AX, VAR1+VAR2(11) ADD AX, LENGTH VARI(12) OR BL, TYPE VAR2(13) SUB DI,78H(14) MOVS VARI, VAR2(15) PUSH 100H(16) POP CS(17) XCHG AX, ES(18) MOV DS, CS(19) JMP Ll+5(20) DIV AX,10(21) SHL BL,2(22) MOV AL,15+23(23) MUL CX(24) XCHG CL,SI(25) ADC CS:0100, AH(26) SBB VARI-5,154解: MOVSIJOO正确。源:立即数寻址,目的:寄存器寻址(2) MOV BX,VAR1SI正确。源:寄存器相对寻址,目的:寄存器寻址(3) MOVAX,BX正确。源:寄存器间接寻址,目的:寄存器寻址(4) MOVALJDX错误。寄存器间接寻址时,DX,AX,CX不能作地址寄存器(5) MOV BP,AL错误。操作数类型不一致(6) MOV VARI,VAR2错误。两存储单元之间不能用MOV指令传送数据(7) MOV CS,AX错误。CS不能为目的操作数(8) MOV DS,0100H错误。目的操作数为段寄存器时,源操作数不能为立即数(9) MOVBXSI,1错误。指令类型不定。(10)MOV AX,VAR1+VAR2错误。MOV指令中不能完成加法运算(11)ADD AX,LENGTH VAR 1正确。源:立即数寻址。目的:寄存器寻址(12)ORBL,TYPE VAR2正确。源:立即数寻址。目的:寄存器寻址(13)SUB DI,78H错误。指令类型不定(14)MOVS VARUVAR2正确。目的、源均为隐含寻址。操作数仅指出操作数类型(15)PUSH100H错误。将常数压入堆栈,要通过寄存器来实现(16)POPCS错误。目的操作数不能为CS(17)XCHGAX, ES错误。XCHG指令的操作数不能是段寄存器(18)MOV错误。MOV指令不能从段寄存器到段寄存器(19)JMPL1+5正确。段内直接转移(20)DIVAX,10错误。指令格式错误。(21)SHLBL,错误。移位指令的移位数为1或者CL(22)MOVAL,15+23正确。源:立即数寻址,目的:寄存器。编译时就处理为38(23)MULCX正确。源:寄存器寻址,目的:寄存器寻址(24)XCHGCL,SI正确。源:寄存器间接寻址,目的:寄存器寻址(25)ADC CS:0100,AH正确。源:寄存器寻址,目的:直接寻址(数据在代码段中)(26)SBBVAR1-5J54正确。源:立即数寻址,目的:直接寻址。4.说明下列指令对的区别:(1)MOVAX,VAR1MOV AX, OFFSET VARI(2)MOVAX,VAR2LEA AX, VAR2MOVAL,LENGTH VARI与 MOV AL, SIZE VARI(4)MOVAL,ES:DICMPAL,SI与 CMPSB(5)SHRAL,1SAR(6)SHRAL,1RORAL,1(7)ROLBX,1RCLBX,1解:MOVAX,VARI把变量VARI对应地址单元中的一个字送入AXMOV AX,OFFSET VARI把VARI的有效地址的偏移地址送入AX(2) MOVAX, VAR2把变量VAR2对应地址单元中的一个字送入AXLEA AX, VAR2把VAR2的有效地址的偏移地址送入AXMOVAL, LENGTH VAR1把变量VARI的长度送入ALMOV AL, SIZE VARI把变量VARI的大小送入AL(4)MOV AL, ES:DICMP AL, SICMPSB(5) SHRAL, 1AL逻辑右移1位,最高位移入0,最低位移入CF.SARAL, 1AL算术右移1位,以最高位内容移入,最低位移入CF,其余各位右移一位。(6) SHRAL, 1AL逻辑右移1位,最高位移入0,最低位移入CFOROR AL, 1AL的各位构成环形移位,右移一位,最低位内容同时移入到CF和最高位。(7) ROLBX, 1BX各位构成环形移位,左移一位,最高位内容同时移入到CF和最低位。RCLBX, 1BX和CF构成环形移位,左移一位,CF内容移入到最低位,最高位移入CFo5.写出下列转移指令的寻址方式(设LI为标号,VAR1为字型变量,DVAR1为双字型变量):(1)JMPL1(2)JMPNEAR LIJNZ(4)JMPBX(7)解:(3)(5)JG(6)VARISIJMPFAR PTR LIJMPDVAR1JMPL1段内直接寻址JNZ L1段内直接寻址JG LI段内直接寻址(2)(4)(6)JMP NEAR PTR LI段内直接寻址JMPBX 段内间接寻址JMPVAR1SI 段内间接寻址(7) JMPFARPTR LI段间直接寻址(8) JMPDVAR1段间间接寻址把以ES为段地址,DI为偏移地址的一个字节送入AL,并与以SI内容为偏移地址的一个字节作比较,改变标志寄存器内容。(相当于作ES:(DI)与(DS:(SI)内容比较)对字符串中的一字节比较。寻址方式隐含。源串的地址由DS:SI指定,目的串的地址由ES:DI指定。(相当于作DS:(SI)与ES:(DI)内容比较)6.设(DS)=200011,(BX)=010011,(SI)=000211,(20100)=341211,(20102)=7856H,(21200)=4C2AH,(21202)=65B7H,求下列指令执行后AX寄存器的内容:(1) MOV AX,1200H;(2) MOV AX, BX;(3) MOV AX,1200H;(4) MOV AX,BX;(5) MOV AX,1100BX;(6) MOV AX,BXSI;(7) MOV AX,1100BXSI解:(1)12OOH (2)01 OOH(3)4C2AH (4)3412H(5)4C2AH(6) 7856H(7)65B7H7 .执行下列指令后,DX寄存器中的内容是多少?TABLEDW 25,36,-1,-16,10000,13PYLDW 7MOV BX, OFFSET TABLEADD BX, PYLMOV DX,BX解:DX=10FFH 由-16(FFFOH)的高8位和10000(271OH)的低8位构成8 .如果堆栈的起始地址为2200:0000,栈底为0100H,(SP)=00A8H,求(1)栈顶地址;(2) SS的内容;(3)再存入数据5678H,3AF2H后,SP的内容。解:栈顶地址00A8H, SS =2200H,再存入2个字后,SP =00A4H 9.设已用伪指令EQU定义了4个标识符:N1 EQU 2100N2 EQU 10N3 EQU 20000N4 EQU 25000下列指令是否正确?并说明原因。(1) ADD AL, N1-N2;(3) SUB BX, N4-N3;(5) ADD AL, N2;(2) MOV AX, N3+N4;(4) SUB AH, N4-N3-N1;(6) MOV AH, N2*N2解:(1)错误。Nl-N2=2090>255(2)正确(3)正确(4)错误。N4-N3-Nl=2900>255(5)正确(6)正确10.按下列要求写出指令:(1)将AX寄存器的低4位清零,其余位不变;(2)将BX寄存器的低4位置1,其余位不变;(3)将AL寄存器的低4位保持不变,高4位取反;(4)测试BX中的位1和位2,当这两位同时为0时将AL置0FFH,否则AL清零;(5)测试BX中的位1和位2,当这两位有一位为0时将AL置0FFH,否则AL清零:(6)将AL中保存的字母ASCII码变换成相应的大写字母的ASCII码;(7)将AL中保存的字母ASCII码变换成相应的小写字母的ASCII码;(8)将AX中的各位取反;(9)将DX中的低7位取反,高9位不变;(10)将CX中的低8位与高8位互换。解:(1) AND AX, OFFFOH(2) OR BX, OOOFH(3) XOR AL,0F0H(4)TESTBX,06H(5)MOVAX, BXJZZEROANDAX,06HMOVAL, OOHXORAX,06HJMPOVERJZOVERZERO:MOVAL, OFFHMOVAL, OFFHOVER:OVER:(6) AND AL,5FH或者:CMPAL,61HJLOVER(无需变换或不是字母)CMPAL,7AHJGOVER(不是字母)AND AL,5FH或 SUB AL,20HOVER:(7) OR AL,20H或者:CMP AL,41HJL OVER(不是字母)CMP AL,5AHJG OVER(无需变换或不是字母)OR AL,20H 或 ADD AL,20HOVER:(8) XOR AX, OFFFFH 或者 NOT AX(9) XOR DX,007FH(10) XCHG CH, CL11 .写出完成下述功能的程序段:(1)传送40H到AL寄存器;(2)将AL的内容乘以2;(3)传送16H到AH寄存器;(4) AL的内容加上AH的内容。计算最后结果(AL)=?解:(1) MOV AL,40H(5) SHL AL,1(6) MOV AH,16H(7) ADD AL, AHAL=96H12 .写出完成下述功能的程序段:(1)从缓冲区BUF的0004偏移地址处传送一个字到AX寄存器;(2)将AX寄存器的内容右移2位;(3)将AX内容与BUF的0006偏移地址处的一个字相乘;(4)相乘结果存入BUF的0020H偏移地址处(低位在前)。解:(1) LEA SI, BUFMOV AX,SI+4SHRAX,1SHRAX,1(3)MULWORD PTR 6SI(4)MOV20HSI,AXMOV22HSI,DX13.设(BX)=11001011B,变量VAR的内容为00110010B,求下列指令单独执行后BX的内容:(1)XORBX,VAR;(2)ANDBX,VAR;(3)OR 1BX,VAR;(4)XORBX,11110000B;(5)ANDBX,0000111 IB;(6)TES1' BX,1解:00F9H(2)0002H(3)OOFBH003BH(5)(XK)BH(6)00CBH14.设(CL) =3, (CF) =1,求下列指令单独执行后DX的内容:(1) SHR DX,1;(2)SARDX, CL;SHLDX, CL;(4) SHL DX,1:(5)RORDX, CL;(6)ROLDL, CL;(7) SAL DII,RCLDX, CL;(9)RCRDL, 1解:DX= 0000 0000 10111O11BCF=1CL=3(1)SHR DX,DX 逻辑右移 10000 0000 0101 1101B005DH(2)SARDX, CLDX算术右移30000 0000 0001 011 IB =OO17H(3)SHLDX, CLDX逻辑左移3OOOOO1O1 1101 1000B05D8H(4)SHLDX, 1DX逻辑左移10000 0001 0111 01 JOB0176H(5)ROR DX,CLDX 循环右移 30110 0000 0001 0111B6017H(6)ROL DLCLDL 循环左移 30000 0000 1101 1101B(XJDDH(7)SALDH, 1DH 算术左移 10000 0000 1011 1011BOOBBH(8) RCLDX, CLDX带进位循环左移30000 0101 1101 1100B05DCH(9) RCR DL, 1 DL带进位循环右移10000 0000 1101 1101B00DDH15.选择题(各小题只有一个正确答案)(1)执行下列三条指令后:MOV SP,1000HPUSH AXCALL BXa. (SP)=1000H;b.(SP)=OFFEH;c. (SP)=1004H;d.(SP)=OFFCH;(2)要检查寄存器AL中的内容是否与AH相同,应使用的指令为:d. AND AL, AHb. OR AL, AHe. XOR AL, AHd. SBB AL, AH(3)指令JMP NEAR PTR LI与CALL LI (LI为标号)的区别在于:a.寻址方式不同;b.是否保存IP的内容;c.目的地址不同;d.对标志位的影响不同。解:(1) D PUSHUAX 则 AX 入栈,SP=OFFEH; CALL BX 贝ij IP 入栈,SP=OFFCH(2) C 异或,若相同,则AL=0, ZF=lo(3) B16.寄存器DX: AX组成32位数,DX为高位,编写程序段实现:(1) DX: AX右移3位,并将移出的低3位保存在CL中;(2) DX: AX左移3位,并将移出的高3位保存在CL中;解:(1)移出的3位应该按时序移入CL中。XOR CL,CLMOV BL,3LI: SHR DX,1RCR AX,1RCL CL,1DEC BLJNZ LI(2)移出的3位应该按时序移入CL中。XOR CL,CLMOV BL,3LI: SHL AX,1RCR DX,1RCR CL,1DEC BLJNZ LI17 .编写程序段实现将BL中的每一位重复4次,构成32位的双字DX: AX,例如当BL =01011101B 时,则得到的(DX)=0F0FH,(AX)=0FF0FH。解:算术右移时,移入的值就是最高位本身,这样可以使位内容重复,利用这一点可以实现题目的要求。XOR DX,DXXOR AX,AXMOV CX,4LI: SHR BL,1RCRAXJSAR AXJSAR AX,1SAR AX,1LOOP LIMOV CX,4L2: SHR BL,1RCR DX,1SAR DX,1SAR DX,1SAR DX,1LOOP L218 .字变量VARI中保存有小于38250的16位无符号数,编写程序段实现VARI+150,并进行四舍五入操作,将商保存在字节变量VAR2中。解:根据题意,382504-150=255,因此商不会超过255,可以用一个字节表示。a+b的四舍五入操作可以通过判断除后余数实现:余数大于等于除数的一半,则商加1;否则不用加1。但这种方法用汇编语言编程实现时比较复杂,这里介绍另外一种方法:设a+ b的四舍五入后的结果为c,用FJ表示取整数操作,则邛+0.5口*这种方法是在除法操作之前,在被除数上加上除数的一半,这样除法操作后得到的值就是考虑了四舍五入的商。VARI DW 12345VAR2 DB ?DATAA DB 150MOV AX, VARIXOR BX,BXMOV BL,DATAASHR BX,1ADD AX,BXDIV DATAAMOV VAR2,AL19 .有一组无符号的16位数据保存在BUFFER中,前两个字节存放数据的个数,编程实现按下式进行滤波处理:y(k)=(x(A:)+ x(k -1)+ x(k -2) k>2y(Z)= x(A)k<2解:滤波结果保存在FILT中。BUFFER DW OCHDW 33H,18H,1BH,06H,33H,08HDW 3H,6H, OFH,51H,05H, OCHFILT DW 100H DUP (?)LEA SI,BUFFERLEA DI,F