版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
汇编语言程序设计一、选择题1、某寄存器中的值有时是地址,因此只有计算机的(指令)才能识别它。2、指令系统中采用不同寻址方式的目的主要是(缩短指令长度,扩大寻址空间,提高编程灵活性)。3、 某计算机的字长16位,它的存储容量是64KB,若按字编址,那么它的寻址范围是(32K).4、 用于对某个寄存器中操作数的寻址方式称为(寄存器直接)寻址。5、 描述汇编语言特性的概念中,有错误的句子是(C)。A■对程序员的训练要求来说,需要硬件知识B.汇编语言对机器的依赖性高C.用汇编语言编制程序的难度比高级语言小D■汇编语言编写的程序执行速度比高级语言快6、 算术右移指令执行的操作是(符号位不变,并顺次右移1位,最低位移至进位标志位).7、 寄存器直接寻址方式中,寄存器中所存的是(操作数)。8、 下面描述RISC指令系统中基本概念不正确的句子是(C)A■选取使用频率高的一些简单指令,指令条数少 B.指令长度固定C.指令格式种类多,寻址方式种类多D■只有取数存数指令访问存储器9、 在CPU中,暂存指令的寄存器是(指令寄存器)。10、 用于对某个寄存器中操作数的寻址方式称为(寄存器直接)寻址。11、 指令周期是指(PU从主存取出一条指令加上CPU执行这条指令的时间)12、 执行的操作是(符号位填0,并顺次右移1位,最低位移至进位标志位).13、 变址寻址方式中,操作数的有效地址等于(变址寄存器内容加上形式地址)。14、 由于CPU内部的操作速度较快,而CPU访问一次主存所花的时间较长,因此机器周期通常用(主存中读取一个指令字的最短时间)来规定。15、在指令的地址字段中,直接指出操作数本身的寻址方式,称为(立即寻址)。16、寄存器间接寻址方式中,操作数处在(主存单元)。17、程序控制类指令的功能是(改变程序执行的顺序)。18、 堆栈寻址方式中,设A为累加寄存器,SP为堆栈指示器,Msp为SP指示器的栈顶单元,如果操作的动作是:(A)^Msp,(SP)・1-SP,那么出栈操作的动作为:(B)A.(Msp)^A,(SP)+1-SP B.(SP)+1-SP,(Msp)-AC.(SP)・1^SP,(Msp)^A D.(Msp)^A,(SP)・1-SP19、 一个子程序在主程序执行期间可以多次被调用,甚至可以自己调用自己,实现这种调用的最好的办法是使用(堆栈)。20、 指令寄存器的作用是(保存当前正在执行的指令)。21、 运算型指令的寻址与转移型指令的寻址不同点在于(前者取操作数,后者决定程序转移地址)。22、 寄存器直接寻址方式中,操作数处在(寄存器)。23、 位操作类指令的功能是(对CPU内部通用寄存器或主存某一单元任一位进行状态检测或强置)。24、 CPU从主存取出一条指令并执行该指令的时间叫做(指令周期)二、填空题1■指令格式是指令用二进制代码表示的结构形式,通常格式中由操作码字段和地址码字段组成。CPU中至少有如下六类寄存器指令寄存器,程序计数器,地址寄存器,通用寄存器,状态条件寄存器,缓冲寄存器。条件转移、无条件转移、转子程序、返主程序、中断返回指令都属于程序控制类类指令CPU中,保存当前正在执行的指令的寄存器为指令寄存器IR,保存当前正在执行的指令的地址的寄存器为程序计数器PC。CPU从存储器取出一条指令并执行这条指令的时间和称为指令周期。由于各种指令的操作功能不同,各种指令的指令周期是不相同的。6■堆栈是一种特殊的数据寻址方式,它采用先进后出原理。三、判断题1、 判断下列指令书写是否正确(1)MOVAL,BX(2)MOVAL,CL(3)INC[BX](4)MOV5,AL(5)MOV[BX],[SI](6)MOVBL,F5H(7)MOVDX,2000H(8)POPCS(9)MOVCS,2000H(10)MOVAX,[DX](11)MOVDS,ES(12)MOVDS,2000H(1)(x)⑵(V)⑶(V)(4)(X)⑸(X)⑹(V)⑺(V)⑹(X)(9)(X)(10)(V)(11)(x)(12)(X)2、 要想完成把[2000H]送[1000H]中,用指令MOV[1000H],[2000H]是否正确?如果不正确,应用什么办法?(x)应用MOVAX, [2000H]MOV[1000H],AX四、简答题1、分析汇编语言源程序应该由哪些逻辑段组成?各段的作用是什么?语句标号和变量应具备哪3种属性?解:汇编语言源程序应该由若干个逻辑段组成,可以有若干个数据段、代码段、堆栈段和附加数据段,至少要有一个代码段。各段的作用如下:1)代码段用来存放程序和常数。2)数据段用于数据的保存。3)堆栈段用于保护数据,尤其在子程序调用、中断过程中进行现场信息保护。4)附加数据段用于数据的保存。语句标号和变量应具备的3种属性:段属性、偏移属性和类型属性。2、比较宏指令与子程序,它们有何异同?它们的本质区别是什么?解:宏与子程序两者的相同之处在于都是用来处理在编程过程中多次使用的功能程序的方法,两者均能简化源程序。两者的区别在于:1)宏调用通过宏指令名进行,汇编时,随时调用随时展开,并不简化目标程序;子程序调用是在程序执行期间执行CALL指令,代码只在目标程序中出现一次,所以也简化了目标程序。2)宏调用时的参数由汇编程序通过实参转换成形参的方式传递,具有很大的灵活性。宏定义中允许设置若干形式参数代替数值、指令、寄存器、各种字符串等。宏调用时可用程序所需要的实际参数来替换,使编程人员感觉非常灵活;而子程序的参数传递要麻烦得多。3)宏调用在汇编时完成,不需要额外的时间开销;子程序调用和子程序返回都需要时间,还涉及堆栈操作。故若优先考虑速度,用宏指令;若优先考虑存储空间,用子程序。说明存储器操作数有效地址EA的构成。通常有效地址是由位移量、基址、变址之和决定。4.简述指令LEA与LDS/LES区别。LEA指令取内存储器操作数的16位段内偏移量地址装入指定的通用寄存器。LDS和LES指令则将指定存储器中连续4个单元内的低地址连续二个字节内容送通用寄存器,高地址连续二个字节内容送数据段(LDS)或送附加段(LES)实现寄存器AX清零的方法有哪些?实现清零方法如下。1)传送指令:MOVAX,02)减法指令:SUBAX,AX;SBCAX,AX3)异式指令:XORAX,AX当8086微处理器响应总线请求发出HLDA信号后,有哪些引脚信号处于高阻?Ad15~AD0,A19/S6~A16/S3,RD,WR,INTA,IO/M,DEN,DT/R处于高阻,ALE无效。指令AND与TEST有何异同?AND与TEST指令均为将目标操作数与源操作数进行逻辑与操作,AND指令运算结果要送回目标操作数,TEST指令不送回目标操作数。两者标志位都有相同的位发生变化。简述8086/8088端口寻址方式,并说明各自的端口寻址范围。端口寻址方式有如下两种。1)直接寻址方式:如INAL,20H;OUT40H,AL;端口数为0~255。2)间接寻址方式:如INAL,DX;OUTDX,AX;端口数为0~65535。简述AAA与DAA指令的区别。AAA指令为非压缩BCD码加法调整指令,将非压缩BCD码相加的结果仍调整为非压缩形式的BCD码。DAA为压缩BCD码加法调整指令。将压缩BCD码相加,其结果仍调整为压缩形式的BCD码。两条指令编程时放在加减法指令后面,以便调整。什么是寻址方式?简述8086/8088寻址方式。所谓寻址方式是寻找操作数的方法。8086/8088微处理器寻址方式有寄存器寻址、立即寻址、直接寻址、寄存器间接寻址、基址寻址、变址寻址、基址变址寻址方式。说明JMP与JXX所能实现转移的范围。与使用JMP指令进行转移时,其转移范围不受限制,可在段内直接或间接转移,也可以在段间直接或间接转移。JXX指令是条件转移指令,执行指令时,根据微处理器标志寄存器的状态决定是否控制程序转移,若满足条件,则将控制转移到指令所规定的目标;若条件不满足,则继续顺序执行。所有的条件转移指令都是段内转移,且是短距离的,即目标必须在当前指令段内,且与下一条指令的第一字节距离在-128~+127字节之内。12.8086/8088微处理器当响应总线请求发出HLDA信号后,执行部件EU是否立即停止操作?执行部件此时将继续执行已经进入微处理器指令队列中的指令,直到遇到一条需要使用总线的指令时,执行部件才停下来。13.指令系统中哪些指令是成对出现的?指令系统中成对出现的指令、即在程序中两者同时出现,有PUSH/POP、PUSHF/POPFF、CALL/RET。14■说明指令MOVAL,LOH[SI]中源操作数的寻址方式及其存放位置?指令MOVAL,20H[SI]中源操作数的寻址方式是变址寻址方式,待寻找的操作数在内存储器中。执行SAHF和LAHF指令可对哪些标志位进行处理?SAHF和LAHF指令是对F寄存器中的低8位SF、ZF、AF、CF进行处理。45.INCAX与ADDAX,1指令有何异同?两条指令都能使AX内容增1,但前者CF标志无影响,后者CF有影响。简述SAR与SHR指令的区别。SHR指令为逻辑右移指令,可用于无符号数除2的操作;SAR指令为算术右移指令,可用于带符号数除2的操作。执行SHR指令时,右移一位,最高位补零,执行SAR指令一次,右移一位,最高位自动这回,保留原值不变。指令SUB与CMP有何异同?两条指令都能将目标操作数与源操作数进行相减操作,SUB能将结果送目标操作数中,并反映在标志位。什么叫指令?什么叫指令系统?指令就是要计算机执行某种操作的命令指令系统就是一台计算机中所有机器指令的集合说明CPU中的主要寄存器及其功能。1■指令寄存器(IR):用来保存当前正在执行的一条指令。2■程序计数器(PC):用来确定下一条指令的地址。3■地址寄存器(AR):用来保存当前CPU所访问的内存单元的地址。4■缓冲寄存器(DR):<1>作为CPU和内存、外部设备之间信息传送的中转站。<2>补偿CPU和内存、外围设备之间在操作速度上的差别。<3>在单累加器结构的运算器中,缓冲寄存器还可兼作为操作数寄存器。通用寄存器(AC):当运算器的算术逻辑单元(ALU)执行全部算术和逻辑运算时,为ALU提供一个工作区。状态条件寄存器:保存由算术指令和逻辑指令运行或测试的结果建立的各种条件码内容。除此之外,还保存中断和系统工作状态等信息,以便使CPU和系统能及时了解机器运行状态和程序运行状态。什么是指令周期?什么是机器周期?什么是时钟周期?三者之间的关系如何?指令周期是完成一条指令所需的时间。包括取指令、分析指令和执行指令所需的全部时间。机器周期也称为CPU周期,是指被确定为指令执行过程中的归一化基准时间,通常等于取指时间(或访存时间)时钟周期是时钟频率的倒数,也可称为节拍脉冲或T周期,是处理操作的最基本单位。一个指令周期由若干个机器周期组成,每个机器周期又由若干个时钟周期组成。指出下列指令中的源操作数与目的操作数的寻址方式(1) MOVSI,200(2)MOVCX,DATA[SI](3)ADDAX,[BX][DI](4)ANDAX,BX(5)MOV[SI],AX(6)PUSHF(1)源:立即寻址;目的:寄存器寻址(2)源:变址寻址;目的:寄存器寻址(3)源:基址变址寻址;目的:寄存器寻址(4)源:寄存器寻址;目的:寄存器寻址(5)源:寄存器间接寻址;目的:寄存器寻址(6)源:寄存器寻址;目的:直接寻址给定(BX)=637DH,(SI)=2A9BH,位移量D=7237H,试确定在以下各种寻址方式下的有效地址是什么?(1)立即寻址(2)直接寻址(3)使用BX的寄存器寻址(4)使用BX的间接寻址(5)使用BX的寄存器相对寻址(6)基址变址寻址(7)相对基址变址寻址(1)立即寻址0(2)直接寻址7237H(3)使用BX的寄存器寻址0(4)使用BX的间接寻址637DH(5)使用BX的寄存器相对寻址637DH+7237H=D5B4H(6)基址变址寻址637DH+2A9BH=8E18H(7)相对基址变址寻址637DH+2A9BH+7237H=1004FH25、 试根据下列要求写出相应的汇编语言指令(1)把BX寄存器和DX寄存器的内容相加,结果存到DX寄存器中。(2)用寄存器BX和SI的基址变址寻址方式把存储器中的一个字节与AL寄存器的内容相加,结果存到AL寄存器中。(3)用寄存器BX和位移量0B2H寄存器相对寻址方式把存储器中的一个字与(CX)相加,结果存到存储器中。4)用位移量0524H直接寻址方式把存储器中的一个字与数2A59H相加,结果存到存储器中。(5)把数0B5H与(AL)相加,并把结果存到AL中。MOVAX,BXADDAX,DXMOVDX,AXADDAL,BYTE[BX][SI]MOVAX,CXADDAX,[BX]+0B2HMOV[BX]+0B2H,AXMOVAX,2A59HADDAX,[0524H]MOV[0524H],AXADDAL,0B5H26、 现有(DS)=2000H,(BX)=0100H,(SI)=0002H,(20100)=12H,(20101)=34H,(20102)=56H(20103)=78H(21200)=2AH(21201)=4CH(21202)=B7H(21203)=65H,试说明下列各指令执行后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)AX=1200H(2)AX=0100H(3)AX=4c2AH(4)AX=3412H(5)AX=4c2AH(6)AX=7856H(7)AX=65B7H27、假定(DS)=2000H,(ES)=2100H,(SS)=1500H,(SI)=OOAOH,(BX)=0100H,(BP)=0010H,数据段中变量名VAL的偏移地址为0050H,试指出下列源操作数字段的寻址方式是什么?其物理地址是什么?(1)MOVAX,0ABH(2)MOVAX,BX(3)MOVAX,[100H](4)MOVAX,VAL(5)MOVAX,[BX](6)MOVAX,ES:[BX](7)MOVAX,[BP](8)MOVAX,[SI](9)MOVAX,[BX+10](10)MOVAX,VAL[BX](11)MOVAX,[BX][SI](12)MOVAX,VAL[BX][SI](1)立即寻址0(2)寄存器寻址0(3)直接寻址20100H(4)直接寻址20050H(5)基址寻址20100H(6)段超越的基址寻址21100H(7)堆栈段基址寻址15010H(8)源变址寻址200A0H(9)带偏量的基址寻址20110H(10)带偏移量的基址寻址20150H(11)基址加变址寻址201A0H(12)带偏移量的基址加变址寻址201F0H28、 如TABLE为数据段中0032单元的符号名,其中存放的内容为1234H,试问以下两条指令有什么区别?指令执行完后AX寄存器的内容是什么?MOVAX,TABLELEAAX,TABLE将TABLE为偏移量的内存中数据放入AX将TABLE的地址偏移量的放入AX29、 假设(BX)=0E3H,变量VALUE中存放的内容为79H,确定下列指令单独执行后的结果。(1)XORBX,VALUE(2)ANDBX,VALUE(3)ORBX,VALUE(4)XORBX,0FFH(5)ANDBX,0(6)TESTBX,01H(1)11100111XOR01111001=10011110H(2)01100001(3)11111111H(4)0001100021(5)00000000(6)0E3H30、试分析下面程序段执行完成什么样的功能?MOVCL,04SHLDX,CLMOVBL,AHSHLAX,CLSHRBL,CLORDL,BL将DX,AX中的双字节左移四位31、 试写出程序段把DX,AX中的双字右移四位。MOVCL,04HSHRAX,CLMOVBL,AHMOVBH,DLSHRBX,CLORAH,BLSHRDX,CL32、 假定(DX)=0B9H,(CL)=3,(CF)=1,确定下列指令单独执行后的DX中的内容。(1)SHRDX,1(2)SARDX,CL(3)SHLDX,CL(4)SHLDX,1(5)RORDX,CL(6)ROLDX,CL(7)SALDH,1(8)RCLDX,CL(9)RCRDX,1(1)(DX)=05CH(2)(DX)=017H(3)(DX)=05C8H(4)(DX)=0172H(5)(DX)=2017H(6)(DX)=05C8H(7)(DX)=0172H(8) (DX)=05CCH(9)(DX)=805CH五、综合题计算21*12-117/9的源程序.答:moval,21;将21取出来movbl,仃;将仃取出来mulbl;计算21*17movcx,ax;将结果暂存起来(得结果1)movax,117;将117取出来movbl,13;将13取出来divbl;计算117/13(得结果2)subcx,ax;将结果1-结果2,得到最终结果hlt2、执行下列指令后,AX寄存器中的内容是什么?TABLEDB10,20,30,40,50ENTRYDW3MOVBX,OFFSETTABLEADDBX,ENTRYMOVAX,[BX]AX=【解答】AX=3228H3、 执行完下列程序后,回答指定的问题。MOVAX,0MOVBX,2MOVCX,50LP:ADDAX,BXADDBX,2LOOPLP问:⑴该程序的功能是。⑵程序执行完成后(AX)=o解:(1)完成0到100间所有偶数求和的功能。(2)25504、 编写程序,计算下面函数的值。2x (x<0)s=<3x (0<=x<=10)4x x>10【解答】DATASEGMENTXDW34SDW?DATAENDSCODESEGMENT
ASSUMECS:CODE,DS:DATASTART:MOVAX,DATAMOVDS,AXMOVAX,X;将X送到AX中CMPAX,0;(AX)>0吗?JLDOUB;是,转向doubCMPAX,10;否(ax)<10吗?JLETRIB;是,转向tribSALAX,1;否,乘以4SALAX,1JMPEXITDOUB:SALAX,1;乘以2JMPEXITTRIB:SALAX,1;乘以3ADDAX,XEXIT:MOVS,AX;保存结果MOVAH,4CH;结束INT21HCODEENDSENDSTART注意,在比较的过程中使用的是针对带符号数的跳转指令,X应该看作带符号数。程序中还用了移位指令代替了乘法指令。5、从键盘输入一系列字符,以回车符结束,编程统计其中非数字字符的个数。【解答】DATASEGMENTBLOCKDB100DUP(?)COUNTDB?DATAENDSCODESEGMENTASSUMEDS:DATA,CS:CODESTART:MOVAX,DATAMOVDS,AXMOVDL,0LEASI,BLOCKLP:MOVAH,1INT21HCMPAL,0DHJZEXITMOV[SI],ALCMPAL,30HJAENEXTCMPAL,39HJBENEXTINCDLNEXT:INCSIJMPLPEXIT:MOVCOUNT,DLMOVAH,4CHINT21HCODEENDSENDSTART6、已知在内存中从BLOCK单元起存放有20个带符号字节数据,统计其中负数的个数并放入COUNT单元。【解答】DATASEGMENTBLOCKDB-7,1,12,-90,-70,34,-1,56,45,-12DB-3,-4,23,0,12,11,-9,-8,67,-56CNEQU$-BLOCKCOUNTDB?DATAENDSCODESEGMENTASSUMEDS:DATA,CS:CODESTART:MOVAX,DATAMOVDS,AXMOVDL,0LEASI,BLOCKMOVCX,CNLP:MOVAL,[SI]TESTAL,80HJZNEXTINCDLNEXT:INCSILOOPLPMOVCOUNT,DLMOVAH,4CHINT21HCODEENDSENDSTART7、从键盘输入一个大写英文字母,将其转换为小写字母并显示出来,要求输入其它字符时,能够有出错提示信息。【解答】DATASEGMENTMESSDB'INPUPERROR!',0AH,0DH,'$'DATAENDSCODESEGMENTASSUMEDS:DATA,CS:CODESTART:MOVAX,DATAMOVDS,AXMOVAH,01HINT21HCMPAL,'A'JBERRCMPAL,'Z'JAERRADDAL,20HMOVDL,ALMOVAH,02HINT21HJMPEXITERR:MOVDX,OFFSETMESSMOVAH,09HINT21HEXIT:MOVAH,02HINT21HCODEENDSENDSTART&试定义将一位十六进制数转换为ASCII码的宏指令。解答】HEXTOAMACROANDAL,0FHCMPAL,9JNAHEXTOA1ADDAL,7HHEXTOA1:ADDAL,30HENDM9、变量X,Y为二进制的ASCII码串,请编程序计算并显示出下式的值:ZjX+(Y-5)答案:求一个代数式(或表达式)的值,一般的做法是根据运算符的优先级顺序进行计算,如上式先计算(Y・15),再与X相加,将其结果存放在Z变量中,最后可用DOS功能调用将结果显示出来。TITLEASCDAT(COM)add&subASCIInumbersCODESGSEGMENTASSUMECS:CODESG,DS:CODESGORG100HBEGIN:JMPSHORTMAINXDB'60'; ASCIInumberYDB'24'ZDB'000','$'MAINPROCNEARMOVDS,DXMOVAH,0;clearAHMOVAL,Y+1;loadY'slow_orderSUBAL,05;sublow_orderdigitAAS■;adjustforsubMOVZ+2,AL;putresultinZ'slow_orderMOVAL,Y;loadY'shigh_orderSBBAL,01;subdigitwithcarryAAS■;adjustforsubXCHGAL,Z+2;exchangelower_orderinALADDAL,X+1;addlower_orderinALAAA■;adjustforaddXCHGAL,Z+2;exchangehigh_orderinALADCAL,X;addhigh_orderdigitAAA■;adjustforaddMOVZ+1,AL;storehigh_orderresultMOVZ,AH;storecarryORZ,30H;ZstringshouldbeORZ+1,30H;ASCIIstringORZ+1,30HMOVDX,OFFSETZ;offsetofstringZMOVAH,9;displaystringfuntionMOV AX,4C00h ;returnINT21HMAINENDPCODESGENDSENDBEGIN10、请编写一程序,从附加段中一个未排序的字数组UNORDLST中,找出最大数和最小数分别存放在AX和BX寄存器中。答案:要找出数组中的最大数和最小数,可以取数组中的某一个数作为比较的基数,然后用数组中再与其他数一一比较,以此得出最终的最小数。同样如果程序发现一个数大于这个基数,那么它就是一个新的最大数。依法泡制得出最大数(此种方法称为冒泡排序)。数组中的每个数逐一进行这种比较操作,所以可采用循环程序结构,控制循环的条件就是数组中数的个数,如果数组中有M个数,则循环次数为M-1。TITLEMINMAX—;Findthemaxandminwordsinanunordered;listintheextrasegmentESEGSEGMENTUNORDLSTDW50DUP(?)COUNTEQU($-UNORDLST)/2ESEGENDS
CSEGSEGMENTPARA'code'ASSUMECS:CSEG,ES:ESEGMINMAXPROCFARPUSHDS ;saveDSforreturnSUB AX,AXPUSH AXMOV AX,ESEG ;initESMOV ES,AXMOVCX,COUNTDECCXLEA DI,UNORDLSTMOVCX,COUNTDECCXLEA DI,UNORDLSTMOVAX,BXCHEMIN:ADDDI,2CMP ES:[DI],BXJAECHKMAXMOVBX,ES:[DI]JMPSHORTNEXTELCHKMAX:CMPES:[DI],AX;getreadyfor;count-1compares;addressofthelist;andmax.;pointtonextelement;compareelementtomin;newminimumfound?;yes,putitinBX;compareelementtomaxMOVAX,ES:[DI] ;yes,putitinAXNEXTEL:LOOPCHEMINRETLOOPCHEMINRETMINMAXENDP;checkentirelist?exitCSEGENDSENDMINMAX11、请用子程序结构编写如下程序,从键盘输入一个二位十进制的月份(01~12),然后显示出相关的英文缩写名。答案:分析:这是一个比较简单的问题,我们可以按题目要求的几项功能,分别编写成几个程序。INPUT从键盘接收一个二位数,并把它转化为二进制数。LOCATE把输入数与英文缩写对应起来,这可在一个字符表中查找。DISPLAY将找到的缩写字母显示在屏幕上。显示可用DOS提供的显示功能(INT21H的09功能)TITLEMONTH(EXE)DATASGSEGMENTPARA‘DATA'THREEDB3MONINDB3,4DUP(?)ALFMONDB‘???',“$”MONTABDB'JAN','FEB',‘MAR','APR','MAY','JUN'DB‘JUL',‘AUG',‘SEP',‘OCT','NOV','DEC'DATASGENDSCODESGSEGMENTPARA‘CODE'ASSUMECS:CODESG,DS:DATASG,ES:DATASGMAINPROCFARPUSHDSSUBAX,AXPUSHAXMOVAX,DATASG;pointtodataseg.MOVDS,AXMOVES,AXCALLINPUT;inputandconvertCALLLOCATE;locatemonthCALLDISPLAY;displayalphamonthRETMAINENDP;InputandconcertASCIItovinary;INPUTPROCNEARPUSHDX
MOVAH,0AH;inputfromkeybpardLEADX,MONIN;addressofbufferINT21HMOVAH,MONIN+2;fetchnumericmonthMOVAL,MONIN+3XORAX,3030H;clearASCII3'sCMPAH,00;month01-09?JZRETURN;yes.bypassSUBAH,AH;no,clearAHADDAL,10;correctforbinaryRETURN:POPDXRETINPUTENDP9;LocatemonthintableLOCATEPROCNEARPUSHSI ;savetheregistersTOC\o"1-5"\h\zPUSH DIPUSH DXLEA SI,MONTABDEC ALMOV BL,3MULBL ;charsforeachmonthADDSI,AXMOVCX,03;init'ze3charsmoveCLDLEADI,ALFMONREPMOVSB;mov3charsPOPCX;restoreregistersPOPDIPOPSIRETLOCATEENDP■; ;DisplayalphamonthDISPLAYPROCNEARPUSHDXLEADX,ALFMON;addressofoutputMOVAH,09;displayfunctionINT21H;DOScallPOPDXRETDISPLAYENDPCODESGENDSENDMAIN12、分析下列程序段,回答问题:MOVSI,7000HLEA DI,NEGBUFLOPA:MOVAX,[SI]ORAX,[SI]JNSL1MOV[DI],AXADDDI,2L1:ADDSI,2CMPSI,8000HJBLOPA⑴程序段的功能是什么?⑵第一次执行“ADD SI,2”指令后标志位CF,SF,OF,ZF各为何值?(3)在此程序段中,“CMP”指令被执行了几次?04004功能是从7000H开始的数据块按字查找负数并把它依次存入NEGBUF中.标志位CF,SF,OF,ZF各为0,0,0,0.(8000H-7000H)/2=800H(次)13、试编写一个汇编语言程序,要求对键盘输入的小写字母用大写字母显示出来。答案:csegsegmentassumecs:cseg,ds:csegbegin:movah,1int21hcmpa1,'a'jbstopcmpal,'z'jastopsubal,20hmovdl,almov ah,2int21hjmpbeginstop:retcsegendsend14、 设变量X是带符号的整数,按下列的要求编制程序:(1)如果X的绝对值大于5,变量赋值为0o(2)如果X的绝对值不大于5,变量赋值为1-X.答案:dsegsegmentxdw-4
fxdw?dsegendscsegsegmentmainprocfarassumecs:cseg,ds:dsegstart:pushdssubax,axpushaxmovax.dsegmovds,axbegin:cmpx,5jga0cmpx,-5jla0movbx,1subbx,xmovfx,bxreta0:movfx,0retmainendpcsegends
csegendsendstart15、试编制一个汇编语言程序统计变量X中值有多少位为1,并计入变量ONE中。答案:dsegsegmentxdw 32767onedw 0dsegendscsegsegmnetmainprocfarassumecs:cseg,ds:dsegstart:pushdssubax,axpushaxmovax,dsegmovds,axmovbx,0movch,4movcl,4begin:movcx,16movbx,0movdx,0001hcomp:movax,xandax,dxjznextincbxnext:shdx,1loopcompmovone,bxretmainendpcsegendsendstart16、已知数组A包含15个互不相等的整数,数组B包含20个互不相等的整数,试编写一程序将既在A数组中出现又在B数组中出现的整数存放在数组C中。答案:dsegsegmentTOC\o"1-5"\h\za dw 15 dup (?)b dw 20 dup (?)c dw 15 dup ('')dsegendscsegsegmentmianprocfarassumecs:cseg,ds:dseg,es:dsegstart:pushdssubpushmovax,dsegmovds,axmovbegin:movmovmovloop1:pushmovmovmovloop2:cmpjnemovaddno:addloopaddpoploopax,axaxes,axsi,0bx,0cx,15cxdi,0cx,20ax,a[si]b[di],axnoc[bx],axbx,2di,2loop2si,2cxloop1retmainendpcsegendsendstart仃、指令ANDAX,OPR1ANDOPR2中,0PR1和0PR2时两个已赋值的变量,两个AND操作有什么区别?答案:oprlandopr2是一个表达式,and为逻辑操作符,它在汇编求得一个值。and指令在程序运行式执行。18、下列PUSH指令和POP指令哪些是合法的?哪些是非法的?是分别用/和X在中表示出来。(1)PUSHCX()(2)P0PAL()(3)PUSHDS()(4)P0PDX()(5)PUSHCS()(6)PUSHES()(7)P0PCS()(8)P0PSS()(9)PUSHSI()(10)P0PDAT()04010(2),(7)是非法指令,其余指令合法19、写出数据段中每个符号所对应的值。DATAAREASEGMENTMAXEQU0FFFHVAL0NEEQUMAXM0D10HVALTW0EQUVAL0NE*2BUFSIZEQU((VAL0NEGT10H)AND10H)+10HBUFFERDBBUFSIZEDUP(?)BUFENDEQUBUFFER+BUFSIZ-1DATAREAENDS答案:MAX=0FFFHVALONE=OOOFH(VALONE为MAX的值除以10H的余数)VALTWO=001EH(000FH*2=001EH)BUFSIZ=OO2OH2O、给定(DS)=2OOOH,(BX)=O1OOH,(SI)=OOO2H,(2O1OOH)=12H,(2O1O1H)=34H, (2O1O2H)=56H, (2O1O3H)=78H; (212OOH)=2AH,(212O1H)=4CH,(212O2H)=B7H,(212O3H)=65H,试分析下列指令执行后,AX寄存器的内容.(1)MOVAX,
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026年燃气安全培训重点内容专项突破
- 2026年商业地产委托运营合同协议
- 平凉地区泾川县2025-2026学年第二学期五年级语文第五单元测试卷(部编版含答案)
- 临汾市隰县2025-2026学年第二学期四年级语文期中考试卷(部编版含答案)
- 漯河市舞阳县2025-2026学年第二学期六年级语文第五单元测试卷部编版含答案
- 铁岭市昌图县2025-2026学年第二学期六年级语文第五单元测试卷部编版含答案
- 2026年宣传培训工作总结报告核心要点
- 吕梁市石楼县2025-2026学年第二学期六年级语文第五单元测试卷部编版含答案
- 商洛地区丹凤县2025-2026学年第二学期六年级语文第五单元测试卷部编版含答案
- 鹤壁市郊区2025-2026学年第二学期六年级语文第五单元测试卷部编版含答案
- 多民族的家庭课件
- 工程项目质量监督检查与整改方案
- 中国心房颤动管理指南(2025)解读课件
- DB34∕T 3839-2021 高疲劳性能高模量沥青混合料设计与施工技术规范
- 网络餐饮监管培训课件
- 厂房施工管理办法
- 吉林大学第二医院招聘笔试真题2024
- DB4201∕T 567-2018 武汉市园林绿化用木本苗木质量标准
- 22J403-1楼梯栏杆栏板
- 做账实操-小麦种植公司的全盘账务处理及成本核算实例
- 高中英语必背3500单词表完整版
评论
0/150
提交评论