资源描述
; 课程编号: H61030005 课程名称: 汇编语言程序设计 考试形式: 闭卷 学院: 信息工程 专业: 计算机科学与技术 考试日期: 题号一二三四五六七八九十总分累分人 签名题分2012182030 100得分考生注意事项:1、本试卷共7 页,请查看试卷中是否有缺页或破损。如有立即举手报告以便更换。 2、考试结束后,考生不得将试卷、答题纸和草稿纸带出考场。一、单项选择题(每小题 2 分,共 20分) 1一个有128个字的数据区,它的起始地址为12ABH:00ABH,请给出这个数据区第一个字单元的物理地址是( A )。A12B5BH ; B12B6BH ;C12C59H; D12BFEH。2在下列指令的中,不能实现把AX寄存器内容清零的指令是( C )。A SUB AX,AX;BXOR AX,AX;COR AX,0000H;DAND AX,0000H。3条件转移指令JNE的测试条件为( A )。AZF=0 ; BCF0 ;CZF=1 ; DCF=1 。48086CPU在基址加变址的寻址方式中,变址寄存器可以为(D )。ABX或CX ; BCX或SI ;CDX或SI ; DSI或DI。5设(AX)=1000H,NEG AX NOT AX【汇编语言程序设计】期末考试-试卷及参考答案执行上述两条指令后,正确的结果是( B )。A(AX)=1001H; B(AX)=0FFFH;C(AX)=1000H; D(AX)=0111H。6串指令中的目的操作数地址一定是由_A_ _提供。( )AES:DI ; BSS:BP;CDS:SI ; DCS:IP。7将DX的内容除以2,正确的指令是( C )。ADIV 2 ;BDIV DX,2 ;CSAR DX,1;DSHL DX,1。8. 用户为了解决自己的问题,用汇编语言所编写的程序,称为( B )。 A目标程序; B汇编语言源程序; C可执行程序; D汇编程序。9用一条指令仅实现将AXBX+SI的方法是( D )。A XCHG AX,BXSI ;B MOV AX,BX+SI;CLEA AX,BXSI ;DLEA AX,BXSI。10设SP初值为2000H,执行指令“PUSH AX”后,SP的值是( C )。 A1FFFH; B1998H;C1FFEH; D2002H。1.A 2. C 3.A 4.D 5.B 6.A 7.C 8.B 9.D 10.C二、指出下列指令的出错原因,并改正。(每小题2分,共12分)1 MOV BX,DL;操作数类型不匹配,改正为:MOV BL,DL 或MOV BX,DX 2 MOV CS,AX;代码段寄存器CS不能作目的操作数,改正为MOV DS,AX3 ADD AX,DS;段寄存器DS的内容不能作为加法指令的操作数,改正为MOV BX,DSADD AX,BX 4 TEST BX,CX;不能使用CX实现寄存器间接寻址,改正为MOV SI,CXTEST BX,SI 5 SUB BX,BP+SI;两个操作数不能同为存储器操作数,且两个操作数的数据类型 不确定,改正为:MOV AX,BXSUB AX,BP+SI或:MOV AL,BXSUB AL,BP+SI 6SHL DX ;没有给出移位次数,改正为SHL DX,1或 SHL DX,CL三、程序填空题(注意:每空只能填一条指令,并注释说明所填指令的作用!每空3分,共18分)1 在表TABLE处存放着N个无符号字节数,求表中前10个字节数的总和并保存在AX寄存器中。如果总和值超过AX寄存器的容量,则置AX寄存器内容不变。请在程序中的空格处填入适当指令使其完整。LEA BX,TABLEMOV CX,10MOV SUM,AX ;将AX的原值保存在SUM单元中 MOV AL,00HMEXT:(1)ADD AL,BX ; 实现将表TABLE中的数据按字节累加到AL中 ADC AH,0JNC DONE(2)MOVAX,SUM ; 总和值超过AX寄存器的容量,恢复AX的原值 JC EXITDONE:INCBX (3)LOOP NEXT ; 将计数器CX减1,并判断是否继续下一次循环 EXIT:HLT2 BUFFER为起始地址的存储区域中存放有100个字节数据,现将其首、尾颠倒过来,重新排放这100个字节数据。请在程序中的空格处填入适当的指令使其完整。MOV CX,32H ;循环50次LEA SI,BUFFERMOV DI,SI(1) ADD DI,99 ;DI指向最后一个字节数据的存储单元的偏移地址 NEXT:MOV AL,SI (2) XCHG AL,DI;交换SI和DI所指向单元的内容 MOV SI,AL(3) INC SI ;使指针SI加1,指向下一个字节的数据 DEC DILOOPNEXTHLT四、程序分析题(每小题4分,共20分)1 设(AX)= X,X是无符号数且0X-32768),并存放在M_average单元中。(本小题10分)data SEGMENT Buffer DW XXXX,XXXX,XXXX;N个字 count EQU ($-Buffer)/2 M_average dw ? data ENDS code SEGMENT ASSUME cs:code,da:datacwd idiv bxmov M_average,ax;存负数的平均值mov ah,4ch int 21hdata ends end start start: mov ax,data mov ds,ax mov cx,count lea si, Buffer xor ax,ax ;存负数的和 mov bx,ax ;存负数的个数next: test word ptr si,8000H je go_onadd ax,siinc bx go_on: add si,2 loop next 3从键盘接收一串不多于99个字符的字符串,对其进行分类统计,显示其中数字字符个数、大写英文字母个数、小写英文字母个数、以及其他字符的个数。要求使用子程序结构;数字字符的ASCII码为30H39H、大写英文字母的ASCII码为41H5AH、小写英文字母的ASCII码为61H7AH。(本小题12分)data SEGMENT MSG DB 0DH,0AH,输入一串字符:$MSG1 DB 0DH,0AH,大写字母个数:$MSG2 DB 0DH,0AH,小写字母个数:$MSG3 DB 0DH,0AH,数字符号个数:$MSG4 DB 0DH,0AH,其它符号个数:$BUFFER DB 99 DB 0DB 99 DUP(?)BIG DB 0 ;大写字母个数LITTLE DB 0 ;小写字母个数DIG DB 0 ;数字符号个数OTHER DB 0 ;其它符号个数 data ENDS code SEGMENT ASSUME cs:code,da:datastart: mov ax,data mov ds,ax lea dx,MSGmov ah,9 ;9号功能调用显示提示信息int 21hlea dx,BUFFERmov ah,10 ;10号功能调用从键盘接收一串字符int 21h mov cl,BUFFER+1;实际从键盘接收字符个数mov ch,0lea si,BUFFER+2again: cmp byte ptr si,30H jb otherscmp byte ptr si,39Hjbe digitalscmp byte ptr si,41Hjb otherscmp byte ptr si,5AHjbe bigscmp byte ptr si,61Hjb others cmp byte ptr si,7AHjbe littlesothers: inc OTHER jmp okdigitals:inc DIG jmp oklittles: inc LITTLE jmp okbigs: inc BIGok: inc siloop again lea dx,MSG1mov bh,BIGcall dispdeclea dx, MSG2mov bh,LITTLEcall dispdec lea dx, MSG3mov bh,DIGcall dispdec lea dx, MSG4mov bh, OTHERcall dispdec mov ah,4ch int 21h;DX待显示数据说明,BH待显示数据100 dispdec PROC mov ah,9 int 21h mov al,bh xor ah,ah aam mov dl,ah mov dh,al add dl,30H mov ah,2 int 21H mov dl,dhadd dl,30H mov ah,2 int 21H retdispdec ENDPcode ENDS end start.
展开阅读全文