微机原理和汇编语言复习剖析剖析_第1页
微机原理和汇编语言复习剖析剖析_第2页
微机原理和汇编语言复习剖析剖析_第3页
微机原理和汇编语言复习剖析剖析_第4页
微机原理和汇编语言复习剖析剖析_第5页
已阅读5页,还剩11页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

微机原理和汇编语言复习资料一、选择题( 30分)1.已知X=76,则[X]补=( )A.76H B.4CH C.0BCH D.0CCH2.已知[X]补=80H,则X=( )A.80H B.0 C.0FFH D.-80H3.已知X=78,Y=-83,则[X+Y]补=( )A.0F5H B.0A1H C.0FBH D.65H4.下列为补码表示,其中值最大的是( )A.10001000 B.11111111 C.000000000 D.000000015.十六进制数 88H,可以表示成下面几种形式,请找出 错误的表示( )A.无符号十进制数 136 B.带符号十进制数 -120C.压缩BCD码十进制数88 D.8位二进制数-8的补码6.在微机系统中分析并控制指令执行的部件是( )A.寄存器 B.数据寄存器 C.CPU D.EU7.在计算机的CPU中执行算术逻辑运算的部件是( )A.ALU B.PC C.AL D.AR8.执行指令PUSH CX后堆栈指针SP自动( )A.+2 B.+1 C.-2 D.-19.在标志寄存器中表示溢出的标志是( )A.AF B.CF C.OF D.SF10.若计算机字长 16位,则无符号整数表示的范围用十六进制表示为( )A.8000H~FFFFH B.0000H~7FFFHC.0000H~FFFFH D.0001H~FFFFH11.设物理地址( 10FF0H)=10H,(10FF1H)=20H,(10FF2H)=30H,从地址10FF1H中取出一个字的内容是()A.1020HB.3020HC.2030HD.2010H12.某数据段存储单元的偏移地址为2200H~31FFH,则其存储空间大小是()A.2KB.4KC.8KD.16K13.在8086CPU标志寄存器中,ZF=1表示()A.结果有进位B.结果为0C.结果溢出D.结果为负14.两个操作数运算时,下列哪种情况会发生溢出()A.两个负数相加,结果为负B.两个正数相加,结果为负C.一正一负相加,结果为负D.两个正数相加,结果为正15.堆栈段的逻辑地址由()组成A.DS:BXB.ES:DIC.CS:IPD.SS:SP16.代码段某单元的逻辑地址为3458H:2C92H,其物理地址为()A.37212HB.26FF2HC.34580HD.32C92H17.在8086系统中,数据寄存器组为()A.SI,DI,SP,BPB.AX,BX,CX,DXC.CS,DS,ES,SSD.CF,SF,ZF,OF18.指令MOVAX,DS:[1000H]中源操作数的寻址方式是()A.立即寻址B.直接寻址C.寄存器寻址D.基址变址寻址19.指令MOVDX,COUNT[BP][DI]的执行结果是()A.将COUNT的值传送给DXB.将COUNT+BP+DI的值传送给DXC.将数据段中有效地址为COUNT+BP+DI的存储单元的值传送给DXD.将堆栈段中有效地址为COUNT+BP+DI的存储单元的值传送给DX20.若(AX)=2530H,(BX)=18E6H,MOV[BX],AL指令正确的执行结果为()A.BX寄存器的值为2530HB.BL寄存器的值为30HC.18E6H单元的值为30HD.18E6H单元的值为2530H121.指令MOVAX,COUNT[BX]完成的操作是()A.从存储单元读出一个字送入AXB.从存储单元读出一个字节送入AXC.将AX中的一个字写入存储单元D.将AX中的一个字节写入存储单元22.一条指令中目的操作数不允许使用的寻址方式是()A.寄存器寻址B.立即寻址C.变址寻址D.寄存器间接寻址23.用直接寻址将AL的内容保存到16号单元,可以用()指令A.MOVDS:[0016H],ALB.MOVAL,DS:[0016H]C.MOVDS:[0010H],ALD.MOVAL,DS:[0010H]23.经过汇编产生的二进制目标文件是()A..ASMB..OBJC..EXED..MAP24.不能用MOV指令赋初值的段寄存器是()A.DSB.ESC.CSD.SS25.在COUNTDB5这条存储单元定义伪指令中,COUNT称为()A.助记符B.变量C.符号D.标号(带冒号的)26.将字符串“INPUT”保存到存储单元MESS,正确的伪指令是()A.INPUTDBMESSB.MESSDBINPUTC.INPUTDB‘MESS’D.MESSDB‘INPUT’27.若X已经定义为字型,可以用()改变X为字节型A.BYTEPTRXB.OFFSETXC.TYPEXD.LABLEX28.INCWORDPTR[BX]指令中的操作数的数据类型是()A.字节B.字C.双字D.四字29.ABCDW1,$+2,5,7,其中$代表()A.当前的偏移地址值为0B.当前的偏移地址值为1C.当前的偏移地址值为2D.当前的偏移地址值为330.()可用来指出一条汇编指令所在存储单元的符号地址A.变量B.数组名C.标号D.偏移值31.汇编语言中存储单元的属性不能是()A.字符CHAR型(无字符型)B.字节BYTE型C.字WORD型D.双字DWORD型32.用指令MOVBX,SEGCOUNT可以得到存储单元COUNT的()A.物理地址B.段地址C.偏移地址D.属性33.下列指令中,有错误的是()A.MOVAH,BLB.MOVDS,AXC.MOVCL,DXD.MOVSI,9034.若AX=1E30H,BX=12E4H则ADDAL,BL的执行结果为AL和CF的值是()A.14H,0B.24H,0C.14H,1D.24H,135.若BL=83H,CF=1,则ADCBL,90H执行后,AH=()A.14HB.15HC.16HD.17H36.若DX=1010H,BX=0923H,则SUBDX,BX的执行结果为()A.168DHB.06EDHC.F6DDHD.0087H37.从键盘输入一串字符使用DOS功能调用()A.1号功能B.2号功能C.9号功能D.10号功能38.DOS功能调用中,功能号应写入()寄存器中A.ALB.AHC.DLD.DH39.显示一个字符的DOS功能调用要求将字符放入()A.DS:DXB.DS:BXC.BLD.DL40.获得BUFFER单元有效地址的汇编指令为()A.MOVBX,BUFFERB.LEABX,BUFFERC.MOVBX,[BUFFER]D.LDSBX,BUFFER41.关于字节乘法的指令错误的说法是()A.被乘数隐含在AL中B.乘数和被乘数都是字节型C.被乘数隐含在AX中D.乘积是字型242.关于字除法错误的说法是( )A.16位被除数AX与8位源操作数相除B.32位被除数DX:AX与16位源操作数相除C.商在AX寄存器,余数在 DX寄存器中D.带符号除法的商和余数都是补码表示的数43.在分支指令中,利用符号进行判断的指令是( )A.JC B.JS C.JZ D.JO44.在执行条件转移指令前,不能形成条件的指令是( )A.CMP B.SUB C.AND D.MOV45.在条件转移指令中,结果不为 0则转移的指令是( )A.JNS B.JZ C.JS D.JNZ46.两个带符号数比较,不大于则转移的指令是( )A.JLEB.JBEC.JLD.JAE47.带符号数乘以2的操作可以用()移位指令实现A.SALAL,1B.SALAL,2C.SHRAL,1D.ROLAL,248.将AL的2、6位屏蔽为0,其余位保持不变,指令为()A.ADNAL,42HB.ANDAL,0BBHC.ORAL,26HD.ADDAL,0FBH49.将AL的第4位置1,其余位不变,指令为()A.ORAL,40HB.ANDAL,40HC.ORAL,10HD.ANDAL,1FH50.将AL清0的指令为()A.ANDAL,ALB.ORAL,0C.XORAL,AL(自身异或)D.XORAL,051.将键盘输入的小写字母变为大写,用指令()A.ANDAL,20HB.ANDAL,0DFHC.ORAL,20HD.0RAL,0DFH52.用户程序中数据段的段基址,用()指令给出A.MOVAX,CODEB.MOVCS,CODEC.MOVCS,DATAD.MOVAX,DATAMOVCS,AXMOVDS,CSMOVDS,CSMOVDS,AX53.下列描述错误的是()A.LOOP指令以CX为循环控制计数器B.LOOPE指令循环的条件是CX≠0且ZF=0C.LOOPE指令循环的条件是CX≠0且ZF=1D.LOOPNE指令循环的条件是CX≠0且ZF=054.串处理操作需要循环重复执行,()不能出现在串处理指令中A.REPB.REPZC.REPNZD.LOOP55.在串传送指令中,串的传送方向由()标志位决定A.DFB.CFC.ZFD.OF56.循环指令LOOP可以实现()的循环A.循环次数已知B.循环次数未知C.循环次数累加D.循环次数不变57.在多重循环程序中,从外循环再次进入内循环时,内循环()A.不必考虑B.重新赋值C.置0D.置158.循环指令的控制条件除CX之外,还可以把标志位()作为控制条件A.CFB.SFC.ZFD.OF59.下列指令不能构成循环的是()A.JMPB.JNZC.LOOPD.DECCX60.在串处理指令中,设置方向标志为1的指令是()A.STDB.CLDC.HLTD.CWD61.如果子程序的属性为FAR,下列说法错误的是()A.可以段内直接调用B.可以段间间接调用C.可以段间直接调用D.只能段间调用62.在子程序调用过程中,断点指的是()A.CALL指令本身B.CALL的下一条指令C.CALL的下一条指令的地址D.子程序名363.执行CALLSUB1指令后,完成的操作是()A.将SUB1的偏移地址入栈保护B.将断点的偏移地址入栈保护C.将断点的偏移地址送IPD.将SUB1的段地址送CS,偏移地址送IP64.子程序的属性是用()定义的A.CALLB.PROCC.FARD.RET65.执行段间返回RET指令时,从堆栈中()A.先弹出断点的偏移地址,再弹出段基址B.先弹出断点的段基址,再弹出偏移地址C.弹出断点的偏移地址D.弹出断点的段基址66.子程序结构中,保存现场指的是()A.保存CALL指令B.保存断点的地址C.保存主程序用到的寄存器D.保存子程序用到的寄存器67.CALL和RET指令的用法,正确的说法是()A.CALL和RET指令都对堆栈操作B.只有CALL指令使用堆栈C.只有RET指令使用堆栈D.CALL和RET指令都不使用堆栈68.CALL和RET指令对堆栈操作,正确的说法为()A.CALL指令从堆栈中取出子程序的地址B.RET指令从堆栈中取出子程序的地址C.CALL指令从堆栈中取出断点的地址D.RET指令从堆栈中取出断点的地址69.执行CALLFARPTRSUBR2指令时,正确的说法是()A.先将断点的段地址入栈,再将偏移地址入栈B.先将断点的偏移地址入栈,再将段地址入栈C.先将SUBR2的段地址入栈,再将偏移地址入栈D.先将SUBR2的偏移地址入栈,再将段地址入栈70.用CALL指令调用子程序时,从子程序返回到主程序()A.用JMP指令B.用INT21H指令C.用RET指令D.可以用RET,也可以用JMP71.在用CALL指令实现子程序嵌套调用时,子程序的RET指令()A.返回到最初始的调用程序中B.返回到上一级调用程序中C.可以换为JMP指令返回D.可以不用72.子程序参数传递时,用存储单元传参方式,()A.只能主程序访问传参单元B.只能子程序访问传参单元C.主程序和子程序都能访问传参单元D.主程序读传参单元,子程序写传参单元73.用寄存器传参,在子程序做现场保护时,()A.传参寄存器必须保存B.传参寄存器不必保存C.传参寄存器可以改写D.根据情况确定保存与否74.如果在子程序中进行了现场保护,那么子程序()A.恢复现场在RET指令之前B.恢复现场在RET指令之后C.直接用RET指令返回D.直接用JMP指令返回75.有关宏的作用,下列说法不正确的是()A.宏可以被多次调用B.宏调用时不用保持断点C.宏定义体中不可以有标号D.宏展开是汇编程序完成的76.宏调用是通过()实现的A.汇编指令B.宏指令C.宏展开D.机器指令77.宏定义的伪指令是()A.PROC.ENDPB.MACRO.ENDMC.SEGMENTENDSD.STRUCENDS78.宏与子程序的区别是()A.宏可以被多次调用B.宏是一段程序C.宏可以实现参数传递D.宏调用时不用返回79.80X86系统中,CPU是通过()获取硬件可屏蔽中断发生的A.INTR引脚B.NMI引脚C.中断允许标志IFD.INTn指令480.CPU对软件中断的处理,下列说法正确的是( )A.中断允许标志 IF必须为1B.通过8255A中断控制器管理中断C.不需要得知中断类型号D.执行INTn指令时立即转入中断处理81.在中断处理系统中,中断向量指的是( )A.中断类型号 B.中断子程序 C.中断子程序的入口地址 D.中断源82.有关中断向量表的说法正确的是( )中断向量表就是中断向量B.中断向量表中保存的是中断向量中断向量表中保存的是中断类型号中断向量表中保存的是中断子程序83.在80X86中断系统中,中断优先级最高的是()A.可屏蔽中断B.非屏蔽中断C.内部中断D.单步中断84.8086系统的中断向量表位于()A.内存的0~255号字节单元B.BIOS的ROM中C.硬盘的0~255号字节单元D.系统的CMOS中85.当硬件中断发生时,CPU通过()获取中断类型号A.INTR引脚B.INTn指令C.数据总线D.中断源86.在8086指令系统中,取出中断向量的指令是()A.MOVAH,35HB.MOVAH,25HC.MOVAH,31HD.MOVAH,4CH87INT21HINT21HINT21HINT21H.编写中断子程序时,下列说法错误的是()A.允许中断嵌套B.不允许开中断C.应该保护和恢复现场D.必须用IRET指令返回88.中断调用和子程序调用过程相同的是()A.保护断点B.保存标志寄存器C.将IF和TF清零D.中断源有优先级89.BIOS中断设置位置的指令是()A.MOVAH,01HB.MOVAH,02HC.MOVAH,01HD.MOVAH,02HINT10HINT10HINT21HINT21H90.BIOS中断从键盘读入一个字符的指令是()A.MOVAH,00HB.MOVAH,01HC.MOVAH,00HD.MOVAH,01HINT10HINT10HINT16HINT21H91.BIOS中断显示一个字符串的指令是()A.MOVAH,0EHB.MOVAH,13HC.MOVAH,02HD.MOVAH,09HINT10HINT10HINT21HINT21H92.DOS中断读取系统时间的指令是()A.MOVAH,1CHB.MOVAH,2CHC.MOVAH,1CHD.MOVAH,2CHINT10HINT16HINT21HINT21H1.P30习题2.38086/8088系统中存储器的逻辑地址和物理地址之间有什么关系?表示的范围各为多少?答:8086/8088CPU有20根地址线,可以直接寻址1MB的存储空间,其地址范围为:0~220-1,用十六进制表示是:00000H~FFFFFH,与存储单元一一对应,称为存储单元的物理地址。由于8086/8088CPU内部寄存器都是16位的,它只能处理16位的二进制数。为了能够提供20位的物理地址,系统采用了将存储器分段的方法,具体采用的方法是将1MB存储空间按64KB的大小分成16个段,每个段的起始地址由段寄存器来确定,由指令提供一个存储单元相对于起始地址的16位偏移量。这样系统就将整个1MB的存储空间分为16个互相不重叠的逻辑段了,每个段的地址范围是:0~216,也就是:0000H~FFFFH逻辑地址是在程序中使用的地址,它由段的起始地址和偏移地址(偏移量)两部分组成(都是16位),逻辑地址的表示为“段地址:偏移地址”。物理地址与逻辑地址的关系是:物理地址=段地址X16+偏移地址52.P30习题2.6AX、BX、CX、DX能用来存放偏移地址吗?哪些可以?哪些不可以?答:这四个都是通用数据寄存器,他们可以以字(16位)的形式访问(AX、BX、CX、DX),也可以以字节(8位)形式进行访问(AL、AH、BL、BH、CL、CH、DL、DH)。其中AX称为累加器,BX称为基址寄存器,CX称为计数器,DX称为数据寄存器。四个寄存器中只有 BX可以用来存放偏移地址,其他三个都不能用于存放偏移地址。3.P30习题2.128086有哪4种逻辑段?各逻辑段分别是什么用途?答:8086为了达到寻找 1MB的目的,将1MB的空间分成64K大小的逻辑段,在 8086CPU内有四个寄存器:CS、DS、SS、ES,分别用来存放代码段、数据段、堆栈段和附加段的段基址。代码段用来存放程序的指令序列。数据段用于存储程序运行所需要的各种原始数据、中间结果和最后结果。堆栈段是按“后进先出、先进后出”原则组织的一段特殊的存储区域,计算机在进行子程序调用和中断时,都会用到堆栈段。附加段的作用与数据段基本相同,也用来保存数据。4.P96习题3.18086指令系统可以处理哪些数据类型?答:8086指令系统可以处理的数据,按照存放的位置不同可以分为:寄存器中的数据、内存中数据和I/O端口的数据;按照数据的长度不同可以处理:8位和16位的二进制数;按照存储大小不同可以处理:字节类型和字类型的数据。5.P167习题5.6请说明堆栈段的作用,在程序中是否一定要定义堆栈段,如果定义的话用什么方法定义,请举例说明。答:堆栈段是一个特殊的段, 在程序中可以定义它,也可以不定义它。除了要生成 COM型执行文件的源程序,一个完整的源程序一般最好定义堆栈段。如果在程序中不定义堆栈段,那么,操作系统在装入该执行程序时将自动为其指定一个 64KB的堆栈段。在源程序中定义堆栈段的方法有 2种:方法1:STACK1 SEGMENTDB 256 DUP(?)TOP LABLE WORDSTACK1 ENDS方法2:STACK1 SEGMENTSTACKDB 256 DUP(?)STACK1 ENDS在方法1中定义之后必须在代码段中的 ASSUME语句中包含: SS:STACK1,而方法2就不用在ASSUME语句中进行说明。6.P185习题6.7在子程序中常用的参数传递方法有哪些?答:参数传递必须事先约定,子程序根据约定从存储器或存储单元取原始数据(入口参数) ,进行处理后将处理结果(出口参数)送到约定的寄存器或存储单元,返回主程序。子程序调用时常用的参数传递方法有三种:1、用寄存器传递:适用于参数传递较少的情况,传递速度快;2、通过地址表传送参数地址:适用于参数较多的情况,但传递速度较慢;3、用堆栈传递:适用于传递参数较多,存在嵌套或递归调用的情况。67.P185习题6.4CALL的主要区别。简述段内和段间子程序调用指令答:CALL指令有两种格式,分别用于段内和段间子程序的调用。1、段内调用的格式是:CALLNEARPTR子程序名(或CALL子程序名)指令执行的操作:返址(返回的地址,也称断点)入栈:(SP)←(SP)-2;((SP)+1,(SP))←(IP)转子程序:(IP)←(IP)+16位偏移地址(偏移量)2、段间调用的格式是: CALL FAR PTR子程序名指令执行的操作:返址(返回的地址,也称断点)入栈:(SP)←(SP)-2;((SP)+1,(SP))←(CS)(SP)←(SP)-2;((SP)+1,(SP))←(IP)转子程序:(IP)←子程序入口地址的偏移地址(CS)←子程序入口地址的段基址从上面两种调用可以看出,段内调用不需要把CS的值保存到栈区,因为子程序和主程序在同一个段内;而段间调用要把CS和IP同时保存到栈区,以便子程序返回时能够根据CS和IP的值准确地计算出断点的地址值。P215习题8.3什么是中断?中断向量表有什么作用?答:中断是一种CPU中止正在执行的程序而转去处理特殊事件的操作。这些引起中断的事件称为中断源,中断处理过程一般包括:中断请求、中断响应、中断处理和中断返回四个步骤。中断向量表是中断服务程序入口地址的偏移值和段基址,一个中断向量占4个字节空间,它是中断源的识别标志,可用来形成相应的中断服务程序的入口地址或存放中断服务程序的首地址。四、填空题(20分)1.P146:例5.7已知某班学生的计算机成绩按学号从1开始按小到大的顺序排列在TAB表中,假定要查询的学生的学号放在变量NO中,请将查询的学生成绩放在ENGLISH中,程序如下:INCLUDEPRINT.ASMDATASSEGMENTTABDB80,85,86,71,79,96NODB83,56,32,66,78,84DW8ENGLISHDB?DATASENDSCODESSEGMENTASSUMECS:CODES,DS:DATASSTART:MOVAX,DATASMOVDS,AXMOVBX,OFFSETTABMOVAX,NOADDBX,AXDECBXMOVAL,[BX]MOVCOMPUTER,ALOUTDBCOMPUTERMOVAH,4CHINT21HCODESENDSENDSTART72.P151:例5.12设有3个单字节无符号数存放在 BUFFER开始的缓冲区中,程序如下:DATASSEGMENTBUFFERDB87,34,123DATASENDSCODESSEGMENTASSUMECS:CODES,DS:DATASSTART:MOVAX,DATASMOVDS,AXMOVSI,OFFSETBUFFERMOVAL,[SI]MOVBL,[SI+1]MOVCL,[SI+2]CMPAL,BLJAENEXT1XCHGAL,BLNEXT1:CMPAL,CLJAENEXT2XCHGAL,CLNEXT2:CMPBL,CLJAENEXT3XCHGBL,CLNEXT3:MOV[SI],ALMOV[SI+1],BLMOV[SI+2],CLOUTDBALOUTDBBLOUTDBCLMOVAH,4CHINT21HCODESENDSENDSTART3.P160:例5.19已知有两个5个字节的数分别放在 DA1、DA2为首地址的内存区中,分别求出它们的和放在 DA3为首地址的内存中,程序如下:INCLUDEPRINT.ASMDATASSEGMENTDA1DB10,20,30,40,50DA2DB1,2,3,4,5DA3DB?,?,?,?,?DATASENDSCODESSEGMENTASSUMECS:CODES,DS:DATASSTART:MOVAX,DATASMOVDS,AXMOVAX,0CLCMOVCX,5MOVBX,OFFSETDA1MOVSI,OFFSETDA2MOVDI,OFFSETDA3LP:MOVAL,[BX]ADCAL,[SI]MOV[DI],ALOUTDBALINCBXINCSIINCDILOOPLPMOVAH,4CHINT21HCODESENDSENDSTART84.P161:例5.20在以BUF为首地址的内存区域中存放着一批带符号的 8位二进制数,这批数据以 0作为结束符号。以下程序是统计该批数据中有多少个正数,并把结果存放在 RESULT单元:INCLUDEPRINT.ASMDATASSEGMENTBUFDB10,20,-30,40,-50,44,0RESULTDW?DATASENDSCODESSEGMENTASSUMECS:CODES,DS:DATASSTART:MOVAX,DATASMOVDS,AXXORCX,CXLEABX,BUFL1:MOVAL,[BX]INCBXORAL,ALJZEXITINCCXJMPL1EXIT:MOVRESULT,CXOUTDWCXMOVAH,4CHINT21HCODESENDSENDSTART5.P165:例5.23设有一个首地址为 ARRAY的n字数组,试编制程序使该数组中的数按从小到大的次序排列。(和编程题第 4题相同)6.P175:例6.3主程序MAIN和过程PROADD在同一个源文件中,要求用国产PROADD累加数组中的所有元素,并把和送到指定的存储单元,程序如下:INCLUDEPRINT.ASMPROG_SEGSEGMENTORG100HASSUMECS:PROG_SEG,DS:PROG_SEG,SS:PROG_SEGMAINPROCNEARMOVAX,PROG_SEGMOVDS,AXMOVTABLE,OFFSETARYMOVTABLE+2,OFFSETCOUNTMOVTABLE+4,OFFSETSUMMOVBX,OFFSETTABLECALLPROADDLL:MOVCX,100MOVBX,OFFSETARYMOVAX,[BX]OUTDWAXINCBXINCBXLOOPLLMOVAX,4C00HINT21HMAINENDPNEARPROADDPROCPUSHAXPUSHCXPUSHSIPUSHDIMOVSI,[BX]MOVDI,[BX+2]MOVCX,[DI]9MOVDI,[BX+4]XORAX,AXNEXT:AX,[SI]ADDADDSI,2LOOPNEXTMOV[DI],AXPOPDIPOPSIPOPCXPOPAXRETENDPPROADDARYDW100DUP(1)COUNTDW100SUMDW?TABLEDW3DUP(?)PROG_SEG ENDSENDMAIN7.P180:例6.7将0-65535之间的任意一个十进制数(ASCII码形式)转换成十六进制数的子程序如下:DTHPROCFARPUSHFPUSHDIPUSHCXSUBDI,DIMOVCX,1ATBLOOP:MOVAL,[SI+BX]ANDAL,0FHSUBAH,AHMULCXADDDI,AXMOVAX,CXDECBXJNSATBLOOPMOVAX,DIPOPCXPOPDIPOPFRETDTHENDP8.P227:例9.9在屏幕中心显示小窗口(用 2号、6号功能调用)的程序如下:DATASSEGMENTESC_KEYEQU1BHWIN_ULCEQU30WIN_ULREQU8WIN_LRCEQU50WIN_LRREQU16WIN_WIDTHEQU20DATASENDSCODESSEGMENTASSUMECS:CODES,DS:DATASSTART:MOVAX,DATASMOVDS,AXMOVAH,2MOVDH,WIN_LRRMOVDL,WIN_ULCMOVBH,0INT10HMOVCX,WIN_WIDTHGET_CHAR:MOVAH,1INT21HCMPAL,ESC_KEYJZEXIT10LOOPGET_CHARMOVAH,6MOVAL,1MOVCH,WIN_ULRMOVCL,WIN_ULCMOVDH,WIN_LRRMOVDL,WIN_LRCMOVBH,7INT10HJMPSTARTEXIT:MOVAH,4CHINT21HCODESENDSENDSTART五、编程题( 30分)1.设计一个分支程序,实现下列公式计算。 X、Y为字型。假设X单元中保存三个数: 9,-6,34,分别作判断和计算。X2 X<0Y={ 2X+3 0≤X≤10X/6 X>102.编写一个程序,要求从键盘输入一串字符,如果是数字存入 NUMB单元,如果是字母,将大写字母存入CAPI单元,小写字母存入 LETT单元,分别统计个数,输入回车时退出。INCLUDEPRINT.ASMDATASSEGMENTNUMBDB20 DUP(?) ;存放数字CAPI DB20 DUP(?) ;存放大写字母LETT DB20 DUP(?) ;存放小写字母DATASENDSCODESSEGMENTASSUMECS:CODES,DS:DATASSTART:MOVAX,DATASMOVDS,AXMOVBP,0LET0:MOVAH,1INT21HCMPAL,0DHJZEXITTESTAL,40HJZLET1TESTAL,20HJZLET2MOVLETT[BX],ALINCBXJMPLET0LET2:CMPAL,5AHJAEXITMOVCAPI[SI],ALINCSIJMPLET0LET1:CMPAL,'0'JBEXITCMPAL,'9'JAEXIT11MOVNUMB[DI],ALINCDIJMPLET0EXIT:MOVDL,0AH;输出一个换行MOVAH,2INT21HOUTDWDI ;数字OUTDWBX ;小写字母OUTDWSI ;大写字母MOVAH,4CHINT21HCODESENDSENDSTART编写程序比较两个字符串BUNCH1和BUNCH2是否相同,相同输出Y,不相同输出N。DATASSEGMENTBUNCH1DB'STUDEnT'BUNCH2DB'STUDENT'DATASENDSCODESSEGMENTASSUMECS:CODES,DS:DATASSTART:MOVAX,DATASMOVDS,AXMOVES,AXLEASI,BUNCH1LEADI,BUNCH2CLDMOVCX,7L1:MOVAL,[SI]CMPAL,[DI]JNZLET1INCSIINCDILOOPL1MOVDL,'Y'JMPPRINTLET1:MOVDL,'N'PRINT:MOVAH,2HINT21HMOVAH,4CHINT21HCODESENDSENDSTART编写一个程序将字数组PART的值按升序排序。(数据个数和具体值自己设定)INCLUDEPRINT.ASMDATASSEGMENTPART DW45,23,52,37,78,2,94,17SIGN DW?DATASENDSCODESSEGMENTASSUMECS:CODES,DS:DATASSTART:MOVAX,DATASMOVDS,AXMOVCX,SIGN-ARR12SHRCX,1DECCXLOOP1:PUSHCXMOVBX,0LOOP2:MOVAX,PART[BX]CMPAX,PART[BX+2]JLENEXTXCHGAX,PART[BX+2]MOVPART[BX],AXNEXT:ADDBX,2LOOPLOOP2POPCXLOOPLOOP1PRINT:MOVCX,SIGN-PARTSHRCX,1DECCXMOVDI, OFFSETPARTLL:MOVAX,[DI]OUTDWAXADDDI,2LOOPLLMOVAH,4CHINT21HCODESENDSENDSTART编写一个子程序计算数组中正数和,并用主程序调用子程序的方法将数组ARRAY1和ARRAY2中的正数累加和分别放入TOTAL1和TOTAL2中。INCLUDEPRINT.ASMDATASSEGMENTARRAY1DW3,-2,5,8,7ARRAY2DW4,1, -5,6,2TOTAL1 DW?TOTAL2 DW?DW

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论