单片机的最小系统由什么构成_标志寄存器及其标志位的意义

单片机的最小系统由什么构成_标志寄存器及其标志位的意义微机原理习题答案1234章微机原理与接口技术习题解答第1章数制与码制1.将下列十进制数转换成二进制数:(1)58;(2)67.625;(3)5721;解:(1)58D=00B(2)67.625D=010

微机原理习题答案1234章   微机原理与接口技术   习题解答   第1章数制与码制   1.将下列十进制数转换成二进制数:   (1)58;(2)67.625;(3)5721;   解:(1)58D=00B   (2)67.625D=0.1010B   (3)5721D=00001B   2.将二进制数变换成十六进制数:   (1)B;(2)B:(3)11101B;   (4)01B;(5)011111I1B;(6)0B   解:(1)1001OIO1B=95H   (2)B=34BH   (3)11101B=FFFDH   (4)01B=815H   (5)0B=7FH   (6)0B=401H   3.将十六进制数变换成二进制数和十进制数:   (1)78H;(2)0A6H;(3)1000H;(4)0FFFFH   解:(1)78H=120D=0B   (2)0A6H=166D=B   (3)1000H=4096D=00000H   (4)0FFFFH=65535D=llllHUB   4.将下列十进制数转换成十六进制数:   (1)39;(2)299.34375:(3)54.5625   解:⑴39D=27H   (2)299.34375D=I2B.58H   (3)54.5625D=36.9H   5.将下列二进制数转换成十进制数:   (1)10110.101B;(2).001B;(3)11010.U01B   解:(1)1OUO.IO1B=22.625D   (2).001B=146,I25D   (3)11010.1101B=26.8125D   6.计算(按原进制运算):   (1)B+11010B;(2)10111B+B;(3)B-1110B;   (4)124AH+78FH;(5)5673H+123H;(6)1000H-F5CH;   解:(1)B   (2)B   (3)B   (4)19D9H   (5)5796H   (6)A4H   7.已知a=1011B,b=11001B,c=B,按二进制完成下列运算,并用十进制运算检查   计算结果:   (1)a+b;(2)c-a-b;(3)aXb;(4)c-rb   解:a=1011B=HDb=11001B=25Dc=100HOB=38D   (1)B=36D   (2)10B=2D   (3)B=275D   (4)IB余1101B=13D   8.已知a=00B,b=lIB,计算下列逻辑运算:   (1)aANDb;(2)aORb;(3)aXORb;(4)NOTa   解:(1)00000000B   (2)B   (3)IB   (4)IB   9.设机器字长为8位,写出下列各数的原码和补码:   (1)+B;(2)-B;(3)+B;   (4)-B;(5)+B;(6)-B   解:(1)原0B补0B   (2)原B补B   (3)原0B补0IB   (4)原B补IB   (5)原0B补0B   (6)原11OOOOOOB补11OOOOOOB   10.写出下列十进制数的二进制补码表示(设机器字长为8位):   (1)15;(2)-1;(3)117;(4)0;   (4)-15;(5)127;(6)-128;(7)80   解:⑴(00001I11B)补   (2)(IIIII111B)补   (3)(0B)补   (4)(00000000B)补   (5)(B)补   (6)(0B)补   (7)(B)补   (8)(0B)补   11.设机器字长为8位,先将下列各数表示成二进制补码,然后按补码进行运算,并用十进   制数运算进行检验:   (1)87-73;(2)87+(-73);(3)87-(-73);   (4)(-87)+73;(5)(-87)-73;(6)(-87)一(-73);   解:⑴1110B=14D   (2)0000U10B进位舍弃   (3)B=-96D溢出   (4)B=-14D   (5)0B=96D溢出   (6)B=-14D   12.已知a,b,c,d为二进制补码:a=00B,b=0B,c=B,d=10U1010B,   计算:   (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)0B   (2)00011011B   (3)OO11OO11B   (4)1O1OOO1IB   (5)B   (6)UB   (7)B   (8)11B   13.设下列四组为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   解:(1)a+b=8EH溢出,a-b=E0H未溢出   (2)8EH未溢出,EOH未溢出   (3)CEH未溢出,20H未溢出   (4)FEH未溢出70H未溢出   14.求下列组合BCD数的二进制和卜六进制表示形式:   (1)3251(2)12907(3)2006   解:(1)00001B=3251H   (2)00011B=12907H   (3)00110B=2006H   15.将下列算式中的十进制数表示成组合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   解:⑴00B+0B=0B低BCD码位需要加6修正   0B+00000110B=B=80BCD   (2)0B+0B=B高、低BCD码位都需要加6修正   B+0B=000B=133BCD   (3)B+B=000B高、低BCD码位都需要加6修正   000B+0B=000B=187BCD   (4)00B+0B=B低BCD码位需要加6修正   B+00000110B=B修正结果使高BCD码位需要加6修正   B+0B=000B=103BCD   (5)00B-0B=(-1)B高BCD码位需要减6修正   (-1)B-0B=(-1)B=-100+96=-4BCD   (6)0B-0B=00B=21BCD   (7)00011001B-0B=(-1)1001HUB高、低BCD码位都需要减6修正   (-1)1001HUB-0B=(-1)OOHIOOIB=-100+39=-61BCI)   (8)B-00B=0B=66BCD   16.将下列字符串表示成相应的ASCH码(用十六进制数表示):   (1)Example1;(2)XiDianUniversity;(3)-108.652;   (4)Howareyou?;(5)Computer(6)InternetWeb   解:(1)45H,78H,61H,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,31H,30H,38H,2EH,36H,35H,32H   (4)48H,6FH,77H,20H,61H72H,65H,20H79H,6FH,75H   (5)43H,6FH,6DH,70H,75H,74H,65H,72H   (6)49H,6EH,74H,65H72H,6EH,65H,74H,20H,57H,65H,62H   17.将下列字符串表示成相应的ASCII码(用十六进制数表示):   (1)Hello(2)123<CR>456;(注:<CR>表示回车)(3)ASCII;   (4)Thenumberis2315   解:(1)48H,65H,6CH,6CH,6FH(2)31H,32H,33H,0DH,34H,35H,36H   (3)41H,53H,43H,49H,49H(4)54H,68H,65H,20H,6EH,75H,6DH,62H,65H,72H   第2章8086CPU结构与功能   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)。   应该注意的是:可以在指令中用作为地址指针的寄存器有:SLDI、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)存储器地址空间为:220=MB   (2)有符号数范围为:一2”~215-1,即一32768〜32767   6.将十六进制数62A0H与下列各数相加,求出其结果及标志位CF、AF、SF、ZF、OF   和PF的值:   (1)1234H:(2)4321H;(3)CFAOH;(4)9D60H   解:(1)74D4HCF=OAF=OSF=OZF=OOF=OPF=1   (2)A5C1HCF=OAF=OSF=1ZF=OOF=1PF=O   (3)3240HCF=IAF=OSF=OZF=OOF=0PF=O   (4)OOOOHCF=1AF=0SF=OZF=1OF=0PF=1   7.从下列各数中减去4AE0H,求出其结果及标志位CF、AF、SF、ZF、OF和PF的值:   (1)1234H;(2)5D90H;(3)9090H;(4)EA04H   解:(1)C754HCF=1AF=0SF=IZF=0OF=0PF=O   (2)12B0HCF=0AF=0SF=OZF=0OF=0PF=0   (3)45B0HCF=0AF=0SF=OZF=0OF=1PF=O   (4)9F24HCF=0AF=0SF=1ZF=0OF=0PF=1   9.写出下列存储器地址的段地址、偏移地址和物理地址:   (1)2134:10A0;(2)1FA0:0A1F:(3)267A:B876   解:物理地址=段地址*10H+偏移地址   (1)段地址:2134H,偏移地址:10A0H,物理地址:223E0H   (2)段地址:1FA0H,偏移地址:0A1FH,物理地址:2041FH   (3)段地址:267AH,偏移地址:B876H,物理地址:32016H   10.给定一个数据的有效地址为2359H,并且(DS)=490BH,求该数据的物理地址。   解:物理地址=段地址*10H+偏移地址   物理地址=490BH+2359H=4B409H   11.如果在一个程序段开始执行之前,(CS)-0A7F0H,(IP)=2B40H,求该程序段的第   一个字的物理地址。   解:物理地址=段地址*10H+偏移地址   物理地址=CS*10H+IP=AAA40H   12.IBMPC有哪些寄存器可用来指示存储器的地址?   解:变址寄存器SI,DI,堆栈指针SP,BP,另外还有BX。   第3章8086CPU指令系统   1.写出完成下列要求的变量定义语句:   (1)在变量varl中保存6个字变量:,4512,-1,100/3,1011,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/3JOH,65530   var2DB,BYTE,,,word,WORD,   buflDB100DUP(?)   buf2DB7DUP(5DUP(55H),10DUP(240))   var3DBLENGTHbufl   pointerDWvarl,bufl(或者pointerDWOFFSETvarl,OFFSETbufl)   2.设变量varl的逻辑地址为0100:0000,画出下列语句定义的变量的存储分配图:   varlDB12,-12,20/6,4DUP(0,55H)   var2DB’Assemble’   var3DW‘AB’,’cd’,’E’   var4DWvar2   var5DDvar2   解:   0100:0000H0CHvarlOOOBH41Hvar20019HOBHvar4   F4i73HOOH   03H73H001BHOBHvar5   00H65HOOH   55H6DHOOH   OOH62H01H   55H6CH   OOH65H   55H0013H42Hvar3   OOH41H   55H64H   63H   45H   OOH   3.指令正误判断,对正确指令写出源和目的操作数的寻址方式,对错误指令指出原因(设   VARI,VAR2为字变量,L1为标号):   (1)MOVSI,100(2)MOVBX,VARI[SI]   (3)MOVAX,[BX](4)MOVAL,[DX]   (5)MOVBP,AL(6)MOVVARI,VAR2   (7)MOVCS,AX(8)MOVDS,01OOH   (9)MOV[BX][SI],1(10)MOVAX,VAR1+VAR2   (11)ADDAX,LENGTHVARI(12)ORBL,TYPEVAR2   (13)SUB[DI],78H(14)MOVSVARI,VAR2   (15)PUSH100H(16)POPCS   (17)XCHGAX,ES(18)MOVDS,CS   (19)JMPLl+5(20)DIVAX,10   (21)SHLBL,2(22)MOVAL,15+23   (23)MULCX(24)XCHGCL,[SI]   (25)ADCCS:[0100],AH(26)SBBVARI-5,154   解:(1)MOVSI,100正确。源:立即数寻址,目的:寄存器寻址   (2)MOVBX,VAR1[SI]正确。源:寄存器相对寻址,目的:寄存器寻址   (3)MOVAXJBX]正确。源:寄存器间接寻址,目的:寄存器寻址   (4)MOVAL,[DX]错误。寄存器间接寻址时,DX,AX,CX不能作地址寄存器   (5)MOVBP,AL错误。操作数类型不一致   (6)MOVVARI,VAR2错误。两存储单之间不能用MOV指令传送数据   (7)MOVCS,AX错误。CS不能为目的操作数   (8)MOVDS,0100H错误。目的操作数为段寄存器时,源操作数不能为立即数   (9)MOV[BX][SI],1错误。指令类型不定。   (10)MOVAX,VAR1+VAR2错误。MOV指令中不能完成加法运算   (11)ADDAX,LENGTHVAR1正确。源:立即数寻址。目的:寄存器寻址   (12)ORBL,TYPEVAR2正确。源:立即数寻址。目的:寄存器寻址   (13)SUB[DI],78H错误。指令类型不定   (14)MOVSVAR1,VAR2正确。目的、源均为隐含寻址。操作数仅指出操作数类型   (15)PUSH100H错误。将常数压入堆栈,要通过寄存器来实现   (16)POPCS错误。目的操作数不能为CS   (17)XCHGAX,ES错误。XCHG指令的操作数不能是段寄存器   (18)MOVDS,CS错误。MOV指令不能从段寄存器到段寄存器   (19)JMPL1+5正确。段内直接转移   (20)DIVAX,10错误。指令格式错误。   (21)SHLBL,2错误。移位指令的移位数为1或者CL   (22)MOVAL,15+23正确。源:立即数寻址,目的:寄存器。编译时就处理为38   (23)MULCX正确。源:寄存器寻址,目的:寄存器寻址   (24)XCHGCL,[SI1正确。源:寄存器间接寻址,目的:寄存器寻址   (25)ADCCS:[0100],AH正确。源:寄存器寻址,目的:直接寻址(数据在代码段中)   (26)SBBVARI-5,154正确。源:立即数寻址,目的:直接寻址。   4.说明下列指令对的区别:   (1)MOVAX,VARI与MOVAX,OFFSETVARI   (2)MOVAX,VAR2与LEAAX,VAR2   (3)MOVAL,LENGTHVARI与MOVAL,SIZEVARI   (4)MOVAL,ES:[DI]CMPAL,[SI]与CMPSB   (5)SHRAL,1与SARAL,1   (6)SHRAL,1与RORAL,1   (7)ROLBX,1与RCLBX,1   解:(1)MOVAX,VARI把变量VARI对应地址单中的一个字送入AX   MOVAX,OFFSETVARI把VARI的有效地址的偏移地址送入AX   (2)MOVAX,VAR2把变量VAR2对应地址单中的一个字送入AX   LEAAX,VAR2把VAR2的有效地址的偏移地址送入AX   (3)MOVAL,LENGTHVARI把变量VARI的长度送入AL   MOVAL,SIZEVARI把变量VARI的大小送入AL   (4)MOVAL,ES:[DI]   CMPAL,[SI]把以ES为段地址,DI为偏移地址的一个字节送入AL,   并与以SI内容为偏移地址的•个字节作比较,改变标志寄   存器内容。(相当于作ES:(DI)与(DS:(SI)内容比较)   CMPSB对字符串中的一字节比较。寻址方式隐含。源串的地址由   DS:SI指定,目的串的地址由ES:DI指定。(相当于作   DS:(SI)与ES:(DI)内容比较)   (5)SHRAL,1AL逻辑右移1位,最高位移入0,最低位移入CF。   SARAL,1AL算术右移1位,以最高位内容移入,最低位移入CF,其余各位   右移一位。   (6)SHRAL,1AL逻辑右移1位,最高位移入0,最低位移入CF。   RORAL,1AL的各位构成环形移位,右移一位,最低位内容同时移入到CF和   最高位。   (7)ROLBX,1BX各位构成环形移位,左移一位,最高位内容同时移入到CF和   最低位。   RCLBX,1BX和CF构成环形移位,左移一位,CF内容移入到最低位,最   高位移入CFo   5.写出下列转移指令的寻址方式(设口为标号,VAR1为字型变量,DVAR1为双字型变量):   (1)JMPL1(2)JMPNEARL1   (3)JNZL1(4)JMPBX   (5)JGLI(6)JMPVARI[SI]   (7)JMPFARPTRLI(8)JMPDVAR1   解:(1)JMPL1段内直接寻址(2)JMPNEARPTRLI段内直接寻址   (3)JNZLI段内直接寻址(4)JMPBX段内间接寻址   (5)JGLI段内直接寻址(6)JMPVARI[SI]段内间接寻址   (7)JMPFARPTRLI段间直接寻址(8)JMPDVAR1段间间接寻址   6.设(DS)=2000H,(BX)=0100H,(SI)=0002H,(20100)=3412H,(20102)=7856H,   (21200)=4C2AH,(21202)=65B7H,求下列指令执行后AX寄存器的内容:   (1)MOVAX,1200H;(2)MOVAX,BX;(3)MOVAX,[1200H];   (4)MOVAX,[BX];(5)MOVAX,1100[BX];(6)MOVAX,[BX][SI];   (7)MOVAX,1100[BX][SI]   解:(1)1200H(2)01OOH(3)4C2AH(4)3412H(5)4C2AH   (6)7856H(7)65B7H   7.执行下列指令后,DX寄存器中的内容是多少?   TABLEDW25,36,-1,-16,10000,13   PYLDW7   MOVBX,OFFSETTABLE   ADDBX,PYL   MOVDX,[BX]   解:DX=10FFH由・16(FFF0H)的高8位和10000(2710H)的低8位构成   8.如果堆栈的起始地址为2200:0000,栈底为0100H,(SP)=00A8H,求   (1)栈顶地址;   (2)SS的内容;   (3)再存入数据5678H,3AF2H后,SP的内容。   解:栈顶地址00A8H,SS=2200H,再存入2个字后,SP=00A4H   9.设已用伪指令EQU定义了4个标识符:   N1EQU2100   N2EQU10   N3EQU20000   N4EQU25000   下列指令是否正确?并说明原因。   (1)ADDAL,N1-N2;(2)MOVAX,N3+N4;   (3)SUBBX,N4-N3;(4)SUBAH,N4-N3-N1;   (5)ADDAL,N2;(6)MOVAH,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位互换。   解:⑴ANDAX,OFFFOH   (2)ORBX,000FH   (3)XORAL,0F0H   (4)TESTBX,06H(5)MOVAX,BX   JZZEROANDAX,06H   MOVAL,OOHXORAX,06H   JMPOVERJZOVER   ZERO:MOVAL,OFFHMOVAL,OFFH   OVER:OVER:   (6)ANDAL,5FH   或者:   CMPAL,61H   JLOVER(无需变换或不是字母)   CMPAL,7AH   JGOVER(不是字母)   ANDAL,5FH或SUBAL,20H   OVER:   (7)ORAL,20H   或者:   CMPAL,41H   JLOVER(不是字母)   CMPAL,5AH   JGOVER(无需变换或不是字母)   ORAL,20H或ADDAL,20H   OVER:   (8)XORAX,OFFFFH或者NOTAX   (9)XORDX,007FH   (10)XCHGCH,CL   11.写出完成下述功能的程序段:   (1)传送40H到AL寄存器;   (2)将AL的内容乘以2;   (3)传送16H到All寄存器;   (4)AL的内容加上AH的内容。   计算最后结果(AL)=?   解:⑴MOVAL.40H   (2)SHLAL,1   (3)MOVAH,16H   (4)ADDAL,AH   AL=96H   12.写出完成下述功能的程序段:   (1)从缓冲区BUF的0004偏移地址处传送一个字到AX寄存器;   (2)将AX寄存器的内容右移2位;   (3)将AX内容与BUF的0006偏移地址处的一个字相乘;   (4)相乘结果存入BUF的0020II偏移地址处(低位在前)。   解:(1)LEASI,BUF   MOVAX,[SI+4]   (2)SHRAX,1   SHRAX,1   (3)MULWORDPTR6LSI]   (4)MOV20H[SI],AX   MOV22H[SI1,DX   13.设(BX)=,变量VAR的内容为00B,求下列指令单独执行后BX的内   容:   (1)XORBX,VAR;(2)ANDBX,VAR;   (3)ORBX,VAR;(4)XORBX,B;   (5)AND•BX,00001111B;(6)TESTBX,1   解:⑴00F9H   (2)0002H   (3)OOFBH   (4)003BH   (5)000BH   (6)OOCBH   14.设(DX)=,(CL)=3,(CF)=1,求下列指令单独执行后DX的内容:   (1)SHRDX,1;(2)SARDX,CL;(3)SHLDX,CL;   (4)SHLDX,1;(5)RORDX,CL;(6)ROLDL,CL;   (7)SALDH,1;(8)RCLDX,CL;(9)RCRDL,1   解:DX=00000000BCF=1CL=3   (1)SHRDX,DX逻辑右移011101B005DH   (2)SARDX,CLDX算术右移010111B0017H   (3)SHLDX,CLDX逻辑左移011000B05D8H   (4)SHLDX,1DX逻辑左移B0176H   (5)RORDX,CLDX循环右移010111B6017H   (6)ROLDL,CLDL循环左移011101B00DDH   (7)SALDH,1DH算术左移BOOBBH   (8)RCLDX,CLDX带进位循环左移011100B05DCH   (9)RCRDL,1DL带进位循环右移011101B=00DDH   15.选择题(各小题只有一个正确答案)   (1)执行下列三条指令后:   MOVSP,1000H   PUSHAX   CALLBX   a.(SP)=1000H;b.(SP)=OFFEH;   c.(SP)=1004H;d.(SP)=OFFCH;   (2)要检查寄存器AL中的内容是否与AH相同,应使用的指令为:   a.ANDAL,AHb.ORAL,AH   c.XORAL,AHd.SBBAL,AH   (3)指令JMPNEARPTRLI与CALLLI(LI为标号)的区别在于:   a.寻址方式不同;b.是否保存IP的内容;   c.目的地址不同;d.对标志位的影响不同。   解:(1)DPUSHUAX则AX入栈,SP=0FFEH;CALLBX贝ijIP入栈,SP=0FFCH   (2)C异或,若相同,则AL=0,ZF=lo   (3)B   16.寄存器DX:AX组成32位数,DX为高位,编写程序段实现:   (1)DX:AX右移3位,并将移出的低3位保存在CL中;   (2)DX:AX左移3位,并将移出的高3位保存在CL中;   解:(1)移出的3位应该按时序移入CL中。   XORCL,CL   MOVBL,3   LI:SHRDX,1   RCRAX,1   RCLCL,1   DECBL   JNZLI   (2)移出的3位应该按时序移入CL中。   XORCL,CL   MOVBL,3   LI:SHLAX,1   RCRDX,1   RCRCL,1   DECBL   JNZLI   17.编写程序段实现将BL中的每一位重复4次,构成32位的双字DX:AX,例如当BL   =0B时,则得到的(DX)=0F0FH,(AX)=OFFOFH。   解:算术右移时,移入的值就是最高位本身,这样可以使位内容重复,利用这一点可以实现   题目的要求。   XORDX,DX   XORAX,AX   MOVCX,4   L1:SHRBL,1   RCRAX,1   SARAX,1   SARAX,1   SARAX,1   LOOPLI   MOVCX,4   L2:SHRBL,1   RCRDX,1   SARDX,1   SARDX,1   SARDX,1   LOOPL2   18.字变量VAR1中保存有小于38250的16位无符号数,编写程序段实现VAR1+150,并   进行四舍五入操作,将商保存在字节变量VAR2中。   解:根据题意,38250+150=255,因此商不会超过255,可以用一个字节表示。   a+b的四舍五入操作可以通过判断除后余数实现:余数大于等于除数的一半,则商加1;   否则不用加L但这种方法用汇编语言编程实现时比较复杂,这里介绍另外一种方法:设a   七b的四舍五入后的结果为c,用[J表示取整数操作,则   这种方法是在除法操作之前,在被除数上加上除数的一半,这样除法操作后得到的值就是考   虑了四舍五入的商。   VARIDW12345   VAR2DB?   DATAADB150   MOVAX,VARI   XORBX,BX   MOVBL,DATAA   SHRBX,1   ADDAX,BX   DIVDATAA   MOVVAR2,AL   19.有一组无符号的16位数据保存在BUFFER中,前两个字节存放数据的个数,编程实现   按下式进行滤波处理   双)W(“)+X(“D+M”2))kN2   y(k)=x(k)k<2   解:滤波结果保存在FILT中。   BUFFERDWOCH   DW33H,18H,1BH,06H,33H,08H   DW3H,6H,OFH,51H,05H,OCH   FILTDW100HDUP(?)   LEASI,BUFFER   LEADI,FILT   MOVCX,[SI]   MOV[DI],CX   ADDSI,2   ADDDI,2   XORDX,DX   MOVAX,[SI]   MOV[DI],AX   MOVBX,2[SI]   MOV2[DI],BX   ADDSI,4   ADDDI,4   DECCX   DECCX   ADDAX,BX   ADCDX,0   MOVBX,3   LI:   ADDAX,[SI]   ADCDX,0   PUSHDX   PUSHAX   DIVBX   MOV[DIJ,AX   POPAX   POPDX   SUBAX,[SI-4]   SUBBDX,0   ADDDI,2   ADDSI,2   LOOPLI   20.在由字符串构成的缓冲区BUFFER中,前2个字节存放字符个数,后续每个字节存放   一个字符的ASCII码。编写程序实现将字符串‘2004’替换成‘2006’。   解:在数据段中定义:   BUFFERDW74   DB”Thisyearis2004.In2004,wehaveaplanforreducingannualexpensive10%’   DESTDB’2004’   在代码段中编写程序段:   CLD   LEASI,BUFFER   MOVCX,[SI]   ADDSI,2   LEADI,DEST   LI:PUSHSI   PUSHDI   PUSHCX   MOVCX,4   REPZSCASB   JNZL2   MOVBYTEPTR[SI-1],,6,   L2:POPCX   POPDI   POPSI   INCSI   INCDI   LOOPLI   21.定义有下列宏指令:   WAGSMACROS1,S2,S3   SUBAX,AX   MOVDX,AX   ADDAX,SI   ADDAX,S2   ADCDX,0   ADDAX,S3   ADCDX,0   ENDM   当采用宏调用指令“WAGS60000,25000,3000”时,执行后DX=AX=。   解:宏指令WAGS完成的功能为S1+S2+S3,结果放在DX:AX中。所以,调用“WAGS   60000,25000,3000”时,其结果为DX=0001H,AX=57C0H   22.对上题定义的宏指令,如果采用宏调用指令”WAGSBX,CX,SI”时,写出宏展开形式。   解:调用“WAGSBX,CX,SI”时,宏展开形式:   SUBAX,AX   MOVDX,AX   ADDAX,BX   ADDAX,CX   ADCDX,0   ADDAX,SI   ADCDX,0   23.写出宏指令SUMMING,实现将字节缓冲区array中的内容求校验和(保留低8位),   并保存在VALUE中。   解:设array前两个字节保存缓冲区字节数,在宏指令SUMMING,将array和VALUE作为   形式参数。   SUMMINGMACROarray,VALUE   LEASI,array   MOVCX,[SI]   ADDSI,2   XORAL,AL   LI:ADDAL,[SI]   INCSI   LOOPLI   MOVVALUE,AL   ENDM   第4章汇编语言程序设计   1.一知在BUF的起始处保存有N个字符的ASCII码,编写汇编语言程序实现,将这组字   符串传送到缓冲区BUFR中,并且使字符串的顺序与原来的顺序相反。   解:BUFDB”BONJOUR_BELLEn   BUFRDB100DUP(?)   MOVCX,N   LEASI,BUF   LEADI,BUFR   ADDDI,CX   DECDI   LI:   MOVAL,[SI]   MOV[DILAL   INCSI   DECDI   LOOPLI   2.利用移位、传送和相加指令实现AX的内容扩大10倍。   解:将扩大后的结果放在DX:AX中,注意至Ij10XAX=8XAX+2XAX。   XORDX,DX   SHLAX,1   RCLDX,1   MOVBX,AX   MOVCX,DX   SHLAX,1   RCLDX,1   SHLAX,1   RCLDX,1   ADDAX,BX   ADCDX,CX   3.在缓冲区VAR中连续存放着3个16位的无符号数,编写程序实现将其按递增关系排列;   如果VAR中保存的为有符号数,则再编写程序实现将其按递减关系排列。   解:VARDW1236,-432,3900   XORSI„SI   MOVAX,VAR[SI]   CMPAX,VAR[SI+2J   JAELI   XCHGAX,VAR[SI+2]   LI:   CMPAX,VARISI+4J   JAEL2   XCHGAX,VAR[SI+4]   L2:   MOVVARfSI],AX   MOVAX,VAR[SI+2]   CMPAX,VAR[SI+4]   JAEL3   XCHGAX,VAR[SI+4]   L3:   MOVVAR[SI+2],AX   4.编写程序段实现将AL和BL中的每一位依次交叉,得到的16位字保存在DX中,例   如(AL)=0B,(BL)=,则得到的(DX)=lOOHOOlBo   解:利用移位指令完成。   XORDX,DX   MOVCX,8   LI:   SHRAL,1   RCRDXJ   SHRB

2024最新激活全家桶教程,稳定运行到2099年,请移步至置顶文章:https://sigusoft.com/99576.html

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。 文章由激活谷谷主-小谷整理,转载请注明出处:https://sigusoft.com/32327.html

(0)
上一篇 2024年 9月 11日 上午9:43
下一篇 2024年 9月 11日

相关推荐

关注微信