《16-32位微机原理汇编语言及接口关键技术.docx》由会员分享,可在线阅读,更多相关《16-32位微机原理汇编语言及接口关键技术.docx(64页珍藏版)》请在课桌文档上搜索。
1、第一章1.1 解:五代,详细见书1.2 解:微型计算机:以大规模、超大规模集成电路为重要部件,以集成了计算机重要部件控制器和运算器微解决器为核心,所构造出计算机系统。PC机:PC(PersonalComputer)机就是面向个人单独使用一类微机。单片机:用于控制微解决器芯片,内部除CPU外还集成了计算机其她某些重要部件,如:ROM、RAM、定期器、并行接口、串行接口,有芯片还集成了A/D、D/A转换电路等。数字信号解决器DSP:重要面向大流量数字信号实时解决,在宿主系统中充当数据解决中心,在网络通信、多媒体应用等领域正得到越来越多应用1.3 解:微机重要有存储器、I/O设备和I/O接口、CPU
2、、系统总线、操作系统和应用软件构成,各某些功能如下:CPU:统一协调和控制系统中各个部件系统总线:传送信息存储器:存储程序和数据I/O设备:实现微机输入输出功能I/O接口:I/O设备与CPU桥梁操作系统:管理系统所有软硬件资源1.4 解:系统总线:传递信息一组公用导线,CPU通过它们与存储器和I/O设备进行信息互换。好处:组态灵活、扩展以便三组信号线:数据总线、地址总线和控制总线。其使用特点是:在某一时刻,只能由一种总线主控设备来控制系统总线,只能有一种发送者向总线发送信号;但可以有各种设备从总线上同步获得信号。1.5解:(1)用于数值计算、数据解决及信息管理方向。采用通用微机,规定有较快工作
3、速度、较高运算精度、较大内存容量和较完备输入输出设备,为顾客提供以便和谐操作界面和简便快捷维护、扩充手段。(2)用于过程控制及嵌人应用方向。采用控制类微机,规定能抵抗各种干扰、适应现场恶劣环境、保证长时间稳定地工作,规定其实时性要好、强调其体积要小、便携式应用强调其省电。1.6解:I/O通道:位于CPU和设备控制器之间,其目是承担某些本来由CPU解决I/O任务,从而把CPU从繁杂I/O任务中解脱出来。由10根信号线构成(A9-A0)。1.8 解:BIOS:基本输入输出系统。重要功能:用来驱动和管理诸如键盘、显示屏、打印机、磁盘、时钟、串行通信接口等基本输入输出设备1.9 解:基本RAM区:64
4、0KB保存RAM区:128KB扩展ROM区:128KB基本ROM区:128KB1.10解:(1)、数一用来直接表征量大小,涉及:定点数、浮点数。(2)、码一用来指代某个事物或事物某种状态属性,涉及:二进制、八进制、十进制、十六进制。区别:使用场合不同,详见P16.1.11解:(1)(174.66)10=(10101110.10101)2(174.66)O=(AEA8)16(2)(100011101011.01011)2=(2283.34375)10(100oiiioioiloioii)2=(8b.58)16(3)(F18A6.6)16=(111100Ol100010100110.0110)2(
5、F18A6.6)16=(989350.375)lo1.12解:原码反码补码+3700100101/25H00100101/25H00100101/25H-3710100101/A5H11011010/DAH11011011/DBH1.13 解:+37-3716位32位16位32位OO25H00000025HFF5BHFFFFFF5BH1.14 解:无符号数:70D补码有符号数:70DBCD码:46DASCITiF1. 15解:1)、相加后若浮现和不不大于9,则将和减去10后再向高位进12)、若浮现组间进位,则将低位加61.16解:详见课本16页。1.17解:C34020001.18解:5050
6、H十进制值5080二进制十六进制二进制十六进制0011OOlOB32H01010000B50H1. 19解:D:44Hd:64HCR:ODH1.F:OAH0:30HSP:20HNU1.:OOH1.20解:国标码:3650H机内码:B6BOH第二章2. 1算术逻辑单元A1.U、寄存器组和控制器;总线接口单元BIU:管理8088与系统总线接口负责cpu对接口和外设进行访问执行单元EU:负责指令译码、执行和数据运算;8位cpu在指令译码前必要等待取指令操作完毕,8088中需要译码指令已经取到了指令队列,不需要等待取指令。而取指令是cpu最为频繁操作,因而8088构造和操作方式节约了大量等待时间,比8
7、位CPU节约了时间,提高了性能。2.28个8位寄存器:AH、A1.、BHBUCH、C1.DH、D1.;8个16位寄存器:累加器AX、基址寄存器BX、计数器CX、数据寄存器DX、源地址寄存器Sk目地址寄存器DI、基址指针BP、堆栈指针SP。2.3标志用于反映指令执行成果或者控制指令执行形式。状态标志用于记录程序运营成果状态信息;控制标志用于控制指令执行形式。2. 4例:有运算:3AH+7CH=B6H作为无符号数运算,没有进位,CF=O;作为有符号数运算,成果超过范畴,OF=1.2.58088中每个存储单元有唯一20位地址,称为物理地址。解决器通过总线存取存储器数据时,采用这个物理地址。在顾客编程
8、过程中采用“段地址:偏移地址”形式称为逻辑地址。将逻辑地址中段地址左移4位,加上偏移地址就得到物理地址。IMB最多能提成65536个逻辑段。2.6代码段:存储程序指令序列;堆栈段:拟定堆栈所在主存储区;数据段:存储当前运营程序数据;附加段:附加数据段,用于数据保存。此外串操作指令将其作为目操作数存储区。2. 78088存储空间分段管理,程序设计时采用逻辑地址。由于段地址在默认或指定段寄存器中,因此只需要偏移地址,称为有效地址EA.操作数在主存中有如下几种寻址方式:直接寻址、寄存器间接寻址、寄存器相对寻址、基址变址寻址、相对基址变址寻址。3. 8(1)及时数寻址ax:1200H(2)寄存器寻址a
9、x:0100H(3)存储器直接寻址ax:4C2AH(4)寄存器间接寻址ax:3412H(5)寄存器间接寻址ax:4C2AH(6)基址变址寻址ax:7856H(7)相对基址变址寻址ax:65B7H4. 9(1) CX为字寄存器,dl为字节寄存器,类型不匹配。(2) 11wv指令目操作数只能是寄存器或者主存单元,ip是指针。(3)不容许及时数到段寄存器传送。(4)不容许段寄存器之间直接传送。(5)数据溢出。(6)SP不能用于寄存器间接寻址。(7)格式不对。应为:movaxjbx+di(8)mov指令操作数不能是及时数。2.10(1)bx得到table偏移地址,bx=200H.(2)将及时数8送到a
10、l。(3)换码,al=12H.2. 11(1) al=89H(2) al=12H,cf=l,zf=0,sf=0,of=l,pf=l(3) al=0AFH,cf=0,zf=0/sf=l,of=0,pf=l(4) al=OAFH,cf=l,zf=0,sf=l,of=l,pf=l(5)al=0,cf=0,zf=l,sf=0,of三0,pf=l(6) al=0FFH,cf三0,zt=0,sf=lzof=0,pf=l(7)aI=0,cf=O,zf=1,sf=0,of=0,pf=12. 12(1) adddx,bx(2) addal,bsi(3) addwordptrbx+0B2H,c(4) addwor
11、dptr0520H,3412H运算公式:(V-Z-X*y+540)X商存储在ax,余数存储在dx2. 14(1) ax=1470H(2) ax=1470H,cf=0,of=0,sf=0,zf=0,pf=0(3) ax=1470H,cf=0,of=0,sf=0,zf=0,pf=0(4) ax=0,cf=0,of=0,sf=0,zf=l,pf=l(5) ax=OFFFFH,cf=0,of=0,sf=0,zf=l,pf=l(6) ax=0FFFFH,cf=0,of=0,sf=lzzf=0,pf=l2.15相对寻址方式、直接寻址方式、间接寻址方式。2. 16(1) 1256H(2) 3280H2. 1
12、7(1) a=lElEH(2) alDOD7位不全为0(3) cx64H2.18执行65536次。2.19功能:将数组中每个字元素相加,成果存储于total。(1) leasi,stringMovdh,siMovd4si+5(2) movawordptrbufferlSubawordptrbuffer2Movdwordptrbufferl+2Sbbdxwordptrbuffer2+2(3) testdx,OFOOOHjzeveneven:mova,0(4) movex,4again:sard,lrcra,lloopagain(5) movc,100movsi,0again:moval,OFFH
13、addal,arraysimovarraysi,alincsiloopagainHtoascprocMovbl,alMoval,ahMovbh,lMulbhAnda,OOFFHAddalzblHtoend:retHtoascendp2.22计算机系统运用中断为顾客提供硬件设备驱动程序。在IBM-PC系列微机中,基本输入输出系统ROM-BIOS和DOS都提供了丰富中断服务程序,称为系统功能调用。调用环节(1)AH中设立系统功能调用号(2)在指定寄存器中设立入口参数(3)使用中断调用指令执行功能调用(4)依照出口参数分析调用状况2. 23HtoascprocAndal,OFHAddal,90HDa
14、aAdcalf40HDaaMovah,02HMovdl,alInt21HRetHtoascendp2.24NumoutprocXorah,ahAamAdda3030HMovdl,ahMovah,02HInt21HMovdl,alMovahz02HInt31HRetNumoutendp2.25Msgkeydbinputnumber0-9,$Msgwrgdberror;$Movah,09HMovdx,offsetmsgkeyInt21HAgain:movahz01HInt21HCmpal,30HJbdispCmpa39HJadispMovdl,alMovah,02HInt21HJmpdoneDis
15、p:movdx,offsetmsgwrgMovah,09HInt21HJmpagainDone:movah,02HMovdl,alInt21H3. 1解:汇编语言是一种以解决器指令系统为基本低档程序设计语言,它采用助记符表达指令操作码,采用标记符号表达指令操作数,可以直接、有效地控制计算机硬件,因而容易创立代码序列短小、运营迅速可执行程序3.2 解:(1)完整汇编语言源程序由段构成(2)一种汇编语言源程序可以包括若干个代码段、数据段、附加段或堆栈段,段与段之间顺序可随意排列(3)需独立运营程序必要包括种代码段,并批示程序执行起始点,一种程序只有一种起始点(4)所有可执行性语句必要位于某一种代码
16、段内,阐明性语句可依照需要位于任一段内(5)普通,程序还需要一种堆栈段3.3 解:存储模式特点TINYCoM类型程序,只有一种不大于64KB逻辑段(MASM6.x支持)SMA1.1.小应用程序,只有一种代码段和一种数据段(含堆栈段),每段不不不大于64KBCOMPACT代码少、数据多程序,只有一种代码段,但有各种数据段MEDIUM代码多、数据少程序,可有各种代码段,只有一种数据段1.ARGE大应用程序,可有各种代码段和各种数据段(静态数据不大于64KB)HUGE更大应用程序,可有各种代码段和各种数据段(对静态数据没有限制)32位应用程序,运营在32位80x86CPU和Windows9x或NT环
17、境F1.AT3.4 解:开始位置:用标号指明返回DOS:运用DOS功能调用4CH子功能来实现汇编停止:执行到一条END伪指令时,停止汇编3.5 解:段定位、段组合和段类型。3.6 解:stacksegmentstackdb1024(0)stackendsdatasegmentstringdb,Hello,Assembly!,OdH,OaH,dataendscodesegmentcode,assumecs:code,ds:data,ss:stackstart:movdx,offsetstringmovah,9int21hcodeendsendstart3.7 解:(1) .EXE程序程序可以有各
18、种代码段和各种数据段,程序长度可以超过64KB普通生成EXE构造可执行程序(2) .COM程序只有一种逻辑段,程序长度不超过64KB需要满足一定条件才干生成COM构造可执行程序(MASM6.X需要采用TINY模式)3.8 解:符号定义伪指令有“等价EQU”和“等号=”:符号名EQU数值表达式符号名EQU字符串符号名=数值表达式EQU用于数值等价时不能重复定义符号名,但“二”容许有重复赋值。例如:X=7;等效于:Xequ7X=X+5;“XEQUX+5”是错误3.9 解:(1) al=67h(2) ax=133h,dx=4h(3) ax=0230h(4) al=41h(4)ax=7654h3.10
19、解:(1)41441145h46h-1?444-19444-1?44h2300hhh(2)IOhOOhOfbhOffh?3.11解:.datamylbdb,PersonalComputer,my2bdb20my3bdb14hmy4bdb00010100bmy5wdw20dup(?)my6c=100my7c=3.12解:运用定位伪指令控制,如org,even,align3.13解:涉及逻辑地址和类型两种属性。3.14解:Org100hvarwdw1234h5678hvarbdbvarddd12345678hbuffdd10dup(?)messdbHello,movaxoffsetvarboffs
20、etmossmovax,typebuff+typemess+typevardmovax,sizeofvarw+sizeofbuff+sizeofmessmovax,Iengthofvarw+Iengthofvard3. 15解:(1) 100o超过一种字节所能表达最大整数(2) Sl应为偶数(3)两个内存单元不能直接运算(4)应改为al+l(5)条件转移指令背面应接标号,而不是变量3.16解:movah,1;只容许输入小写字母int21hsubal,20h;转换为大写字母movdl,almovah,2int21h;显不3.17解:movbx,offset1.EDtablemoval,Iednu
21、mxlat3.18解:movax,bufXcmpax,bufYjaedonemovax,bufYdone:movbufZ,ax3.19解:.modelsmal1.stack.databufXdw-7signXdb?.code.startupcmpbufX,0;testbufX,80hjlnext;jnznextmovsignX,0jmpdonenext:movsignX,-1done:.exit0end3.20解:movdl,2,movax,bufXcmpax,bufYjenextldecdlnextl:next2:cmpax,bufZjenext2decdlmovah,2int21h3.21
22、解:restart:again:next:fun:funl:;代码段moval,numbermovbx,0;BX-记录为1位数cmpal,0;A1.=O结束jzdoneshral,1;最低位右移进入CFjcnext;为1,转移incbx;不为1,继续jmpagainpushaxpushbxshlbx,1;位数乘以2(偏移地址要用2个字节单元)jmpaddrsbx;间接转移:IP-table+BX;如下是各个解决程序段movdl,0,jmpdispmovdl,fun2:jmpdispmovdl,2,jmpdispfun3:movdl,3jmpdispfun4:movdl,4jmpdispfun5
23、:movdl,5jmpdispfun6:movdl,6,jmpdispfun7:movdl,7,jmpdispdisp:movah,2;显示一种字符int21hpopbxpopaxjmprestartdone:3.22编制程序完毕12H、45H0F3H6AH、20H、OFEIK90H、0C8H、5711和34H等10个字节数据之和,并将成果存入字节变量SUM中(不考虑溢出和进位)。;wjxt322.asm.modelsmall.stack.databdatadb12h,45h,0f3h,6ah,20h,Ofeh,90h,0c8h,57h,34h;原始数据sumdb?;预留成果单元.code.s
24、tartupxorsi,si;位移量清零xoral,al;取第一种数movex,num;累加次数again:addal,bdatasi;累加incsi;指向下一种数loopagain;如未完,继续累加movsum,al;完了,存成果numequ10;数据个数.exit0end3.23求主存O(MOh:0开始一种64KB物理段中共有多少个空格?;wjxt323.asm.modelsmal1.codestart:movax,0040h;送段地址movds,axmovsi,0;偏移地址movex,si;计数(循环次数)xorax,ax;空格计数器清零again:cmpbyteptrsi,20h;与空
25、格ASCn码比较jnenext;不是空格,转incax:是空格,空格数加1next:incsi;修改地址指针loopagain;cx=c-1,如CX=O退出循环.exit0endstart3.24编写计算100个16位正整数之和程序。如果和不超过16位字范畴(65535),则保存其和到WOrdSUn1,如超过则显示4overflow,.答:;数据段countequ100parraydwcountdup(?);假设有100个数据wordsumdw0msgdb*overflow*,$;代码段movex,countmovax,0movbx,offsetparrayagain:addax,bxjncn
26、extmovdx,offsetmsgmovah,9int21h;显示溢出信息jmpdone;然后,跳出循环体next:addbx,2loopagainInovwordsum,axdone:3.25编程把一个16位无符号二进制数转换成为用842IBCD码表达5位十进制数。转换算法可以是:用二进制数除以10000,商为“万位”,再用余数除以1000,得到“千位”;依次用余数除以100、10和1,得到“百位”、“十位”和“个位”。;wjxt325.asm.modelsmall.stack256.dataarraydw?:源字数据dbcddb5dup(?);五位bed成果,高对高低对低.code.st
27、artupmovdx,array;取源数据(余数)movbx,10000;除数movex,10;除数系数movsi,4:目数据高位位移量again:movax,dx;dx.ax中存储被除数movdx,0divbx;除于bx,商ax,余数dxmovdbcdsi,al;商V10,存成果pushdx;暂存余数movax,bx;除数除于10movdx,0divex;dx.ax除于ex,商ax、余数0存在dxmovbx,ax;bx是除数popdxdecsi;目数据位移量减1jnzagainmovdbcd,dl;存个位数(10).exit0end3. 26解:(1)汇编语言中,子程序要用一对过程伪指令PR
28、oC和ENDP声明,格式如下:过程名PROCNEARIFAR;过程体过程名ENDP(2)保护用到寄存器内容,以便子程序返回时进行相应恢复。(3)改错:crazyprocpishbxpushexxorax,axxordx,dxagain:adda,bxadcdx,0incbxincbxloopagainpopexpopbx3.27解(不需调用HTOASC子程序):again:movah,1int21hcmpal,Ibh;ESCASCn码是Ibhjedonemovdl,almovah,2int21h;是大写字母则转换为小写字母jmpagaindone:3.28解答:asctobprocpushex
29、anddh,Ofh;先转换十位数shldh,1;十位数乘以10(采用移位指令)movch,dhshldh,1shldh,1adddh,chanddl,Ofh;转换个位数adddh,di:十位数加个位数moval,dh;设立出口参数popCXretasctobendp3.29解:DIPASCDIPASCHTOASCprocpushexpushdxpushaxmovcl,4shral,clcallHTOASCmovdl,almovah,2int21hpopaxcallHTOASCmovdi,almovah,2int21hmovdl,H,movah,2int21hpopdxpopCXretendpp
30、roc;入口参数:A1.=要显示一种16进制数;转换高位;显示;转换低位;显示;显示一种字母“H”;将A1.低4位表达一位16进制数转换为ASCII码andal,Ofhcmpal,9jbehtoascladdal,37h;是OAHOFH,加37H转换为ASeIl码ret;子程序返回htoascl:addal,30h;是09,加30H转换为ASCH码ret;子程序返回HTOASCendp3.30解:Iucaseprocpushbxmovbx,offsetstringcmpal,0jecasecmpal,1jzeaselcmpal,2jzcase2jmpdonecase:cmpbyteptrbx,
31、0jedonecmpbyteptrbx,Ajbnextcmpbyteptrbxt,Vjanextaddbyteptrbx,2Ohnext:easel:nextl:incbxjmpcasecmpbyteptrbx,Ojedonecmpbyteptrbx,a,jbnextlcmpbyteptrbx,z,janextlsubbyteptrbx,20hincbxcase2:next20:jmpeaselcmpbyteptrbx,Ojedonecmpbyteptrbx,Ajbnext2cmpbyteptrbx,Vjanext20addbyteptrbx,20hjmpnext2cmpbyteptrbx,a
32、,jbnext2cmpbyteptrbx,z,janext2subbyteptrbx,20hnext2:incbxjmpcase2done:popbxretIucaseendp3.31解:(1)用寄存器传递参数:最简朴和惯用参数传递办法是通过寄存器,只要把参数存于商定寄存器中就可以了由于通用寄存器个数有限,这种办法对少量数据可以直接传递数值,而对大量数据只能传递地址采用寄存器传递参数,注意带有出口参数寄存器不能保护和恢复,带有人口参数寄存器可以保护、也可以不保护,但最佳可以保持一致(2)用共享变量传递参数子程序和主程序使用同一种变量名存取数据就是运用共享变量(全局变量)进行参数传递如果变量定义
33、和使用不在同一种源程序中,需要运用PUB1.lC、EXTREN声明如果主程序还要运用本来变量值,则需要保护和恢复运用共享变量传递参数,子程序通用性较差,但特别适合在各种程序段间、特别在不同程序模块间传递数据(3)用堆栈传递参数参数传递还可以通过堆栈这个暂时存储区。主程序将入口参数压入堆栈,子程序从堆栈中取出参数;子程序将出口参数压入堆栈,主程序弹出堆栈获得它们采用堆栈传递参数是程式化,它是编译程序解决参数传递、以及汇编语言与高档语言混合编程时常规办法3. 32解:办法:主程序将入口参数压入堆栈,子程序从堆栈中取出参数;子程序将出口参数压入堆栈,主程序弹出堆栈获得它们注意:压栈与弹栈必要要一一相
34、应。3.33解:办法1:neg32proc;入口参数:DX.AX=32位有符号数negax;实现ODX.AX功能negdxsbbdx,0;这条指令也可以用decdx代替retneg32endp;出口参数:DX.AX=32位有符号数补码办法2:neg32proc;入口参数:DX.AX=32位有符号数notax;实现DX.AX求反加1notdxaddax,1adcdx,0neg32endp;出口参数:DX.AX=32位有符号数补码3.34解:;数据段arraydb12h,25h,OfOh,0a3h,3,68h,71h,Ocah,Offh,90h;数组countequ$-array;数组元素个数;代
35、码段movbx,offsetarray;BXJ数组偏移地址movex,count;CX-数组元素个数callchecksum;调用求和过程movresult,al;解决出口参数movax,4c00hint21h;计算字节校验和通用过程;入口参数:DS:BX=数组段地址:偏移地址,CX=元素个数;出口参数:A1.=校验和;阐明:除AX/BX/CX外,不影响其她寄存器checksumprocxoral,al;累加器清0sum:addal,bx;求和incbx;指向下一种字节loopsumretchecksumendpendresultdb?;校验和3.35解:.modelsmal1.stack.d
36、atawdatadispadw34abh.code.startupmovax,wdatacalldispa.exit0procpushexpushdxmovcl,4movdl,ahshrdl,clcalldldispmovdl,ahanddl,Ofhcaldldispmovdl,alshrdl,clcalldldispmovdl,alanddl,Ofhcalldldisppopdxpopexretdispaendpdldispprocpushaxordl,30hcmpdl,39hjbedldispladddl,7dldispl:movah,2int21hpopaxretdldispendpen
37、d.modelsmal1.stack.datawdatadw34abhwordtempdw?.code.startupmovax,wdatamovwordtemp,axcalldispa.exitOdispaprocpushexpushdxmovcl,4movdl,byteptrwordtemp+1shrdl,clcalldldispmovdl,byteptrwordtemp+landdl,Ofhcalldldispmovdl,byteptrwordtempshrdl,clcalldldispmovdl,byteptrwordtempanddl,OfhcalldldisppopdxpopCXr
38、etdispaendpdldispprocpushaxordl,30hcmpdl,39hjbcdldispladddl,7dldispl:movah,2int21hpopaxretdldispendpend(3).modelsmall.stack.datawdatadw34abh.code.startuppushwdatacalldispapopax;addsp,2dispa.exit0procpushbpmoVbp,sppushaxpushexpushdxmovax,bp+4movcl,4movdl,ahshrdl,clcalldldispmovdl,ahanddl,Ofhcalldldis
39、pmovdl,alshrdl,clcalldldispmovdl,alanddl,Ofhcalldldisppopdxpopexpopaxpopbpretdldispprocpushaxordl,30hcmpdl,39hjbedldispladddl,7dldispl:movah,2int21hpopaxretdldispendpend3.36解:如果运用共享变量传递函数,且变量定义和使用不在同一种源程序中,需要运用PUB1.IC、EXTERN声明。3.37解:(1)宏定义由一对宏汇编伪指令MACRO和ENDM来完毕,格式如下:宏名MACRO形参表:宏定义体ENDM宏定义之后就可以使用它,即宏
40、调用:宏名实参表(2)宏调用格式同普通指令同样:在使用宏指令位置写下宏名,后跟实体参数;如果有各种参数,应按形参顺序填入实参,也用逗号分隔(3)宏展开:在汇编时,宏指令被汇编程序用相应代码序列代替,这就是宏展开宏展开详细过程是:当汇编程序扫描源程序遇到已有定义宏调用时,即用相应宏定义体完全代替源程序宏指令,同步用位置匹配实参对形参进行取代3.38解:宏调用参数通过形参、实参结合实现传递,简捷直观、灵活多变。宏汇编一大特色是它参数。宏定义时既可以无参数,也可以有一种或各种参数;宏调用时实参形式也非常灵活,可以是常数、变量、存储单元、指令(操作码)或它们一某些,也可以是表达式;只要宏展开后符合汇编
41、语言语法规则即可。3.39解:宏:仅是源程序级简化:宏调用在汇编时进行程序语句展开,不需要返回;不减小目的程序,执行速度没有变化通过形参、实参结合实现参数传递,简捷直观、灵活多变子程序:还是目的程序级简化:子程序调用在执行时由CA1.1.指令转向、RET指令返回;形成目的代码较短,执行速度减慢需要运用寄存器、存储单元或堆栈等传递参数选取:宏与子程序具备各自特点,程序员应当依照详细问题选取使用那种办法。普通,当程序段较短或规定较快执行时,应选用宏;当程序段较长或为减小目的代码时,要选用子程序3.40编写一种宏指令movedoprnd,soprnd,它实现任意寻址方式字量源操作数soprncl送到目操作数doprnd,涉及存储单元到存储单元传送功能