资源描述
课程编号: H61030005 课程名称: 汇编语言程序设计 考试形式: 闭卷
学院: 信息工程 专业: 计算机科学与技术 考试日期:
题号
一
二
三
四
五
六
七
八
九
十
总分
累分人 签名
题分
20
12
18
20
30
100
得分
考生注意事项:1、本试卷共7 页,请查瞧试卷中就是否有缺页或破损。如有立即举手报告以便更换。
2、考试结束后,考生不得将试卷、答题纸与草稿纸带出考场。
一、单项选择题(每小题 2 分,共 20分)
1。一个有128个字得数据区,它得起始地址为12ABH:00ABH,请给出这个数据区第一个字单元得物理地址就是( A )。
A。12B5BH ; B。12B6BH ;
C.12C59H; D.12BFEH。
2.在下列指令得中,不能实现把AX寄存器内容清零得指令就是( C )。
A. SUB AX,AX;
B.XOR AX,AX;
C.OR AX,0000H;
D.AND AX,0000H。
3。条件转移指令JNE得测试条件为 ( A ).
A。ZF=0 ; B.CF=0 ;
C.ZF=1 ; D。CF=1 。
4。8086CPU在基址加变址得寻址方式中,变址寄存器可以为(D )。
A。BX或CX ; B.CX或SI ;
C.DX或SI ; D。SI或DI。
5.设(AX)=1000H,
NEG AX
NOT AX
【汇编语言程序设计】期末考试—试卷及参考答案
执行上述两条指令后,正确得结果就是( B )。
A.(AX)=1001H; B.(AX)=0FFFH;
C。(AX)=1000H; D.(AX)=0111H。
6。串指令中得目得操作数地址一定就是由____A_ _提供。( )
A。ES:[DI] ; B。SS:[BP];
C.DS:[SI] ; D.CS:[IP]。
7.将DX得内容除以2,正确得指令就是( C ).
A.DIV 2 ;
B.DIV DX,2 ;
C.SAR DX,1;
D。SHL DX,1。
8、 用户为了解决自己得问题,用汇编语言所编写得程序,称为( B )。
A。目标程序; B。汇编语言源程序;
C.可执行程序; D。汇编程序。
9.用一条指令仅实现将AX←BX+SI得方法就是( D ).
A. XCHG AX,[BX][SI] ;
B. MOV AX,[BX+SI];
C.LEA AX,BX[SI] ;
D.LEA AX,[BX][SI].
10.设SP初值为2000H,执行指令“PUSH AX”后,SP得值就是( C )。
A.1FFFH; B。1998H;
C。1FFEH; D.2002H。
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,AX
3. ADD AX,DS;段寄存器DS得内容不能作为加法指令得操作数,改正为
MOV BX,DS
ADD AX,BX
4. TEST BX,[CX];不能使用CX实现寄存器间接寻址,改正为
MOV SI,CX
TEST BX,[SI]
5. SUB [BX],[BP+SI];两个操作数不能同为存储器操作数,且两个操作数得数据类型 不确定,改正为:MOV AX,[BX]
SUB AX,[BP+SI]
或:MOV AL,[BX]
SUB AL,[BP+SI]
6。SHL DX ;没有给出移位次数,改正为SHL DX,1或 SHL DX,CL
三、程序填空题(注意:每空只能填一条指令,并注释说明所填指令得作用!每空3分,共18分)
1. 在表TABLE处存放着N个无符号字节数,求表中前10个字节数得总与并保存在AX寄存器中。如果总与值超过AX寄存器得容量,则置AX寄存器内容不变。请在程序中得空格处填入适当指令使其完整。
LEA BX,TABLE
MOV CX,10
MOV SUM,AX ;将AX得原值保存在SUM单元中
MOV AL,00H
MEXT:(1)ADD AL,[BX] ; 实现将表TABLE中得数据按字节累加到AL中
ADC AH,0
JNC DONE
(2)MOV AX,SUM ; 总与值超过AX寄存器得容量,恢复AX得原值
JC EXIT
DONE:INC BX
(3)LOOP NEXT ; 将计数器CX减1,并判断就是否继续下一次循环
EXIT:HLT
2. BUFFER为起始地址得存储区域中存放有100个字节数据,现将其首、尾颠倒过来,重新排放这100个字节数据。请在程序中得空格处填入适当得指令使其完整。
MOV CX,32H ;循环50次
LEA SI,BUFFER
MOV 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 DI
LOOP NEXT
HLT
四、程序分析题(每小题4分,共20分)
1. 设(AX)= X,X就是无符号数且0≤X〈 6000,分析下面程序段,回答问题;
SHL AX,1 ;实现X乘2
MOV BX,AX
SHL AX,1
SHL AX,1
ADD AX,BX
(1) 该程序段得功能就是什么?
实现无符号数X乘10,结果存放在AX寄存器中. ——2分
(2) 该程序段执行完后,(AX)= 10X ,(BX)= 2X 。-—2分
2. 现有一子程序段:
SUB1 PROC
TEST AL,80H
JE PLUS
TEST BL,80H
JNE EXITO
JMP XCHANGE
PLUS: TEST BL,80H
JE EXITO
XCHANGE:XCHG AL,BL
EXITO: RET
SUB1 ENDP
试回答:(1)子程序得功能就是什么?
答:子程序得功能就是判别AL与BL中得数就是否为异号数,当为异号时交换,否则不变.
(2)若调用子程序前(AL)=9AH,(BL)=77H,则返回主程序时,(AL)=__77H____,(BL)=_9AH__。
请回答:
(1) 该程序段占有得存储单元字节数就是多少?画出所分配得存储区得示意图、
答:8个字节,
0020H 12H DA1
00H
23H
00
0024H 11H DA2
21H
0025H 31H DA3
32H
(2) 符号名DA4得值就是多少?符号名DA5得值就是多少?
答:DA4=2,DA5=1234H
3. 现有如下程序段:
DATA SEGMENT
ORG 0020H
DA1 DW 12H,23H
DA2 DB 11H,21H
DA3 DB 31H,32H
DA4 EQU $-DA3
DA5 EQU 1234H
DATA ENDS
4. 阅读如下程序:
ADRR DB XXH,XXH,……,XXH;定义得字节数组元素
NUM EQU $-ADRR
RET_VLAUE DW ?
…
MOV CX,NUM
MOV BX,—1
NEXT: INC BX
CMP ADRR[BX],0
LOOPNZ NEXT
JZ DONE
MOV BX,OFFH
DONE: MOV RET_VLAUE,BX
HLT
请问:(1)该程序完成得功能就是什么?
功能:在以ADRR为起始地址得数组中,查找第一个就是0得数据.
(2)程序执行后指出RET_VLAUE单元中得内容就是什么?
若找到,则将第一个就是0得数据在数组中得偏移量送入RET_VLAUE单元中;若无0数据,则将0FFH送入RET_VLAUE单元中.
5. 阅读如下程序段,回答所提出得问题,假定X1,X2,…,XN为无符号数。
ORG 100H
BLOCK DW X1,X2,…,XN
COUNT EQU ($-BLOCK)/2
RESULT DW COUNT,?
LEA BX,BLOCK—2
MOV CX,RESULT
XOR AX,AX
GO_ON:ADD BX,2
CMP AX,[BX]
JAE NEXT
MOV AX,[BX]
NEXT: LOOP GO_ON
MOV RESULT+2,AX
程序段执行完,回答下述问题:
RESULT+2字存储单元得内容= MAX(X1,X2,…,XN ) ;
BX = 100H + 2×(COUNT-1) ;
程序循环次数 = COUNT 。
五、编写程序(30分)
得分
评阅人
1。编写一程序,在letter为首地址得26个单元中依此存放字母‘A’、‘B’、……‘Z’。(本小题8分)
data SEGMENT
letter DB 26 DUP(?)
count EQU $-letter
data ENDS
code SEGMENT
ASSUME cs:code,da:data
start: mov ax,data
mov ds,ax
mov cx,count
lea si,letter
mov al,‘A’
next: mov [si],al
inc al
inc si
loop next
mov ah,4ch
int 21h
code ends
end start
2.以Buffer为首地址得存储区,存放有长度为N有符号字数组,编写一程序求出其中负数得平均值(所有负数得与>-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:data
cwd
idiv bx
mov M_average,ax
;存负数得平均值
mov ah,4ch
int 21h
data 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_on
add ax,[si]
inc bx
go_on: add si,2
loop next
3.从键盘接收一串不多于99个字符得字符串,对其进行分类统计,显示其中数字字符个数、大写英文字母个数、小写英文字母个数、以及其她字符得个数。要求使用子程序结构;数字字符得ASCII码为30H……39H、大写英文字母得ASCII码为41H……5AH、小写英文字母得ASCII码为61H……7AH.(本小题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 0
DB 99 DUP(?)
BIG DB 0 ;大写字母个数
LITTLE DB 0 ;小写字母个数
DIG DB 0 ;数字符号个数
OTHER DB 0 ;其它符号个数
data ENDS
code SEGMENT
ASSUME cs:code,da:data
start: mov ax,data
mov ds,ax
lea dx,MSG
mov ah,9 ;9号功能调用显示提示信息
int 21h
lea dx,BUFFER
mov ah,10 ;10号功能调用从键盘接收一串字符
int 21h
mov cl,BUFFER+1;实际从键盘接收字符个数
mov ch,0
lea si,BUFFER+2
again: cmp byte ptr [si],30H
jb others
cmp byte ptr [si],39H
jbe digitals
cmp byte ptr [si],41H
jb others
cmp byte ptr [si],5AH
jbe bigs
cmp byte ptr [si],61H
jb others
cmp byte ptr [si],7AH
jbe littles
others: inc OTHER
jmp ok
digitals:inc DIG
jmp ok
littles: inc LITTLE
jmp ok
bigs: inc BIG
ok: inc si
loop again
lea dx,MSG1
mov bh,BIG
call dispdec
lea dx, MSG2
mov bh,LITTLE
call dispdec
lea dx, MSG3
mov bh,DIG
call dispdec
lea dx, MSG4
mov bh, OTHER
call 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,dh
add dl,30H
mov ah,2
int 21H
ret
dispdec ENDP
code ENDS
end start
展开阅读全文