华中科技大学汇编语言程序设计试卷.doc
《华中科技大学汇编语言程序设计试卷.doc》由会员分享,可在线阅读,更多相关《华中科技大学汇编语言程序设计试卷.doc(10页珍藏版)》请在冰豆网上搜索。
华中科技大学计算机科学与技术二学位
《80X86汇编语言程序设计》试卷样例
考试时间:
2011年7月2日(第19周周六)下午14:
30-17:
00
考试地点:
西十二教学楼(S402-0904,S403-0905,S404-0906)
班级学号姓名
题号
一
二
三
四
五
六
七
八
总分
核对人
题分
10
10
10
10
10
10
10
20
100
得分
得分
评卷人
一、单项选择填空:
(共10分,每小题1分)
(1)指令“MOVAX,ES:
[BP]”中的源操作数在当前_________中。
(B)
A.数据段 B.附加数据段 C.堆栈段 D.代码段
(2)将AL中的无符号数压入堆栈,下面的方法不正确的是_________。
(A)
(A)CBW
PUSHAX
(B)MOVAH,0
PUSHAX
(C)MOVZXAX,AL
PUSHAX
(D)XORAH,AH
PUSHAX
(3)只有寄存器_________能作基址和变址寄存器。
(C)
(A)AX、BX、CX、DX
(B)SI、DI、BP、SP
(C)BX、SI、DI、BP
(D)AX、CX、SI、DI
(4)两负数相加,结果为正,则标志位_________均为1.(D)
(A)ZF、SF、CF、DF
(B)ZF、CF、DF
(C)SF、CF、OF
(D)CF、OF
(5)指令"ADD[BX],2"的错误原因为________.(B)
(A)源操作数和目的操作数不能同时为存贮器操作数.
(B)两个操作数类型模糊
(C)源操作数不能为立即方式
(D)BX不能用于寄存器间接方式
(6)已知源操作数在堆栈段,语句“MOVAX,[BP+BX]存在语法错误,现改正为以下四种形式,但只有________是正确的。
(C)
(A)MOVAX,SS:
[BP+BX]
(B)MOVWORDPTR[DI],[BP]
(C)MOVAX,SS:
[BX+SI](当基址寄存器BR=BX时,系统默认操作数在DS中)
(D)MOVAX,[BX+DI](当基址寄存器BR=BP时,系统默认操作数在SS中)
(7)设VAR为字变量,A为符号常量,下面四个语句中有一个错误的,这个错误语句是________.(C)
(A)MOVVAR,A(B)MOVAX,VAR
(C)MOVA,AX(D)MOVAX,A
(8)在使用除法指令作字除法时,被除数应放在寄存器________中。
(C)
(A)BX和AX
(B)CX和AX
(C)DX和AX
(D)AX
(9)在下列数据段中,(A+2)和TT的值各为________。
(B)
DATASEGMENT
ADW10,20,30
TT=$-A
BDB2DUP(0)
DATAENDS
(A)30,6(B)20,6
(C)30,3(D)20,3
(10)已知(AX)=a,(BX)=b,a、b均为无符号数,请选择合适的转移指令,使得(AX)>(BX)
时转L处执行。
(A)
CMPAX,BX
_______L
(A)JA(B)JB
(C)JG(D)JL
得分
评卷人
二、填空:
(共10分,每空1分)
(1)若(AX)=1234H,则(AL)=34H。
(2)在语句INCBYTEPTR[BP]中,操作数使用的段寄存器是SS。
(3)举出一个目的操作数使用变址寻址方式的指令语句例子MOV2[SI],AX。
(4)写出一条指令语句,其中一个操作数必须是CS寄存器MOVAX,CS。
(5)地址表达式中出现的变量或标号,均是取它们的偏移地址(或EA)参加运算。
(6)CPU中IP(或EIP、指令指示器)寄存器的内容会被平时作业编写的程序中的任何一条指令所修改。
(7)列出4种能修改SP寄存器内容的指令PUSHPOPPUSHAPOPA。
(还有PUSHAD、POPAD、PUSHF、POPF、PUSHFD、POPFD、CALL、RET等,写MOV的话要写完全,如MOVSP,AX)
得分
评卷人
三、改错,不必说明错误原因:
(共10分,每题1分)
(1)MOVDX,[DX] -> MOVDX,[BX]
(2)ANDBL,CX -> ANDBX,CX
(3)ADDAX,IP -> ADDAX,BP
(4)CMP[EBX],0 -> CMPBYTEPTR[EBX],0
(5)MOV[BX+BP+5],AX -> MOV[BX+SI+5],AX
(6)PUSHCH -> PUSHCX
(7)INAL,100H -> INAL,10H
(8)ADD10,SP -> ADDSP,10
(9)MOV[EAX],BYTEPTR[SI] ->MOVAL,[SI]MOV[EAX],AL
(10)MOVAX,(BX) -> MOVAX,[BX]
得分
评卷人
四、简答:
(共10分)
(1)下列程序段的功能是什么?
(3分)
B:
CMPAX,0
JGEEXIT
NEGAX
EXIT:
……
求(AX)的绝对值→AX
(2)简单叙述CBW语句和MOVSX语句的相同点和不同点?
(4分)
相同点:
对位数较少(或低精度)的有符号数进行符号扩展,变成位数较多(或高精度)的有符号数。
不同点:
CBW指令不带操作数,隐含操作数在AL和AH中,即将AL中的符号扩展到AH中。
MOVSX是双操作数指令,OPD必须是16位或32位寄存器,且位数大于源操作数,源操作数不能是立即数。
(3)简述“REPNZSCASB”语句的功能。
(3分)
根据方向标志位所指定的方向,CX所指定的串的长度,逐一搜索DS:
[SI]所指向的串的每一个字节,直到找到等于(AL)的字节,或是串搜索完为止。
如果搜索到,设置ZF=1,否则ZF=0。
得分
评卷人
五、程序填空:
(共10分,每空2分)
(1)以下程序段的功能为:
统计BUF中所含字符‘A’的个数→BL,请在程序空白处填入空缺的代码。
┇
BUFDB‘ABC589TREAUBAATT’
CEQU$-BUF(写17也算对)
┇
LEASI,BUF
MOVCX,C
MOVBL,0
P:
CMPBYTEPTR[SI],‘A’
JNELOP
INCBL
LOP:
INCSI
LOOPP
(2)以下程序段的功能为:
计算无符号数A1÷B1,商放入C1,余数放入D1
┇
A1DW0F252H
B1DW20H
C1DW?
D1DW?
┇
MOVAX,A1
MOVDX,0
DIVB1
MOVC1,AX
MOVD1,DX
得分
评卷人
六、数据段定义如下,按要求回答问题。
(10分)
DATASEGMENTUSE16
BUFADB0dH,0aH,‘$’,0
ADW25,-1,BUFB
AlenEQU$-A
BUFBDB‘BUFB’,2DUP(Alen,2DUP(77H))
BDW $-A,3
DATAENDS
1、以字节为单位画出它们在存储单元中的存放形式,在图中标明各变量的起始位置。
(7分)
BUFA
0DH
0AH
‘$’
0H
A
19H
0H
0FFH
0FFH
0AH
0H
BUFB
‘B’
‘U’
‘F’
‘B’
6H
77H
77H
6H
77H
77H
B
10H
0H
3H
0H
2、执行下列语句后,AL,BX,CX寄存器的值是多少(3分)
MOVAL,BUFA+1
LEABX,BUFA+2
MOVCX,Alen
(AL)=0AH(BX)=02H(CX)=06H
得分
评卷人
七、编写程序段(不要求完整程序):
(10分)
(1)已知数据段中有语句“XYDD25637”,请写出实现(XY)*88/12+10→ESI的程序段(注:
不考虑溢出)(6分)
MOVEAX,XY
MOVEBX,88
IMULEBX ;EAX*EBX=>EDX:
EAX
MOVEBX,12
IDIVEBX ;EDX:
EAX/EBX=EAX(商)
ADDEAX,10
MOVESI,EAX
(2)使用两种方法实现交换AH与AL中的内容(4分)
XCHGAH,ALMOVBH,AL
MOVAL,AH
MOVAH,BH
得分
评卷人
八、编写程序(20分)
设在以BUF为首址的字存储区中连续存储了多个有符号数(数据个数由编程者自己设定),试编写一完整的程序,按照下面的格式将其打印出来,数字之间以空格作为分隔:
非负数:
XXXXH,例如10H打印为0010H
负数:
-XXXXH,例如0C898H打印为-3768H。
要求:
设计一个子程序PRINT、以上面指定的格式显示有符号数,参数传递采用自定的寄存器。
画出主程序和子程序的流程图
含不少于4条重要注释的完整程序清单。
DATASEGMENTUSE16
BUFDW1,-10H,2000H,0,30H,-50H,0FFFFH
NUM