您好,欢迎访问三七文档
1微机原理作业第三章汇编语言程序设计题3.1A在下列程序运行后,给相应的寄存器及存储单元填入运行的结果:MOVAL,10HMMOVCX,1000HBLMOVBX,2000H1000HMOV[CX],ALBHXCHGCX,BXMOVDH,[BX]CLMOVDL,01HXCHGCX,BXCLMOV[BX],DL2000HHLTDLAL=1OHBL=OOHBH=2OHCL=OOHCH=1OHDH=1OH(10O0H)=lOH(200OH)=0lH题3.1BDL要求同题3.1A程序如下;MOVAL,50HALMOVBP,1000HMOVBX,2000HMOV[BP],ALMOVDH,20HMOV[BX],DHMOVDL,01HMOVDL,[BX]MOVCX,3000H2HLTAL=5OHBL=OOHBH=20HCL=OOHCH=30HDL=20HDH=2OHBP=100OH(10OOH)=5OH(20OOH)=20H题3.2,如在自1000H单元开始有一个100个数的数椐块。要把它传送到自2000H开始的存储区中去,用以下三种方法,分别编制程序;1;不用数据块转送指令;2;用单个转送的数据块转送指令;3;用数据块成组转送指令;(1)LEASI,1OOOHLEADI,200OHMOVCX,100L1:MOVAX,[SI]MOV[DI],AXLOOPLlHLT(2)LEASI,100OHLEADI,2000HMOVCX,100CLDL1:MOVSBLOOPL1HLT(3)LEASI,100OHLEADI,200OHMOVCX,100CLDREPMOVSBHLT题3.3A利用变址寄存器遍一个程序,把自1000H单元内开始的100个数转送到自1070H开始的存储区中去,LEASI,100OHLEADI,1070HMOVCX,1003CLDREPMOVSBHLT题3.3B要求用3.3A,源地址为2050H,目的地址为2000H,数据块长度为50,LEASI,205OHLEADI,200OHMOVCX,50CLDREPMOVSBHLT题3.4编一个程序,把自1000H单元开始的100个数转送至1050H开始的存储区中(注意数据区有重叠)。LEASI,100OHLEADI,1050HADDSI,63HADDDI,63HMOVCX,100STDREPMOVSBHLT题3.5A在自0500H单元开始,存有100个数。要求把它传送到1000H开始的存储区中,但在传送过程中要检查数的值,遇到第一个零就停止传送。LEASI,050OHLEADI,10OOHMOVCX,100N1:MOVAL,[SI]CMPAL,0JZN2MOV[DI],ALINCSIINCDILOOPN1N2:HLT题3.5B条件同题3.5A,但在传送过程中检查数的值,零不传送,不是零则传送至目的区。题3.6把在题3.5A中指定的数据块中的正数,传送到自1000H开始的存储区。题3.7把在题3.5A中指定的数据块中的正数,传送到自1000H开始的存储区;而把其中的负数,传送到自1100H开始的存储区。且分别统计正数和负数的个数,分别存入1200H和1201H单元中。4HLT题3.8A自0500H单元开始,有10个无符号数,编一个程序求10个数的和(用8个位数运算指令),把和放到050A及050B单元中(和用两个字节表示),且高位在050B单元。题3.8B自0200H单元开始,有100个无符号数,编一个程序求这100个数的和(用8位数运算指令),把和放在0264H和0265H单元(和用两字节表示),且高位在0265H单元。5题3.9题同3.8,只是在累加时用16位运算指令编程序。题3.10A若在0500H单元中有一个数x:1.利用加法指令把它乘2,且送回原存储单元(假定x*2后仍为一个字节);2.x*4;3.x*10(假定x*10≤255)。(1)LEABX,050OHMOVAL,[BX]ADDAL,ALMOV[BX],AL(2)LEABX,0500HMOVAL,[BX]ADDAL,ALADDAL,ALMOV[BX],AL(3)LEABX,050OHMOVAL,[BX]ADDAL,ALMOVDL,ALADDAL,ALADDAL,ALADDAL,DLMOV[BX],AL题3.10B题意与要求同题3.10A,只是x*2后可能为两个字节。题3.11若在存储器中有两个数a和b(它们所在地址用符号表示,下同),编一个程序实现a*10+b(a*10以及“和”用两字节表示)。题3.12若在存储中有数a,b,c,d(它们连续存放),编一个程序实现((a*10+b)*10+c)*10+d(和≤65535)6题3.13A在0100H单元和010AH单元开始,存放两个各为10个字节的BCD数(地址最低处放的是最低字节),求它们的和,且把和放在0114H开始的存储单元中。题3.13B在0200H单元和020AH单元开始,存放两个各为10个字节的二进制数(地址最低处放的是最低字节),求它们的和,且把和放在0214H开始的存储单元中。题3.14在0200H单元开始放有效A(低位在前)7NA=95437862310456289101在020单元开始放有数BNB=78964238154078218450求两数之差,且把差值送入自0200H开始的存储区。题3.15A在0500H单元有一个数x,,把此数的前四位变0,后四位维持不变,送回同一单元。题3.15B条件同题3.15A,要求最高位不变,后7位都为0。题3.16A若在0500H单元有一个x,把此数的前四位变“1”,后四位维持不变,送回同一单元。题3.16B把x的最低位变“1”,高7位不变,送至0600H单元。题3.17A若在0500H有一个数X,把此数的前四位变反,后四位维持不变,送回同一个单元STACSEGMENTSTACKDB1024DUP(0)STACENDSDATASEGMENTORG0500H;地址从0500H开始NUMDB38H;假定一个数C8HDATAENDSCODESEGMENTCODEASSUMECS:CODE,DS:DATA,SS:STACSTART:MOVAX,DATAMOVDS,AXXORNUM,0F0H;高位取反,低位不变MOVAX,4C00HINT21HCODEENDSENDSTART8题3.17B把X最高位去反,后7位不变,送至0600H单元。题3.18从0200H单元读入一个数,检查它的符号,且在0300H单元为它建立一个符号标志(正为OO,负为FF)。题3.19A若从0200H单元开始有100个数,编一个程序检查这些数,正数保持不变,负数都取补后送回。题3.19B把题3.19A中的负数取补后送至0300H单元开始的存储区。题3.20A若在0200H和0201H单元中有一个双字节数,编一个程序对它们求补。题3.20B在BX寄存器对中有一个双字节数,对它求补。9题3.21若在0200H—0203H单元中有一个四字节数,编一个程序对它求补。题3.22A若在0200H—0201H单元中有两个正数,编一个程序比较它们的大小,把大的数放在0201H单元中。题3.22B条件同上,把较小的数放在0201H单元中。题3.23条件与要求同题3.22A,只是两个数为无符号数。题3.24条件与要求同题3.22A,相比较的是两个带符号数。题3.25A若自0500H单元开始有1000个带符号数,把它们的最小值找出来,放在1000H单元中。题3.25B若自1000H单元开始有1000个无符号数,把它们的最大值找出来,放在2000H单元。题3.26若在0200H单元中有一个数X,用移为方法实现1.X﹡22.X﹡4(X﹡≤255〉且送回原单元。题3.27A10编一个程序,使寄存器对BX中的数整个左移一位。题3.27B编一个程序,使寄存器对BP中的数整个右移一位(最高位维持不变)。题3.28A在0200H单元中有一个数X,利用移位和相加的办法,使X*10(假定X*10≤255)后送回原单元。题3.28B条件和要求同题3.28A,但X*10可大于255。题3.29在0200H和0201H单元中存有一个两字节数(高位在后),编一个程序把它们整个右移一位。题3.30在自BUFFER单元开始,放有一个数据快,BUFFER和BUFFER+1单元中放的是数据的长度,自BUFFER+2开始存放的是ASCII码表示的十进制数码,把它们转换为BCD码,且把两个想邻单元的数码并成一个单元(地址高的放在高四位)。放到自BUFFER+2开始的存储区中。题3.31来自BUFFER单元开始,放有一个数据快,BUFFER和BUFFER+1单元中放的是数据的长度,BUFFER+2开始存放数据,每一单元放的是两位BCD码,把它们分别转换为ASCII,放11到自BLOCK开始的存储区中(第四位BCD码转换成的ASCII码放在地址低的单元),而BLOCK和BLOCK+1放转换成的ASCCII码的长度。题3.32B条件同题3.32A,把转换以后的两个相邻的16进制树并在一个存储单元中。题3.33若在某存储区中已输入4个以ASC11码表示的16进制数码(高位在前),把它们转换为二进制数放入BX寄存器对中。题3.34在自BUFFER单元开始的数据块中,前两个单元放的是数据块的长度,自BUFFER+2开始存放的是二进制的数据块。把每一个存储单元的两位16进制数,分别转换为各自的ASC11码,放到自BLOCK开始的存储区中(开始两个单元放新的数据块的长度)。题3.35在题3.30中,把相邻单元的两个数码看成是两位十进制数(后面的为十位数),把它们转换为相应的二进制数,放到自BUFFER+2开始的存储区中。题3.36在题3.34中,把数据块中的每一单元的二进制数转换为相应的BCD码(每一字节的二进制数,对应三位BCD码),在把它们转换为ASC11码放到BLOCK开始的存储区中(开始两个单元放新的数据块的长度)。
本文标题:微机原理作业及答案
链接地址:https://www.777doc.com/doc-2435644 .html