2012年华中科技大学本科汇编试卷 - A卷 - 答案

更新时间:2023-11-16 17:25:01 阅读量: 教育文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

计算机学院2011-2012学年第二学期《汇编语言程序设计》考试草稿纸

计算机学院2011-2012学年第二学期

《汇编语言程序设计》考试试卷(A卷)及参考答案

闭卷 考试时间: 2012年5月5日

专业 班级 学号 学生姓名 题号 一 二 三 四 五 六 七 八 总分 核对人 10 10 10 10 20 10 10 20 100 题分 得分 得 分 评卷人

一、改错。(每个小题中只能对一个操作数进行修改。共10分,每小题1分)

;XOR AX, [BX]

;CMP WORD PTR [EDX], 80H ;JMP WORD PTR [BX] ;SUB AX, BP ;MOV CX, 1234H ;PUSH AX

;MOV DX, 255H / IN AL, DX ;SUB BP, 125 ;ADD DI, [EAX] ;MOV AX, CS

1.XOR AX, [CX] 2. CMP [EDX], 80H

3. JMP WORD PTR [BL] 4.SUB EAX, BP 5.MOV CL, 1234H 6. PUSH AL

7. IN AL, 255H 8. SUB 125, BP

9. ADD [DI], DWORD PTR [EAX] 10. MOV CS, AX 得 分 评卷人

二、填空 (共10分,每空1分)

1. 设(CS)=1000H,(DS)=2000H,(SS)=3000H,(DI)=0300H, (IP)=0100H,(20300H)=50H,(20301H)=01H,(20302H)=00H,(20303H)=50H。 实方式下, 指令“ JMP WORD PTR [DI] ”转向

的物理地址是 10150H ,它是一条 段内 转移指令。

2. 依次执行

XOR EAX, EAX DEC AL DEC AL

MOVSX EAX, AL ; 将(AL)的最高位扩展并送入目的操作数地址中

计算机学院2011-2012学年第二学期《汇编语言程序设计》考试草稿纸

ADD EAX, 3

执行完后, (AX)= 0001H CF = 1 ZF = 0 SF = 0

3. 下列指令序列执行前, (EAX)=0FFFFA015H,(EBX)=1000H。执行下列指令序列

XOR EDX,EDX IDIV EBX IMUL BX

则执行后:

(EDX)= 0000FFFFH , (EAX)= 000FA000H , 对于上述最后一条乘指令,如果乘积的高位不是低位的符号扩展,则CF=1、OF= 1 ,而SF、ZF、AF和PF标志位 未定义 。

三、简答题(共10分)

1. 简述实方式下新增一个中断处理程序的主要步骤。(4分)

得 分 评卷人 (1) 编制新的中断处理程序。

(2) 获取中断号m。若是硬件中断则有相应的中断号,否则查找一个空闲的中断号。 (3) 将新的中断处理程序装入内存或驻留内存,将新的中断处理程序的偏移地址和段地址保存到物理地址4*m和4*m+2处。

2. 设有 (AX)=1000H,执行下列子程序:

TRY PROC NEAR PUSH AX RET TRY ENDP

请画出上述每条指令执行后堆栈示意图,并指出执行该子程序后 IP中的内容为多少?(3分)

00H 10H XXXX XXXX PUSH AX

(SP) (SP)+1

XXXX XXXX

(SP) (SP)+1

RET, 子程序返回后(IP)=1000H

计算机学院2011-2012学年第二学期《汇编语言程序设计》考试草稿纸

3. 基于窗口的应用程序中,窗口消息处理程序主要完成什么功能?(3分)

Windows系统中,每个基于窗口的应用程序都有消息处理程序。窗口主程序不断地从该应用程序的消息队列中检测消息,若检测到消息,则通知操作系统调用该窗口的消息处理程序去处理该消息。

得 分 评卷人

四、数据段定义如下,按要求回答问题。(共10分)

BUFA A BUFB

0DH 0AH 25 00 06H 00H ‘B’ ‘U’ ‘F’ ‘B’ ‘$’ ‘$’ 偏移地址 00H 01H 02H 03H 04H 05H 06H 07H 08H 09H 0AH 0BH

