华南师范大学
计算机学院2004/2005学年(下)学期期末试卷
《汇编语言程序设计》试卷(A卷)
专业____________年级04级本班级_______姓名________学号_______
题号 | 一 | 二 | 三 | 四 | 五 | 六 | 总分 |
得分 |
(要求:前四题直接写在试卷上)
一、填空题:(每小题2分,共10分)
1.数-27的补码表示是__11100101____(8位),扩展到16位为__1111111111100101_。
2. 一个字5678H存到地址[1234H]单元中,则56H存放在1235H单元,78H存放在1234H单元。
3. 堆栈的栈顶由 堆栈指针 寄存器指出,非栈顶字由基址指针 寄存器指出。
4.编程用的操作数有 立即数 、寄存器操作数 、内存操作数 。
5.中断向量是 中断子程序的入口 ,中断向量表是计算机中断服务程序中的一个向量表,它纪录着全部的中断向量
二、改错题(每小题2分,共20分)
(在不改变原题意的前提下,在试卷上画出每小题的错误之处,并在右边予以改正。)
1. MOV CX,SEG DATA
MOV ES,CX
MOV DS,ESMOV DS,CX
2. B DW 100
MOV AL,BMOV AX,B
3. MOV DI,30H
MOV[DI],16H MOVWORD PTR [DI],16H
4. MOV AX,BX,
INAX,BX INAX,DX
5. ADDSI,BX ADDAL,BL
DAA
6. MOV DX,30
SUB [DX],CX SUB WORD PTR[DX],CX
7. PUSHALPUSH AX
8. MOVBX,16
MOVAL,256MOV AX,256
9. INCAX,1 INCAX
10. ADD 80H,AL ADDAL,80H
IN80H,ALIN AL,80H
三、阅读程序(根据题目要求写出结果每小题6分,共30分)
(可以给指令另加注释,也可以不加。)
1. 下面程序的功能是什么?
MOV AX,X
CMP AX,Y
JGE LAB
XCHG AX,Y
LAB:MOV X,AX
选择X,Y中的较大值存入X中
2.执行下列指令后AX、BX寄存器的内容?
MOV SI,10H
MOV AX,1234H
MOV [SI+12H],AX
LEA BX,[SI]
MOV [SI+14H],BX
LES BX,DWORD PTR [SI+12H]
AX为1234H,BX为22H
3.下面程序的功能是什么?
MOV CH,4
LAB:MOV CL,4
ROL BX,CL
MOV DL,BL
AND DL,0FH
ADD DL,30H
CMP DL,3AH
JL PRINT
ADD DL,7
PRINT:MOV AH,02
INT 21H
DEC CH
JNZ LAB
显示输出BX寄存器里的内容
4.下面程序的功能是什么?
STRING DB 100 DUP(?)
MOV AX,SEGSTRING
MOV DS,AX
LEA SI,STRING
MOV CX,100
LAB: MOV AL,[SI]
CMP AL,’a’
JB LAB1
CMPAL,’z’
JA LAB1
SUBAL,32
MOV[SI],A
LAB1: INC SI
LOOPLAB
将STRING里的小写字母’a’-‘z’转成相应的大写字母’A’-‘Z’
5.下面程序的功能是什么?
MOV AX,SEG STRING
MOV DS,AX
LEA DX,STRING
MOV AH,0AH
INT 21H
XOR BX,BX
MOV CX,BX
MOV CL,STRING[1]
LEA SI,STRING[2]
MOV AL,’A’
LAB:CMP AL,[SI]
JNZ LAB1
INC BX
LAB1:INC SI
LOOP LAB
用BX记录输入缓冲区中有多少个字符‘A’
四、问答题(共10分)
1.简述上机运行汇编语言程序的过程。(6分)
答:首先打开未来汇编,新建一个空的汇编文件,后缀为.asm,然后输入汇编程序代码,保存,再编译成机器指令,然后连接成可执行文件,即exe文件,最后再运行。
2. 简述程序中指令和伪指令的区别。(4分)
能被计算机识别并执行的二进制代码,它规定了计算机能完成的某一操作。
伪指令是对汇编起某种控制作用的特殊命令,其格式与通常的操作指令一样,并可加在汇编程序的任何地方,但它们并不产生机器指令。
五、程序设计题(每小题15分,共30分)
1.编制完整程序实现下列算式:W=X+Y+36-Z。设X、Y、Z、W均为双字长数据,各自的低十六位数和高十六位数分别存放在X、X+2、Y、Y+2、Z、Z+2的存储单元中,结果的低十六位字和高十六位字分别存放在W和W+2两个单元中。
DATA SEGMENT
X DD …
Y DD …
Z DD …
W DD …
DATA ENDS
CODE SEGMENT
ASSUMECS:CODE,DS:DATA
START:MOV AX,DATA
MOV DS,AX
MOV AX,X
ADD AX,Y
MOV BX,X+2
ADC BX,Y+2
ADD AX,36
ADC BX,0
SUB AX,Z
SBB BX,Z+2
MOV W,AX
MOV W+2,BX
CODE ENDS
END START
2.编制程序段实现:将AX寄存器中的16位二进制数分成四组,每组4位,然后把这4组数分别放在AL、BL、CL、和DL中。
MOV BH,AL
MOV CH,AH
MOV AL,AH
AND AL,0F0H
MOV BL,AH
AND BL,0FH
MOV CL,BH
AND CL,0F0H
MOV DL,BH
AND DL,0FH
六、附加题(10分,不计入总分,仅作参考)
在附加数据段中有一首址为ADDR的没有排序的字数组,数据的第一个字为数组长度,第二个字开始存放数组各元素,在KEY单元存放一个要删除的字数据。要求编写一完整程序,在数组中查找该数,如果找到该数(可能有多个),将其从数组中删除,并修改数组的长度。