




已阅读5页,还剩42页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
习题一1.1 把下列2、8、16进制数转换成为十进制数(1)(1011011)2(2)(0.10110)2(3)(111111.01)2(4)(1000001.11)2(5)(377)8(6)(0.24)8(7)(3FF)16(8)(2A.4)16解:(1)(1011011)2=64+16+8+2+1=91 另解:原式=(5B)16=516+11=91(2)(0.10110)2=0.5+0.125+0.0625=0.6875(3)(111111.01)2=32+16+8+4+2+1+0.25=63.25 另解:原式=(1000000-1+0.01)2=64-1+0.25=63.25(4)(1000001.11)2=64+1+0.5+0.25=65.75(5)(377)8=364+78+7=255 另解:原式=(400-1)8=464-1=255(6)(0.24)8=20.125+40.015625=0.3125(7)(3FF)16=3256+1516+15=1023 另解:原式=(400-1)16=4256-1=1023(8)(2A.4)16=216+10+40.0625=42.25 另解:原式=216+10+416=42.251.2 把下列十进制数转换为2、16进制数(1)(127)10(2)(33)10(3)(0.3)10(4)(0.625)10(5)(1023.5)10(6)(377)10(7)(1/1024)10(8)(377/32)10解:(1)(127)10=64+32+16+8+4+2+1= (111 1111)2=(7F)16 另解:原式=(128-1)10=(1000 0000-1)2=(111 1111)2=(7F)16(2)(33)10=32+1= (10 0001)2=(21)16(3)(0.3)10= (0.0100 1100 1)2=(0.4CCC)16(4)(0.625)10= 0.5+0.125=(0.101)2=(0.A)16(5)(1023.5)10 = 512+256+128+64+32+16+8+4+2+1+0.5=(11 1111 1111.1)2=(3FF.8)16(6)(377)10=256+64+32+16+8+1=(1 0111 1001)2=(179)16(7)(1/1024)10=(0.0000 0000 01)2=(0.004)16(8)(377/32)10=(256+64+32+16+8+1)(32)= (101111001)2(100000)2=(1011.11001)2=(0B.C1)161.3 把下列二进制数转换为十六进制数(1)(100011)2(2)(0.11101)2(3)(11111.11)2(4)(0.00101)2解: (1)(100011)2=(100011)2=23H(2)(0.11101)2=(0.11101000)2=0.E8H(3)(11111.11)2=(11111.1100)2=1F.CH(4)(0.00101)2=(0.00101000)2=0.28H1.4 把下列十六进制数转换为二进制数(1)(3B6)16(2)(100)16(3)(80.2)16(4)(2FF.A)16解:(1)(3B6)16=(0011 1011 0110)2(2)(100)16=(0001 0000 0000)2(3)(80.2)16=(1000 0000.0010)2(4)(2FF.A)16 =(0010 1111 1111.1010)21.5 如果用24b储存一个无符号数,这个数的范围是什么?如果储存的是一个补码表示的有符号数,那么这个数的范围又是什么?答:如果用24b储存一个无符号数,这个数的范围应为:0224-1如果用24b储存一个补码表示的有符号数,这个数的范围应为:-223+223-11.6 两个无符号数,它们的大小等于十进制数210和303,用N位二进制存储时,相加产生了进位,用N+1位二进制存储时,相加没有产生进位。这个N等于多少?为什么?答:210+303=513, 29513X2X3X1X41.10 用8位补码完成下列运算,用二进制“真值”的格式给出运算结果,并指出运算后CF、OF、ZF、SF、PF标志位的状态。(1)127+126(2)126-127(3)-100-120(4)-100-(-120)解: (1)127+126127补=0111 1111,126补=0111 1110,127+126补=1111 1101,127+126=-0000 0011(溢出)COZSP=01010(2)126-127126补=0111 1110,-127补=1000 0001,126-127补=1111 1111,126-127=-000 0001COZSP=10011(3)-100-120-100补=1001 1100,-120补=1000 1000,-100-120补=0010 0100,-100-120=+0010 0100(溢出)COZSP=01001(4)-100-(-120)-100补=1001 1100,-120补=1000 1000, -120补求补=0111 1000,-100-(-120)补=0001 0100,-100-(-120)=+0001 0100COZSP=000011.11 把二进制代码1001011101011000分别“看作”是:(1)二进制无符号数(2)二进制补码(3)压缩BCD码(4)非压缩BCD码哪一种情况下它代表的“值”最大?答:看作二进制无符号数时,它代表的“值”最大。分析:看作二进制补码时,它代表一个负数,而其它的情况下,它均为正数。因此,看作二进制补码时,它代表的值最小。把这组代码用十六进制数字形式写出:9758 对于无符号数,它的值等于十六进制的9758H;对于压缩BCD码,它的值等于十进制的9758,显然小于9758H;对于非压缩BCD码,它的值等于十进制的78,显然更小于9758H;因此,看作二进制无符号数时,它代表的“值”最大。1.12 CPU使用“寄存器”有什么好处?为什么?答:CPU使用寄存器主要有两个好处:(1) 寄存器位于CPU内部,访问寄存器比访问内存储器速度快;(2) 寄存器数量大大少于内存储器单元个数,标识寄存器使用的二进制代码比标识内存储器单元使用的二进制代码少得多,可以缩短指令长度。1.13 已知8086系统某存储单元物理地址为12345H,写出4个可以与它对应的“逻辑地址”。答:可以与物理地址12345H对应的逻辑地址有: 1234H:0005H, 1230H:0045H, 1220H:0145H, 1224H:0105H, 1.14 已知8086系统某存储单元物理地址为12345H,可以与它对应的“逻辑地址”中,段基址最大值,最小值分别是多少?答:可以与物理地址12345H对应的逻辑地址中,段基址的最大值为1234H,最小值为0235H。分析:偏移地址取最大值时,对应的段基址为最小。偏移地址可选的最大值为0FFF5H(最后一位必须为5),因此最小的段基址=(12345H-0FFF5H)/10H=0235H。偏移地址取最小值时,对应的段基址最大。偏移地址可选的最小值为0005H(最后一位必须为5),因此最大的段基址=(12345H-0005H)/10H=1234H。1.15 8086微机最多可以有多少个不同的“段基址”?为什么?答:由于段基址由16位二进制数表示,因此可以有216=65536个不同的段基址。1.16 在图1-6中,假设已有(R1)=X,(R2)=Y,分别用它的机器指令和符号指令写出计算R04X2Y的程序。想一想,怎样做才能尽量减少指令数量?答:假设已有(R1)=X,(R2)=Y,可以编制如下计算R04X2Y的程序:符号指令机器指令注释MOV R0, R11 000 00 01(81H)R0XADDR0, R11 001 00 01(91H)R0XXADDR0, R21 001 00 10(92H)R02XYADDR0, R01 001 00 00(90H)R04X2Y减少指令的方法是先计算出2X+Y,然后再计算4X+2Y。可以有多种不同的写法。1.17 什么是“逻辑地址”?什么是“线性地址”?什么是“物理地址”?它们如何转换?答:由段的起始地址(段基址)或者段的编号和段内相对地址两部分表示的地址称为“逻辑地址”。经过“分段机构”处理后,用一组二进制代码表示的地址称为“线性地址”。经过“分页机构”处理后,用一组二进制代码表示的存储单元的“真实”的地址称为“物理地址”。物理地址的位数等于地址总线的宽度。工作在实地址模式下的80X86MPU不使用线性地址,物理地址=段基址16+段内偏移地址。80X86MPU工作在保护模式下时,分段机构用段的编号在“段描述符表”中找到段的起始地址,加上偏移地址得到“线性地址”。分页机构把线性地址从高位到低位分解为“页组地址:页地址:页内地址”三部分,由页组地址(页组号)查找“页组表”,获得该页组对应的“页表”首地址。然后用页地址(页号)去查“页表”,得到该页的起始地址,拼接上页内地址,得到“物理地址”。保护模式下也可以关闭分页机构,此时线性地址等于物理地址。1.18 32位80X86和16位80X86中央处理器的段寄存器有什么不同?答:16位80X86CPU的段寄存器长度为16位,存放的是一个段起始地址的高16位。32位80X86CPU的段寄存器长度仍然为16位,存放的是一个段在“段描述符表”中的序号,表的编号(对每一个程序,有两张段描述符表)和这个段的优先级别。1.19 叙述“保护模式”和“虚拟8086方式”之间的关系。答:保护模式是32位80X86MPU的工作方式,对当前运行的所有任务实施保护。虚拟8086方式是保护模式下某一个任务的工作模式,该任务使用类似于实地址方式下的物理地址产生方式,使用1MB的虚拟内存空间,主要用于运行8086程序。习题二2.1 某数据段内有如下数据定义:Xdb30, 30H, ABC, 2-3, ?, 11001010Bdw0FFH,-2, “CD”Ydd20 dup(15, 3 dup(?), 0)Zdb3 dup(?)WdwZ-X假设变量X的偏移地址为20H。(1) 按照图2-1的格式写出变量X各数据在内存中的具体位置和相关内存单元的值。(2) 写出变量Y,Z的偏移地址。(3) 写出变量W的值答:(1)变量X各数据在内存中的具体位置和相关内存单元的值如右图。(2) 变量Y的偏移地址为002EH;变量Z的偏移地址为002EH+4520=01BEH(3) 变量W的值等于变量Z和X偏移地址之差01BEH-0020H=019EH它等于变量X、Y所占用内存单元的字节数。2.2 80x86指令系统有哪几种类型的指令操作数?比较使用不同类型操作数后的指令长度和指令执行时间。答:80X86指令系统按照长度划分,有以下四种指令操作数:(1) 寄存器操作数,指令短,执行速度快;(2) 立即操作数,指令较长,执行速度快;(3) 寄存器间接寻址和基址变址寻址表示的内存储器操作数,这类指令长度较短,执行速度较慢(需要访问存储器);(4) 直接地址,寄存器相对寻址,相对的基址变址寻址表示的内存储器操作数,这类指令长度较长,执行速度较慢(需要计算物理地址,访问存储器)。2.3下列指令的源操作数段基址在哪个段寄存器中?(1)MOVAX, BPSI(2)MOVAX, CS:8DI(3)MOVAX, 2EBP*1(4)MOVAX, FS:4ESP(5)MOVAX, 2EBPEAX(6)MOVAX, ECXEBP*4(7)MOCAX, EDXEBP(8)MOVAX, ES:10EBPEAX*2答:各指令源操作数段基址使用的段寄存器如下:(1) SS(2) CS(3) SS(4) FS(5) SS(6) DS(7) DS(8) ES2.4判断下列指令是否正确。若不正确,指出错误原因(1)MOVAX, EBX(2)MOVSI, DL(3)MOVEBP, ESPEAX*3(4)LEAAX, 3006H(5)MOVBPDI, 0(6)MOVSI, DI(7)MOVES, 1000H(8)MOVAX, X+2(9)MOVAX, CX+2(10)MOVEAXEAX*2, AL答: (1)指令MOVAX, EBX是正确的。(2)指令MOVSI, DL是错误的,两个操作数类型不匹配。(3)指令MOVEBP, ESPEAX*3 是错误的,比例因子不能为3。(4)指令LEAAX, 3006H是错误的,LEA指令的源操作数必须为内存操作数。(5)指令MOVBPDI, 0是错误的,操作数类型无法确定。(6)指令MOVSI, DI 是错误的,不能同时出现两个内存操作数。(7)指令MOVES, 1000H是错误的,装载段寄存器时,源操作数不能为立即数。(8)如果“X”是用常数表达式定义的符号(例如:X EQU 5+6),或者是用“DW”定义的内存变量,指令MOVAX, X+2是正确的。否则这条指令是错误的。(9)指令MOVAX, CX+2是错误的,源操作数表达式CX+2不是一个可以直接计算的“常数表达式”。(10)指令MOVEAXEAX*2, AL是正确的。2.5现有(DS)=2000H ,(BX)=0100H,(SI)=0002H,(20100H)=12H,(20101H)=34H,(20102H)=56H,(20103H)=78H,(21200H)=2AH,(21201H)=4CH,(21202H)=0B7H,(21203H)=65H,说明下列指令执行后AX寄存器的内容。(1)MOVAX, 1200H(2)MOVAX, BX(3)MOVAX, 1200H(4)MOVAX, BX(5)MOVAX, 1100HBX(6)MOVAX, BXSI(7)MOVAX, 1100HBXSI答 :(1)指令MOVAX, 1200H执行后,(AX)=1200H (立即数操作数)。(2)指令MOVAX, BX执行后,(AX)=0100H (寄存器操作数)。(3)指令MOVAX, 1200H 执行后,(AX)=4C2AH(直接地址,EA=1200H)(4)指令MOVAX, BX 执行后,(AX)=3412H(寄存器间接寻址,EA=0100H)(5)指令MOVAX, 1100HBX 执行后,(AX)= 4C2AH(相对地址,EA=1200H)(6)指令MOVAX, BXSI 执行后,(AX)=7856H(基址变址寻址,EA=0102H)(7)指令MOVAX, 1100HBXSI 执行后,(AX)=65B7H(相对基址变址寻址,EA=1202H)2.6已经定义字符串MYSTRING如下:MYSTRINGDBA Sample for addressing.用适当的指令把这个字符串的第5,12个字符(注:第0个字符是A)送入BX寄存器。答:可以用如下两条指令完成:MOVBL, MYSTRING5MOVBH, MYSTRING122.7下面两条指令的功能有什么区别?MOVAX, BXMOVAX, BX答:指令“MOV AX, BX”把BX寄存器的内容装入到AX中。指令“MOVAX, BX”把内存储器一个字的内容装入AX寄存器。该字的段基址在DS中,偏移地址在BX中。2.8已经定义数据段如下:DATASEGMENTNUM=56XDBNUMYDB27ZDW148DATAENDS指出下列指令中的错误:(1)MOVY, X(2)MOVBL, 04B8H(3)MOVAL, Z(4)MOVBX, 3(5)MOVBX, DI(6)MOVDS, DATA(7) MOVNUM, AX(8)MOVES, DS(9) MOVAX, FLAGS(10)MOVCS, AX答: (1)指令MOVY, X 同时出现了两个存储器操作数。(2)指令MOVBL, 04B8H 操作数类型不匹配(04B8H是16位立即数,BL是8位寄存器)。(3)指令MOVAL, Z 操作数类型不匹配(Z是16位操作数,BL是8位寄存器)。(4)指令MOVBX, 3 操作数类型不能确定。(5)指令MOVBX, DI 出现了两个存储器操作数。(6)指令MOVDS, DATA 不能把立即数装入段寄存器。(7)指令MOVNUM, AX 立即数不能用作目的操作数。(8)指令MOVES, DS 不能在段寄存器之间直接传输。(9)指令MOVAX, FLAGS中,FLAGS寄存器只能隐含在少量指令中使用。(10)指令MOVCS, AX 中,CS寄存器不能用作目的操作数。2.9 用适当的指令,把下面字符串STRING中的“&”字符用空格代替。STRINGDB“The Date is FEB&03”答:可以使用如下指令:MOVSTRING15, 20H; 20H是空格的ASCII代码习题三3.1 根据以下要求,写出对应的汇编语言指令(1) 把BX和DX寄存器内容相加,结果存入DX寄存器。(2) 使用BX和SI寄存器进行基址变址寻址,把存储器中一字节内容与AL内容相加,结果存入存储单元。(3) 用寄存器BX和位移量0B2H的寄存器相对寻址方式,把存储器中一个双字与ECX相加,结果存入ECX。(4) 用偏移地址1020H直接寻址,把存储单元一个字内容与立即数3相加,结果存入存储单元。(5) 将AL寄存器内容与立即数120相加,结果存入AL寄存器。答: (1)ADDDX, BX(2)ADDBXSI, AL(3)ADDECX, BX+0B2H(4)ADDWORD PTR1020H, 3(5)ADDAL, 1203.2 求以下各十六进制数与62A8H之和,并根据结果写出标志位SF、CF、ZF、OF的值。(1)1234H(2)4321H(3)0CFA0H(4)9D60H(5)0FFFFH答:(1)1234H+62A8H=74DCHSCZO= 0000(2) 4321H+62A8H=0A5C9HSCZO= 1001 (3) 0CFA0H+62A8H=3248HSCZO= 0100(4) 9D60H+62A8H=0008HSCZO= 0100(5) 0FFFFH+62A8H=62A7HSCZO= 01003.3求以下各十六进制数与4AE0H之差,并根据结果写出标志位SF、CF、ZF、OF的值。(1)1234H(2)5D90H(3)9076H(4)0EA04H(5)0FFFFH答: (1) 1234H-4AE0H=0C754HSCZO= 1100(2) 90H-4AE0H=12B0HSCZO= 0000(3) 9076H-4AE0H=4597HSCZO= 0001(4) 0EA04H-4AE0H=9F24HSCZO= 1000(5) 0FFFFH-4AE0H=0B51FHSCZO= 10003.4 写出执行以下计算的指令序列,其中各变量均为16位有符号数。(1) ZW+(Z-X)(2) ZW-(X+6)-(R+9)(3) Z(W*X)/(Y+6), R余数(4) Z(W-X)/(5*Y)*2解:(1)MOVAX, WMOVBX, ZSUBBX, XADDAX, BXMOVZ, AX(2)MOVAX, WMOVBX, XADDBX, 6SUBAX, BXMOVBX, RADDBX, 9SUB AX, BXMOVZ, AX(3)MOVAX, WIMULXMOVBX, YADDBX, 9IDIVBXMOVZ, AXMOVR, DX(4)MOVAX, YMOVBX, 5IMULBXMOVBX, AXMOVAX, WSUBAX, XMOVCX, 2IMULCXIDIVBXMOVZ, AX3.5 一个双字长有符号数存放在DX(高位)AX(低位)中,写出求该数相反数的指令序列。结果仍存入DX,AX寄存器解:NOTDX;首先将(DX, AX)取反NOTAXADDAX, 1;最低位加1,注意:不能用INC指令ADCDX, 0;把进位(如果有)传递到高位3.6 指令DEC BX和SUB BX, 1的执行结果一样吗?请分析。解:指令DEC BX和SUB BX, 1分别执行后,BX寄存器内的值相同,但是CF标志位的状态可能不同,这是由于DEC指令执行后不改变CF的状态。3.7 已知内存变量X, Y, Z均由“DB”伪操作定义,按照以下要求,使用MOVZX或MOVSX指令进行位数扩展,求三个数的16b和。(1) 如果X,Y,Z为无符号数(2) 如果X,Y,Z为有符号数解:(1) MOVZXAX, XMOVZXBX, YADDAX, BXMOVZXBX, ZADDAX, BX(2)MOVSXAX, XMOVSXBX, YADDAX, BXMOVSXBX, ZADDAX, BX3.8 内存缓冲区BUFFER定义如下,按照要求,写出指令序列BUFFERDB20 DUP(?)(1) 将缓冲区全部置为0,并使执行时间最短(2) 将缓冲区全部置为空格字符(ASCII代码20H),使用的指令条数最少(3) 将缓冲区各字节依次设置为0,1,2,3,4,19(4) 将缓冲区各字节依次设置为0,-1,-2,-3,-4,-19(5) 将缓冲区各字节依次设置为30,29,28,27,11(6) 将缓冲区各字节依次设置为0,2,4,6,8,38(7) 将缓冲区各字节依次设置为0,1,2,3,0,1,2,3,3解:(1)XOREAX, EAXMOVDWORD PTR BUFFER, EAXMOVDWORD PTR BUFFER+4, EAXMOVDWORD PTR BUFFER+8, EAXMOVDWORD PTR BUFFER+12, EAXMOVDWORD PTR BUFFER+16, EAX(2)MOVAL, 20HMOVCX, 20LEABX, BUFFERONE:MOVBX, ALINCBXLOOPONE(3)XORBX, BXMOVCX, 20ONE:MOVBUFFERBX, BLINCBXLOOPONE(4)XORBX, BXXORAL, ALMOVCX, 20ONE:MOVBUFFERBX, ALINCBXDECALLOOPONE(5)XORBX, BXMOVAL, 30MOVCX, 20ONE:MOVBUFFERBX, ALINCBXDECALLOOPONE(6)XORBX, BXXORAL, ALMOVCX, 20ONE:MOVBUFFERBX, ALINCBXADDAL, 2LOOPONE(7)XORBX, BXMOVCX, 5ONE:MOVBUFFERBX, 0MOVBUFFERBX+1, 1MOVBUFFERBX+2, 2MOVBUFFERBX+3, 3ADDBX, 4LOOPONE3.9 编写循环结构程序,进行下列计算,结果存入RESULT内存单元(1) 1+2+3+4+5+6+ +100(2) 1+3+5+7+9+11+ +99(3) 2+4+6+8+10+ +100(4) 1+4+7+10+13+ +100(5) 11+22+33+44+ +99解:(1)CODESEGMENTASSUMECS: CODERESULTDW?START:XORAX, AXMOVCX, 100AGAIN:ADDAX, CXLOOPAGAINMOVRESULT, AXMOVAX, 4C00HINT21HCODEENDSENDSTART(2)CODESEGMENTASSUMECS: CODERESULTDW?START:XORAX, AXMOVCX, 50MOVBX, 1AGAIN:ADDAX, BXADDBX, 2LOOPAGAINMOVRESULT, AXMOVAX, 4C00HINT21HCODEENDSENDSTART(3)CODESEGMENTASSUMECS: CODERESULTDW?START:XORAX, AXMOVCX, 50MOVBX, 2AGAIN:ADDAX, BXADDBX, 2LOOPAGAINMOVRESULT, AXMOVAX, 4C00HINT21HCODEENDSENDSTART(4)CODESEGMENTASSUMECS: CODERESULTDW?START:XORAX, AXMOVCX, 34MOVBX, 1AGAIN:ADDAX, BXADDBX, 3LOOPAGAINMOVRESULT, AXMOVAX, 4C00HINT21HCODEENDSENDSTART(5)CODESEGMENTASSUMECS: CODERESULTDW?START:XORAX, AXMOVCX, 9MOVBX, 11AGAIN:ADDAX, BXADDBX, 11LOOPAGAINMOVRESULT, AXMOVAX, 4C00HINT21HCODEENDSENDSTART3.10 已知ARRAY是5行5列的有符号字数组,编写程序,进行下列计算(假设和仍然为16b,不会产生溢出)(1) 求该数组第4列所有元素之和(列号从0开始)(2) 求该数组第3行所有元素之和(行号从0开始)(3) 求该数组正对角线上所有元素之和(4) 求该数组反对角线上所有元素之和解:假设数据段已定义如下:DATASEGMENTARRAYDW1, 6, 9, 23,12;定义数组ARRAYDW54, 23, 15, -92, 37;每一行5个数据DW-99, 231, 76, 81, 90;共5行DW33, 67, 81, -99, 0;共计25个数据DW123, -52, 77, -180, 89SUMDW?;SUM存放结果DATAENDS(1)CODESEGMENTASSUMECS: CODE, DS: DATASTART:MOVAX, DATAMOVDS, AXMOVAX, 0;累加器在循环之前清零MOVCX, 5;计数器置初值MOVSI, 4*2;第1行第4列元素在数组内的位移NEXT:ADDAX, ARRAYSIADDSI, 5*2;SI指向下一行第4列元素LOOPNEXTMOVSUM, AXMOVAX, 4C00HINT21HCODEENDSENDSTART(2)CODESEGMENTASSUMECS: CODE, DS: DATASTART:MOVAX, DATAMOVDS, AXMOVAX, 0;累加器在循环之前清零MOVCX, 5;计数器置初值MOVSI, 3*5*2;第3行第0列元素在数组内的位移NEXT:ADDAX, ARRAYSIADDSI, 2;SI指向本行下一列元素LOOPNEXTMOVSUM, AXMOVAX, 4C00HINT21HCODEENDSENDSTART(3)CODESEGMENTASSUMECS: CODE, DS: DATASTART:MOVAX, DATAMOVDS, AXMOVAX, 0;累加器在循环之前清零MOVCX, 5;计数器置初值MOVSI, 0;第0行第0列元素在数组内的位移NEXT:ADDAX, ARRAYSIADDSI, 5*2+2;SI指向正对角线上下一个元素LOOPNEXTMOVSUM, AXMOVAX, 4C00HINT21HCODEENDSENDSTART(4)CODESEGMENTASSUMECS: CODE, DS: DATASTART:MOVAX, DATAMOVDS, AXMOVAX, 0;累加器在循环之前清零MOVCX, 5;计数器置初值MOVSI, 4*2;第0行第4列元素在数组内的位移NEXT:ADDAX, ARRAYSIADDSI, (5-1)*2;SI指向反对角线上下一个元素LOOPNEXTMOVSUM, AXMOVAX, 4C00HINT21HCODEENDSENDSTART3.11 编写程序,利用公式:N2=1+3+5+ +(2N-1)计算N2的值,假设N=23。解:DATASEGMENTNDW23SQUAREDW?;存放结果DATAENDSCODESEGMENTASSUMECS: CODE, DS: DATASTART:MOVAX, DATAMOVDS, AXMOVCX, N;循环计数器置初值XORAX, AX;累加器清零MOVBX, 1;数列第一项ONE:ADDAX, BXADDBX, 2LOOPONEMOVSQUARE, AXMOVAX, 4C00HINT21HCODEENDSENDSTART3.12 变量X, Y, Z均为一字节压缩BCD码表示的十进制数,写出指令序列,求它们的和(用2字节压缩BCD码表示)。解:XORAX, AX;清AX,用于存放2字节结果MOVAL, XADDAL, Y;完成X+YDAA;压缩BCD码加法调整ADCAH, 0;把可能的进位收集到AH中;AH中最大的可能值为2,因此不需要BCD加法调整ADDAL, Z;完成X+Y+ZDAA;压缩BCD码加法调整ADCAH, 0;把可能的进位收集到AH中;计算完成,结果(2字节压缩BCD码)在AX中3.13 数组LIST1内存有20个非压缩BCD码表示的单字节十进制数,写出完整程序,求这20个BCD数之和,结果(非压缩BCD码)存入SUM1双字单元。解:CODESEGMENTASSUMECS: CODELIST1DB6705762998;20个非压缩BCD数DB4322687310SUM1DD?;存放结果(20个数之和)START:XORAX, AX;累加器清零MOVCX, 20;循环计数器置初值LEABX, LIST1;地址指针置初值ONE:ADDAL, CS:BX;加入一个非压缩BCD数AAA;调整,结果在AH(百位、十位),AL(个位)中INCBX;修改指针LOOPONE;循环控制MOVBYTE PTR SUM1, AL;保存个位MOVAL, AHMOVAH, 0;百位、十位(二进制)存入AXAAM;分解百位到AH,十位到ALMOVWORD PTR SUM1+1, AX;保存百位、十位MOVBYTE PTR SUM1+3, 0;千位清零(和最大为9*20=180)MOVAX, 4C00HINT21HCODEENDSENDSTART3.14数组LIST2内存有20个压缩BCD码表示的单字节十进制数,写出完整程序,求这20个BCD数之和,结果(压缩BCD码)存入SUM2双字单元。解:CODESEGMENTASSUMECS: CODELIST2DB12H, 34H, 56H, 15H, 82H, 52H, 48H, 19H, 31H, 63HDB22H, 33H, 44H, 55H, 66H, 77H, 88H, 99H, 11H, 39HSUM2DD?START:XORAX, AX;累加器清零XORBX, BX;地址指针置初值MOVCX, 20;循环计数器置初值ONE:ADDAL, LIST2BX;加入一个压缩BCD数DAA;调整XCHGAH, AL;交换AH和ALADCAL, 0;收集进位(百位、千位)DAA;高位(百位、千位)调整XCHGAH, AL;恢复AH和AL;(AH)=千位、百位,(AL)=十位、个位INCBX;修改指针LOOPONE;循环控制MOVWORD PTR SUM2, AX;保存千、百、十、个位MOVWORD PTR SUM2+2, 0;高位清零MOVAX, 4C00HINT21HCODEENDSENDSTART3.15 数组LIST3内存有20个压缩BCD码表示的双字节十进制数,写出完整程序,求这20个BCD数之和,结果(压缩BCD码)存入SUM3双字单元。解:CODESEGMENTASSUMECS: CODELIST3DW1234H, 3456H, 5678H, 1523H, 8263H,DW5234H, 4856H, 1926H, 3177H, 6389HDW2211H, 3322H, 4433H, 5544H, 6655HDW7766H, 8877H, 9988H, 1167H, 3944HSUM3DD?START:XORDX, DXXORAX, AX;累加器清零LEABX, LIST3;地址指针置初值MOVCX, 20;循环计数器置初值ONE:ADDAL, CS:BX;加入第一字节压缩BCD数(十位、个位)DAA;调整XCHGAH, AL;交换AH和ALINCBX;修改指针,指向高位字节(千位、百位)ADCAL, CS:BX;高位累加,并收集低位进位DAA;高位(百位、千位)调整XCHGAH, AL;恢复AH和AL;(AH)=千位、百位,(AL)=十位、个位INCBX;修改指针XCHGDX, AX;交换AX和DXADCAL, 0;收集千位上的进位DAA;调整,得到和的十万位和万位XCHGDX, AX;恢复DX和AXLOOPONE;循环控制
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年CICS考试模拟题及答案解析
- 2025年工业设计师执业资格考试试题及答案解析
- 2025年风景园林规划设计师执业能力考核试题及答案解析
- 2025年无人机数据处理面试题
- 幼小英语教学课件
- 2025年农村建筑安全员面试常见问题及答案
- 2025年电子商务策划师资格认定考试试卷及答案解析
- 2025年空调设备安装技术题及答案解析
- 2025年地籍测量员高级职业鉴定面试题及答案
- 2025年安全生产监督考试题及答案详解
- 《七大营养素》课件
- 国际道路旅客运输经营许可申请表
- (2023版)电信智家工程师认证必备考试题库大全(含解析)-下(判断题汇总)
- 超高层带伸臂结构巨型环桁架施工技术总结附图
- 2乳的验收与预处理解析
- 三峡大学级本科电气工程及其自动化二本培养方案
- 架桥机安装与拆除安全技术交底
- GB/T 19839-2005工业燃油燃气燃烧器通用技术条件
- 伤口造口新进展课件
- (完整版)人工智能介绍课件
- 预防校园欺凌-共创和谐校园-模拟法庭剧本
评论
0/150
提交评论