DATA SEGMENT USE16 BUFA DB 0DH,0AH A DW 25, BUFB Alen EQU $ - A

BUFB DB ‘BUFB’,2 DUP (‘$’) DATA ENDS

1、 以字节为单位画出它们在存储单元中的存放形式, 在图中标明各变量的偏移地址值。(6分)

2、Alen的值是多少?(1分)

Alen = 6

3、执行下列语句后,屏幕上会显示什么?(3分)

MOV AX,DATA

MOV DS,AX MOV DX,[A+2] MOV AH, 9 INT 21H

显示:BUFB

得 分 评卷人

五、程序填空(共20分,每空2分)

1. 下列程序输入两个串, 比较两个串是否相同, 相同则显示”equal”, 否则显示”not equal”。 .386

计算机学院2011-2012学年第二学期《汇编语言程序设计》考试草稿纸

IO MACRO A, B LEA DX, B MOV AH, A INT 21H ENDM DATA SEGMENT USE16 STR3 DB 'EQUAL!', 0DH, 0AH,'$' STR4 DB 'NOT EQUAL!', 0DH, 0AH,'$' BUF1 DB 80,0,80 DUP(0) BUF2 DB 80,0,80 DUP(0) DATA ENDS CODE SEGMENT USE16 ASSUME CS: CODE, DS: DATA START: MOV AX, DATA

MOV DS, AX

IO 10,BUF1 IO 10,BUF2

MOV AL, BUF1+1 MOV AH, BUF2+1 CMP AL, AH JNE NOTEQUAL LEA SI, BUF1+2 LEA DI, BUF2+2 MOVZX CX, AL AGAIN: MOV AL,[SI] CMP AL,[DI] JNE NOTEQUAL INC SI INC DI LOOP AGAIN IO 9, STR3 QUIT: MOV AH, 4CH INT 21H NOTEQUAL:

IO 9, STR4

JMP QUIT CODE ENDS END START

计算机学院2011-2012学年第二学期《汇编语言程序设计》考试草稿纸

2. 下列子程序F2T10将EAX中的有符号数以十进制形式在显示器上输出。

;调用子程序名:RADIX .386

DATA SEGMENT USE16

BUF DB 12 DUP(?) DATA ENDS ... F2T10 PROC

PUSH EBX

PUSH SI LEA SI,BUF B: OR EAX, EAX JNS PLUS

NEG EAX

MOV BYTE PTR [SI],’-’ INC SI

PLUS: MOV EBX, 10 CALL RADIX

MOV BYTE PTR [SI],’$’ LEA DX, BUF MOV AH, 9 INT 21H POP SI

POP EBX RET F2T10 ENDP

RADIX PROC

; 入口参数:EAX——存放待转换的32位无符号二进制数 ; EBX——存放要转换数制的基数

; SI——存放转换后的指定进制数的ASCII码数字串的字节缓冲区首址 ;输出参数: SI——指向字节缓冲区中最后一个ASCII码的下一个字节处

... RADIX ENDP

计算机学院2011-2012学年第二学期《汇编语言程序设计》考试草稿纸

3.下列程序实现32位二进制数相加,并显示。

.MODEL SMALL

MOV DL, BL .386 .STACK AND DL, 0FH .DATA OR DL, 30H BUF DB ‘12345678H+10000011H=’,’$’ CMP DL, 3AH .CODE JB LOPB .STARTUP ADD DL, 7 MOV DX, OFFSET BUF LOPB: MOV AH, 2 MOV AH, 9 INT 21H INT 21H LOOP LOPA MOV EBX, 12345678H MOV AH, 2 ADD EBX, 10000011H MOV DL,‘H’ MOV CX, 8

LOPA: ROL EBX, 4

(接右边程序) 得 分 评卷人 INT 21H .EXIT END

六、编写程序段(共10分)

1. 设有下述数据定义:

BUF1 DB ‘BADCEFHGIJKLMNOPQRSTUVWXYZ’ BUF2 DB 30 DUP(0)

