《第7章 高级汇编语言技术.ppt》由会员分享,可在线阅读,更多相关《第7章 高级汇编语言技术.ppt(58页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、ch7,1,第7章高级汇编语言技术,ch7,2,7.1宏汇编,为什么使用宏汇编?在编制汇编语言程序过程中,有些功能程序段需要多次重复使用,所不同的只是参与操作的操作数。为了减少编程的工作量,通常采用两种方法:将程序段编写为独立的子程序将程序段定义成宏大家想一下子程序有什么优缺点?,什么是宏?宏(或宏指令)是源程序中一段有独立功能的程序代码,只需定义一次,可以多次调用。,第7章,ch7,3,1.宏定义用伪指令MACRO/ENDM实现,其语句格式是:宏指令名MACRO形参1,形参2,形参n宏定义体ENDM,7.1.1宏定义、宏调用和宏展开,说明,宏指令名是该宏定义的名称。调用时使用宏指令名对该宏定
2、义进行调用。宏指令符合标识符规定。宏指令名不能重复,并且指令的第一个字符必须是字母。但可以和源程序中的其他变量、标号、指令、伪指令名相同,在这种情况下宏指令的优先级最高。MACRO必须与ENDM成对出现。MACRO标识宏定义的开始。形式参数(即形参,也称哑元、虚参)是可选项,宏可以不带参数;带参数时,多个形参间用逗号分隔。,安徽理工大学计算机科学与技术系李敬兆汇编语言,第7章,2.宏调用宏调用的格式为:宏指令名实参1,实参2,实参n,宏展开宏展开就是宏定义体取代源程序中的宏指令名,而且用实元取代哑元。汇编源程序时,宏汇编程序将对每条宏指令语句进行宏展开,用实参替代相应的形参,对宏体目标代码作相
3、应改变。,说明:实参可以是常数、寄存器、存储单元、地址表达式、指令的操作码或者是操作码的一部分。,安徽理工大学计算机科学与技术系李敬兆汇编语言,第7章,子程序Q,主程序,主程序,主程序,展开,子程序调用和宏调用的工作方式,安徽理工大学计算机科学与技术系李敬兆汇编语言,第7章,用一个例子来说明宏定义、宏调用和宏展开的情况例:将两个16位数相加,结果存入16位RESULT单元中。;对两数相加功能进行宏定义,安徽理工大学计算机科学与技术系李敬兆汇编语言,第7章,BCDADDMACROVARX,VARY,RESULTMOVAL,VARXADDAL,VARYMOVRESULT,ALMOVAL,VARX1
4、ADCAL,VARY1MOVRESULT1,ALENDMDATASEGMENTA1DW1234HA2DW5678HA3DW?B1DW1357HB2DW2468HB3DW?DATAENDSCODESEGMENTASSUMECS:CODE,DS:DATASTART:PUSHDSMOVAX,0PUSHAX,安徽理工大学计算机科学与技术系李敬兆汇编语言,第7章,MOVAX,DATAMOVDS,AXBCDADDA1,A2,A3;宏调用BCDADDB1,B2,B3;再次宏调用RETCODEENDSENDSTART经宏展开后:PUSHDSMOVAX,0PUSHAXMOVAX,DATAMOVDS,AX,MOV
5、AL,A11ADDAL,A21MOVA3,AL1MOVAL,A111ADCAL,A21MOVA31,AL1MOVAL,B11ADDAL,B21MOVB3,AL1MOVAL,B11ADCAL,B21MOVB31,AL宏汇编程序在所展开的指令前标识以1号以示区别。较早的版本用+,安徽理工大学计算机科学与技术系李敬兆汇编语言,第7章,7.1.2宏定义中的参数:,1宏定义可以无参数,saveregmacropushaxpushbxpushcxpushsiendm,2参数可以是操作码,amacrop1,p2,p3movax,p1p2p3endm调用:aword_var,inc,ax展开:movax,wo
6、rd_var1incax,安徽理工大学计算机科学与技术系李敬兆汇编语言,第7章,ch7,11,3参数可以是操作码或操作数的一部分,但在宏定义体中必须使用分隔符自变量满足条件汇编此块ELSE;自变量不满足条件汇编此块ENDIF,说明:汇编程序在对源程序汇编时,要对源程序扫描二遍。第一遍建立符号表,第二遍才把汇编语言指令翻译成机器语言指令。那么自变量必须在汇编程序第一遍扫视后就成为确定的数值。,ch7,28,IFexpression;汇编程序求出表达式的值,如此值不为0,则满足条件.IFEexpression;汇编程序求出表达式的值,如此值为0,则满足条件.,例:宏指令MAX把三个变元中的最大值放
7、在AX中,而且使变元数不同时产生不同的程序段。,7.3.1,ch7,29,MAXMACROK,A,B,CLOCALNEXT,OUTMOVAX,AIFK-1IFK-2CMPC,AXJLENEXTMOVAX,CENDIFNEXT:CMPB,AXJLEOUTMOVAX,BENDIFOUT:ENDM,宏调用:MOV1,PMOV2,P,QMOV3,P,Q,宏展开:MOV1,PMOVAX,P1?0002:MAX2,P,QJLE?00001MOVAX,Q1?0003:,MAX3,P,Q,R1MOVAX,P1CMPR,AX1JLE?0004MOVAX,R1?0004:CMPQ,AX1JLE?0005MOVAX
8、,Q1?0005,ch7,30,BRANCHMACROXIF($-X)LT128JMPSHORTXELSEJMPNEARPTRXENDIFENDMLAB:MOVAX,BXBRANCHLABJMPSHORTLAB,该宏要完成什么功能。,宏定义允许递归调用,powermacrox,nsalx,1count=count+1ifcount-npowerx,nendifEndm宏调用:count=0powerax,3宏展开:Salax,1Salax,1Salax,1,ch7,31,IF1;在汇编程序的第一遍扫视期间满足条件IF2;在汇编程序的第二遍扫视期间满足条件说明:汇编程序在对包括宏库的源程序汇编时
9、也分两次扫描,第一次将宏库及程序中的宏定义登入宏定义表,第二次扫描时进行宏扩展,形成列表文件。大家看书上268页的例.24,然后和259页的例7.12比较看有什么不同?IFB;如自变量为空,则满足条件IFNB;如自变量不为空,则满足条件注意:自变量用“”括起来,7.3.2,7.3.3,ch7,32,例:宏指令GOTOL,X,REL,Y可以根据不同情况产生无条件转移指令或比较和条件转移指令。宏定义:,GOTOMACROL,X,REL,YIFBJMPLELSEMOVAX,XCMPAX,YJ如符号已在程序中定义,或者用extrn说明该符号是在外部定义的,则满足条件。IFNDEFsymbol;如符号未
10、定义或未通过EXTRN说明为外部符号则满足条件。,7.3.4,ch7,35,dividemacrodevidend,divisor,quotientlocalcmop,outcntr=0ifndefdividendcntr=1endififndefdivisorcntr=1endififndefquotientcntr=1endififcntrexitmendif,movax,dividendmovbx,divisorsubcx,cxcomp:cmpax,bxjboutsubax,bxjnccxJmpcompout:movquotient,cxendm,ch7,36,MOVDIFMACROXI
11、FIDN,REPMOVSBELSEREPMOVSWENDIFENDM,宏调用:MOVDIFB宏展开:1REPMOVSB,IFIDN,;如果字符串和字符串相同,则满足条件。IFDIF,;如果字符串和字符串不相同,则满足条件。在格式中,两个参数必须用尖括号括起,7.3.5,ch7,37,例编写一个可用功能调用输入字符的宏定义。READCHMACROcharMOVAH,1HINT21H;接受一个字符,并存入AL中IFNB;若参数char有实参与之对应IFDIF,;若参数charAL,则把所输入字符保存到实参中MOVchar,ALENDIFENDIFENDM,ch7,38,1.在DEBUG上机调试程序
12、时,存储器地址表示为12FA:015F,它的物理地址是()。a.12FAHb.1305FHc.130FFHd.015FH2.IP指令指针寄存器是属于()。a.通用寄存器b.段寄存器c.变址寄存器d.控制寄存器3.下面有语法错误的指令是()。a.ADDAL,AHb.ADDBX+3,ALc.ADDAH,DId.ADDBP+2,DA1(DA1是变量名)4.完成对DX的有符号数除以2的指令是()。a.IDIV2b.SARDX,1c.RORDX,1d.RCRDX,15.使进位位置1的指令是()。a.CLCb.CMCc.STCd.NOP,ch7,39,6.设AL=-15,要使AL=15应执行的指令是()。
13、a.NEGALb.NOTALc.INCALd.DECAL7.在条件转移指令中,结果为负数则转移的指令是()。a.JNSb.JXc.JSd.JP8.下面的XCHG指令中,语法正确的是()。a.XCHGAL,DSb.XCHGBL,BXc.XCHGAL,0FHd.XCHGBUF1,BUF29.一条指令中目的操作数不允许使用的寻址方式是()。a.寄存器寻址b.立即数寻址c.变址寻址d.寄存器间接寻址10.设SP=1FFEH,执行下列指令后,SP寄存器的值是()。POPFPUSHAXa.2000Hb.2002Hc.1FFCHd.1FFEH,ch7,40,1下列标号不合法的是:AMOVB.WANGC.F8
14、D.AB32语句DADADWAB,CD,E,F汇编后占用的存储空间是:A4个字节B.8个字节C.6个字节D.5个字节3PSW中使用的标志位以及其中的状态标志位、控制标志位的位数分别是:A9,6,3B.9,8,1C.9,7,2D.16,9,74指令ADDAX,BXDI中源操作数的寻址方式是:A段内寄存器间接寻址B.段间寄存器间接寻址C基址加变址寻址C.寄存器寻址5在伪指令语句NUMBERDW1234H中的NUMBER项称为:A标号B.变量C.伪操作符D.数据,ch7,41,6在存储器中保留待定的10个字节单元的伪指令语句是:ANUMBEQU10B.NUMBDW10DUP(?)C.NUMBDB10
15、D.NUMBDB2DUP(5DUP(?)7把汇编语言源程序翻译成目标代码的程序是:A编译程序B.解释程序C.汇编程序D.连接程序8下列指令中,不影响PSW的指令是:A.MOVB.TESTC.SALD.CLD9下列叙述不正确的是:A.立即数不能直接送段寄存器。B.目的操作数不能是立即数和段寄存器。C.不能在两个存储单元间直接传送数据。D.两个段寄存器之间不能直接传送数据。10汇编语言在程序设计语言家族中属于:A.第一代语言B.第二代语言C.第三代语言D.第四代语言,ch7,42,1、设DS=8225H,DI=3942H,指令NEGBYTEPTRDI操作数的物理地址是()A、85B92HB、861
16、92HC、BB690HD、12169H2、下列寄存器组中在段内寻址时可以提供偏移地址的寄存器组是()A、AX,BX,CX,DXB、BX,BP,SI,DIC、SP,IP,BP,DXD、CS,DS,ES,SS3、循环指令LOOPNZ终止循环的条件是()。A、CX=0,且Z=0B、CX=0,或Z=1C、CX0,且Z=0D、CX0,或Z=14、对寄存器AX的内容乘以4的正确指令序列是()。A、SHRAX,1SHRAX,1B、SHLAX,1SHL,AX,1C、ROLAX,1ROLAX,1D、RCRAX,1RCRAX,15、保存字除法商的寄存器是()。A、AXB、AHC、ALD、通用寄存器,ch7,43,
17、6、设DH=10H,执行NEGDH指令后,正确的结果是()。A、DH=10HC=1B、DH=0F0HC=0C、DH=10HC=0D、DH=0F0HC=17、下列传送指令中有语法错误的是()。A、MOVCS,AXB、MOVDS,AXC、MOVSS,AXD、MOVES,AX8、下面指令执行后,改变AL寄存器内容的指令是()。A、TESTAL,02HB、ORAL,ALC、CMPAL,BLD、ANDAL,BL9、一条指令中目的操作数不允许使用的寻址方式是()A.寄存器寻址B.立即数寻址C.变址寻址D.寄存器间接寻址10、执行下面指令序列后,结果是()。MOVAL,82HCBWA、AX=0FF82HB、
18、AX=8082HC、AX=0082HD、AX=0F82H,ch7,44,1指令JMPFARPTRDONE属于()。参考答案为:CA段内转移直接寻址B段内转移间接寻址C段间转移直接寻址D段间转移间接寻址2下列叙述正确的是()。参考答案为:CA对两个无符号数进行比较采用CMP指令,对两个有符号数比较用CMPS指令B对两个无符号数进行比较采用CMPS指令,对两个有符号数比较用CMP指令C对无符号数条件转移采用JAE/JNB指令,对有符号数条件转移用JGE/JNL指令D对无符号数条件转移采用JGE/JNL指令,对有符号数条件转移用JAE/JNB指令3一个有128个字的数据区,它的起始地址为12ABH:
19、00ABH,请给出这个数据区最末一个字单元的物理地址是()。参考答案为:CA12CSBHB12B6BHC12C59HD12BFEH4在下列指令的表示中,不正确的是()。参考答案为:CAMOVAL,BX+SIBJMPSHORTDONICDECBXDMULCL5在进行二重循环程序设计时,下列描述正确的是()。参考答案为:AA外循环初值应置外循环之外;内循环初值应置内循环之外,外循环之内B外循环初值应置外循环之内;内循环初值应置内循环之内C内、外循环初值都应置外循环之外D内、外循环初值都应置内循环之外,外循环之内,ch7,45,6条件转移指令JNE的测试条件为()。参考答案为:AAZF=0BCF0C
20、ZF=1DCF=178086CPU在基址加变址的寻址方式中,变址寄存器可以为()。参考答案为:DABX或CXBCX或SICDX或SIDSI或DI8已知BX=2000H,SI=1234H,则指令MOVAX,BX+SI+2的源操作在()中。参考答案为:AA数据段中偏移量为3236H的字节B附加段中偏移量为3234H的字节C数据段中偏移量为3234H的字节D附加段中偏移量为3236H的字节9执行如下程序:MOVAX,0MOVBX,1MOVCX,100A:ADDAX,BXINCBXLOOPAHLT执行后(BX)=()。参考答案为:CA99B100C101D10210上题的程序执行后(AX)=()。参考
21、答案为:BA5000B5050C5100D5150,ch7,46,1.在堆栈段中,存放栈顶地址的寄存器是()。A.IPB.SPC.BXD.BP2.汇编语言程序中,反映指令操作结果的标志是()。A.状态标志B.控制标志C.ZFD.DF3.书写汇编语言程序时规定,对字母开头的十六进制数,其前面必须加()。A.0B.DC.BD.H4.计算机中用来存储程序、数据等信息的记忆装置是()。A.控制器B.运算器C.CPUD.存储器5.MOVSIBX,AL,该指令中自操作数采用的寻址方式是()。A.基址加变址B.寄存器C.寄存器间接D.寄存器相对,ch7,47,6.MULWORDPTRSI指令中的乘积是存放在
22、()、AX中。A.CXB.BXC.DXD.SI7.汇编语言中,存放下一条将要执行的指令地址寄存器是()。A.SPB.AXC.DID.IP8.在计算机中,以先进后出方式工作的存储空间是()。A.存储器B.RAMC.ROMD.堆栈9.TESTAH,30H指令的功能与()指令功能相类似。A.ANDB.CMPC.SUBD.OR10.在存储器中留60个字的空单元的伪指令是()。A.ARRAYEQU60B.ARRAYDW60C.ARRAYDB60DUP(?)D.ARRAYDW60DUP(?),ch7,48,1.用DEBUG调试汇编语言程序时,显示某指令的地址是2F80:F400,此时段寄存器CS的值是()
23、。A.F400HB.2F80HC.F4000HD.2F800H2.设DS=1100H,(12000H)=80H,(12001H)=20H,(12002H)=30H,执行MOVAX,1000H则AX=()。A.8000HB.0080HC.2080HD.8020H3.下列四条指令中错误的是()。A.MOVAX,SIB.MOVAX,DIC.MOVAX,SI+DID.MOVAX,SI-DI4.下列四条指令执行后不影响标志位的是()。A.JNCNEXTB.CMPAX,BXC.SHLAX,1D.ORAL,AL5.已知AX=0001H,下列四条指令执行后,不能使ZF=1的语句是()。A.DECAXB.SUB
24、AX,1C.ANDAX,1D.CMPAX,1,ch7,49,6.在8086/8088系统中,约定用于形成堆栈段数据物理地址的寄存器有()。A.SS,SP,BPB.SS,SP,BXC.DS,BX,BPD.DS,SP,BP7.有指令MOVAX,1234H,指令中的立即数1234H是存储在()。A.数据段B.代码段C.附加段D.堆栈段8.要在程序中定义缓冲区BUF,保留9个字节存储空间的语句是()。A.BUFDW9B.BUFDB9C.BUFDB9DUP(?)D.BUFDW9DUP(?)9.已知AL=56H,BL=34H,都是压缩BCD码,要执行二数相加,正确的指令是()。A.ADDAL,BLB.AD
25、CAL,BLC.ADDBL,ALD.ADCBL,ALDAADAADAADAA10.在执行子程序段内调用CALLSUBR指令后,SP的值()。A.加1B.减1C.加2D.减2,ch7,50,1Intel8086CPU的段寄存器有_。2Intel8086CPU的SP寄存器的主要作用是_。3(CS)=1000H,(DS)=2000H,(ES)=3000H,(SS)=4000H,(DI)=a100,操作数DI+1000H的寻址方式是_,物理地址是_。4志寄存器中OF标志位的主要作用是_。5TEST指令的功能是_。6指令LEA_AX,SI+100H的具体操作是_。7有符号二进制字节数可表示的数的范围是_
26、。8执行一条POP_AX指令后,SP的内容发生的变化是_。9AL寄存器的内容为28H,执行指令OR_AL,33H后,AL的值为_。10测试寄存器AL和BL的值是否相等而不改变其值应使用指令_。,ch7,51,1.用户为了解决自己的问题,用汇编语言所编写的程序,称为()。目标程序源程序可执行程序汇编程序2.某系列微机对存储器的分段,如果每一个段最多的字存储单元(16位二进制)是32K,那么表示段内字节单元偏移地址的二进制位数应是()。20位16位15位12位3.可用作寄存器间接寻址或基址、变址寻址的地址寄存器,正确的是()。AX,BX,CX,DXDS,ES,CS,SSSP,BP,IP,BXSI,
27、DI,BP,BX4.用一条指令仅实现将BX+SI=AX的方法是()。XCHGAX,BXSIMOVAX,BX+SILEAAX,BXSILEAAX,BXSI5.设SP初值为2000H,执行指令“PUSHAX”后,SP的值是()。1FFFH1998H2002H1FFEH,ch7,52,6.条件转移指令JB产生程序转移的条件是()。CF=1CF=0CF=1和ZF=1CF=1和ZF=07.选用串操作指令时,错误的操作是()。置方向标志位根据串操作指令设置重复次数并送入CX设置源操作数及目的操作数指针源操作数和目的操作数都可以加段超越8.设AL=20H,SI=0500H,DS=3000H,(30500H)
28、=0C0H,CF=1。执行SBBAL,SI后,正确的结果是()。AL=5FHSF=1CF=1AL=60HSF=1CF=0AL=5FHSF=0CF=1AL=60HSF=0CF=09.设AX=1000HNEGAXNOTAX执行上述指令后,正确的结果是()。AX=1001HAX=0FFFHAX=1000HAX=0111H10.CBW指令的功能是()。把源操作数的符号位扩展到目的操作数中把AL中的符号位扩展到AH中把AH中的符号位扩展到AL中把AX中的符号位扩展到DX中,ch7,53,1.下列寄存器中,作为16位寄存器的是()。A.ALB.BLC.CHD.DX2.在程序运行过程中,确定下一条指令的物理
29、地址的计算表达式是()。A.DS*16+SIB.ES*16+DIC.CS*16+IPD.SS*16+SP3.物理地址(10FF0H)=10H,(10FF1H)=20H,(10FF2H)=30H,从地址10FF1H中取一个字的内容是()。A.1020HB.3020HC.2030HD.2010H4.将AX清零,下列指令错误的是()。A.SUBAX,AXB.XORAX,AXC.ORAX,00HD.ANDAX,00H5.下列指令中,影响或修改标志位的是()。A.LOOPZB.JNLEC.PUSHFD.POPF,ch7,54,6.设DS=8225H,DI=3942H,指令NEGBYTEPTRDI操作数的
30、物理地址是()。A.85B92HB.86192HC.BB690HD.12169H7.通用数据传送指令中,错误的是()。A.累加器到存储器B.立即数到存储器C.寄存器到存储器D.存储器到存储器8.移位指令中,应先将移位次数放在()。A.AXB.ALC.CXD.CL9.MOVAL,79ADDAL,0B1H上述指令执行后,CF和OF的值是()。A.CF=0OF=1B.CF=1OF=1C.CF=0OF=0D.CF=1OF=010.下列语句中能实现留空8个字节单元的语句是()。A.DA1DT?B.DA2DW?,?C.DA3DD?D.DA4DQ?,ch7,55,1指令JMPFARPTRDONE属于()。A
31、.段内转移直接寻址B.段内转移间接寻址C.段间转移直接寻址D.段间转移间接寻址2执行下面指令序列后,结果是()。MOVAL,82HCBWA.AX=0FF82HB.AX=8082HC.AX=0082HD.AX=0F82H38088/8086存储器分段,每个段不超过().A.64K个字B.32K个字节C.1兆个字节D.64K个字节4CPU发出的访问存储器的地址是()。A.物理地址B.偏移地址C.逻辑地址D.段地址5BUFDW10HDUP(3DUP(2,10H),3,5)上述语句汇编后,为变量BUF分配的存储单元字节数是()。A.80HB.100HC.124D.192,ch7,56,6若AX=-15
32、要得到AX=15应执行的指令是()。A.NEGAXB.NOTAXC.INCAXD.DECAX78086/8088系统执行传送指令MOV时()。A.不影响标志位B.影响DF方向标志C.影响SF符号标志D.影响CF进位标志8MOVAL,79ADDAL,0B1H上面指令执行后,设置的标志位CF和OF的值是()。A.CF=0,OF=1B.CF=1,OF=1C.CF=0,OF=1D.CF=1,OF=0,ch7,57,9检查BUF的内容是否为正偶数,如是正偶数,则AL=0。下面程序段正确的是()。A.MOVAL,BUFB.MOVAL,BUFJSK1ANDAL,11SHRAL,1JNZK2JNCK1MOVAL,0MOVAL,0K2:K1:C.MOVAL,BUFD.MOVAL,BUFTESTAL,81HJNPK4JNZK3TESTAL,80HMOVAL,0JNZK4K3:MOVAL,0K4:10下列指令中操作数在代码段中的是()。A.MOVAL,42HB.ADDAL,BLC.SUBBX,DID.INCDI,ch7,58,作业7-17-47-87-15,