微机原理习题答案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