试编写程序段将BUF1中的串从右向左传送到以BUF2为首址的存储区中 ; ACM班实现的程序中使用的寄存器数不超过2个。(4分)

LEA SI, BUF2 - 1 LEA DI, BUF2 MOV CX, BUF2 – BUF1 L1: MOV AL, [SI]

MOV [DI], AL DEC SI INC DI LOOP L1

计算机学院2011-2012学年第二学期《汇编语言程序设计》考试草稿纸

2.已知BUF DW 22, 789, -234。请分别用下面指定的寻址方式将BUF的最后一个字送到寄存器AX中。(6分)

(1)直接寻址方式 MOV AX, BUF+4

(2)变址寻址方式 MOV SI, OFFSET BUF MOV AX, 4[SI]

(3)基址加变址寻址方式 MOV SI, 4 MOV AX, BUF[SI]

得 分 评卷人 七、程序阅读分析(10分)

程序代码如下,阅读程序,回答后面的问题。

.386

DATA SEGMENT USE16 BUF DB 80 DUP(0)

INBUF DB 80,?, 81 DUP(0) PRMPTMSG DB 'PLEASE INPUT:$' CRLF DB 0DH, 0AH,'$' DATA ENDS

STACK SEGMENT USE16 STACK

DB 256 DUP(0)

STACK ENDS

DISPSTR MACRO BUF LEA DX,BUF MOV AH,9 INT 21H ENDM

CODE SEGMENT USE16 ASSUME CS:CODE,DS:DATA, SS:STACK START: MOV AX,DATA MOV DS,AX DISPSTR PRMPTMSG LEA DX, INBUF MOV AH,10 INT 21H

(10分)

计算机学院2011-2012学年第二学期《汇编语言程序设计》考试草稿纸

PUSH OFFSET BUF PUSH OFFSET INBUF L1: CALL SCANSTR POP AX POP AX

DISPSTR CRLF L2: DISPSTR BUF MOV AH, 4CH INT 21H

SCANSTR PROC

PUSH BP MOV BP,SP MOV SI,[BP+4] MOV BX,[BP+6] INC SI

MOV CL,[SI] MOV CH,0 INC SI

LOPA: MOV AL,[SI] CMP AL,'A' JB LOPB CMP AL,'Z' JA LOPB

ADD AL,'a'-'A' LOPB:INC SI

MOV [BX],AL INC BX LOOP LOPA

MOV BYTE PTR [BX], '$' POP BP RET SCANSTR ENDP CODE ENDS

END START

(1)该程序完成了什么功能?(6分)

从键盘输入一个字符串,将该字符串拷贝到缓冲区BUF中,在拷贝的同时将其中的大写字母’A’~’Z’转换为小写字母’a’~’z’,并显示转换后的字符串。

(2)子程序SCANSTR的入口、出口参数是什么?(2分)

入口参数:INBUF 和 BUF 的偏移地址

出口参数:SI指向BUF中字符串的结束标记回车键的位置,

计算机学院2011-2012学年第二学期《汇编语言程序设计》考试草稿纸

BX指向转换后的字符串最后一个结尾标记’$’

(3)在TD中调试时,如何操作方可让程序执行到LOPA处暂停?(2分)

在LOPA处设置断点。

得 分 评卷人

八、编写程序(20分)

编写一个程序,读取字存储单元内容,将其转换为八进制数,并统计其中数位5出现的次数,最后将八进制数和个数显示在屏幕上。(如字存储单元内容为177DH,八进制表示为13575o,它有2个数位为5,显示结果为:八进制表示:13575o,数位5出现的次数:2)。

要求:①将字存储单元内容转换为八进制数和统计数位为5的次数分别用子程序实现;ACM班编写的程序要求用INVOKE 调用子程序;

② 画出程序流程图;

③ 写出存储器变量、寄存器使用分配情况及子程序入/出口参数说明; ④ 含不少于4条重要注释的完整程序清单。

本文来源:https://www.bwwdw.com/article/p2dv.html

Top