郑州大学11级32位汇编语言程序设计A卷及答案

更新时间:2024-05-02 22:15:02 阅读量: 综合文库 文档下载

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

2011级 汇编语言程序设计 课程试题(A卷)

题号分数 一 二 三 四 五 六 七 总分 合分人: 复查人: 分数 一、填空题(每空1分,共15分)

1.用汇编语言书写的程序叫做 ,MASM要求该文件的扩展名是 ,编写32位Windows应用程序应选择 存储模型。

2.汇编语言语句有两种,分别是 和 。3.除外设数据外的数据寻址方式有3类,分别称为 、 和 寻址。

4.进行Windows应用程序开发时,需要 库文件,执行该应用程序时,则需要对应的 库文件。 5.汇编语言与C和C++语言有两种混合编程方法,分别是 和 。 6.IA-32处理器有 个32位通用寄存器,有 个段寄存器,段寄存器都是 位的。

分数 二、判断题(每题1分,共10分)

1.Windows的模拟DOS环境与控制台环境是一样的。 ( ) 2.“TYPE DX”的结果是一个常量,等于2。 ( ) 3.数据扩展的基本原则是位数加长,数值大小不变。 ( ) 4.指令的相对寻址都是近转移。 ( ) 5.JA和JG指令的条件都是“大于”,所以是同一个指令的两个助记符。 ( ) 6.CALL指令的执行必然影响堆栈指针ESP。 ( ) 7.在宏定义中,LOCAL伪指令声明标识符;而在过程定义中,LOCAL伪指令用于分配局部变量。 ( ) 8.指令“OUT DX,AX”的两个操作数均采用寄存器寻址方式。 ( ) 9.MASM32软件包既支持32位图形界面应用程序的开发,也支持控制台应用程序开发。

( )

10.程序终止执行也就意味着汇编结束,所以两者含义相同。 ( )

共 8 页 第 1 页

评卷人 评卷人 三、按下面要求写出相应的数据定义语句或汇编指令(变量名可任意指定)(每小题2分,共12分) 1. 定义字符串变量:assembly language

2. 定义20个未赋值的字变量

3. 定义符号常量str,表示字符串assembly language

4. 定义用十六进制数表示的双字变量:20

分数 评卷人

5. 用寄存器EBX和ESI的基址变址寻址方式把存储器的一个双字与EAX寄存器的内容

相加,并把结果送回存储器中。用一条汇编指令完成该功能。

6. 用一条汇编指令实现将寄存器EAX和标志位CF、OF同时清零。

分数 四、程序分析与阅读题(共 28分)

1.根据数据段定义的变量,分析下列指令的运行结果并填在空格里(每空1分,共8分) .data

array qword 1234567887654321h .code

mov eax,dword ptr array ;EAX= _______ mov ebx,dword ptr array+4 ;EBX= _______ sub al,bl ;EAX= _______,CF= _______,OF= _______ ;ZF= _______,SF= _______ PF= _______

2.指出如下语句的错误,并改正(其中var1和var2是两个双字变量)(每小题2分,共8分)

① add eax,bx

② mov var1, var2

共 8 页 第 2 页

评卷人 ③ push al

④ mov [ebx],100

3.有如下程序片断,请使用一条指令实现该程序段所完成的功能(每小题2分,共4分) ① mov eax,ebx mov ebx,[edi] mov [edi],eax __________ ② mov al,[esi] mov [edi],al inc esi inc edi __________

4.如下程序段实现在一个已知长度(长度为count)的串string中查找是否存在子串bug的功能,如果找到则显示“Y”,否则显示“N”。请在空白处填上恰当的语句。(每空2分,共8分)

mov ecx,count mov edi,offset string L1: mov esi,offset bug push edi mov edx,sizeof bug LN: mov al,[esi] __________ jne L2 inc esi inc edi __________ jne LN pop edi mov al,'Y' __________ L2: pop edi __________ loop L1 mov al,'N' L3: call dispc

共 8 页 第 3 页

分数 五、编程题:(共35分)

评卷人 1.(5分)将调用字符串输入子程序readmsg编写成一个宏readstring,其中宏的参数是输入缓冲区的名称msg,实际输入字符的个数存入ecx寄存器中。 子程序名 READMSG 参数及功能说明 入口参数:EAX=缓冲区地址 功能说明:输入一个字符串(回车结束) 出口参数:EAX=实际输入的字符个数(不含结尾字符0)

2.(8分)编程直接调用Windows控制台API函数显示“Hello,Assembly! ”。控制台API函数位于动态连接库KERNEL32.DLL中,标准输出句柄值:-11,常用函数说明如下: VOID ExitProcess( DWORD uExitCode );

HANDLE GetStdHandle(

DWORD nStdHandle //input,output,or error device );

WriteConsole参数

第一个:控制台输出句柄实例

第二个:指向字符串的指针、即缓冲区地址 第三个:指明字符串长度

第四个:指向一个整数变量,返回实际输出的字符数 第五个:保留,设置为0

3.(10分)使用DOS系统功能编写DOS应用程序,要求如下:提示“Input number:0~9”,

共 8 页 第 4 页

// exit code for all threads

等待用户输入字符。如果用户按下数字字符则退出,如果用户按下非数字字符则继续等待输入字符。要求写出完整的源程序代码,不要使用输入输出子程序。 DOS基本功能调用表如下所示: 子功能号 功能 AH=01H AH=09H 从标准输入设备输入一个字符 向标准输出设备输出一个字符串 AH=4CH

4.(12分)请用子程序实现将字符串“Are you sure you can pass in the Assembly exam?”中的英文字母进行大小写互换,即如果是大写则转换成小写,如果是小写则转换成大写。对字符串中的非英文字母不做任何处理。在主程序中显示出转换后的结果,要求用主程序对子程序调用完成,利用堆栈传递入口参数,写出完整的主程序、子程序代码,并加上必要的注释。

程序执行终止 入口参数 DX=字符串地址 AL=返回代码 出口参数 AL=输入字符的ASCII码 2011级 汇编语言程序设计 课程试题(A卷答案)

共 8 页 第 5 页

一、填空题(毎空1分,共15分)

1.汇编语言程序/汇编语言源程序,ASM,平展(flat) 2.执行性语句(硬指令),说明性语句(伪指令) 3.立即数,寄存器,存储器 4.导入,动态连接 5.PUSH EBX 6.嵌入汇编,模块连接 7.8,6,16

二、判断题(每题1分,共10分)

1.错 2.对 3.对 4.对 5.错 6.对 7.对 8.错 9.对 10.错

三、按下面要求写出相应的数据定义语句或汇编指令(变量名可任意指定)(每小题2分,共12分)

1. string byte ‘assembly language’ 2. var word 20 dup (?)

3. str equ 4. dvar dword 14h 5. add [ebx+esi],eax

6. xor eax,eax 或sub eax,eax

四、程序分析与阅读题 1.(每空1分,共8分)

EAX=87654321h EBX=12345678h

EAX=876543a9h CF=1 OF=0 ZF=0 SF=1 PF=1

2.(每小题2分,共8分)每一小题指出错误得1分,写出正确指令得1分 ① 操作数类型不一致 add eax,ebx 或add ax,bx ② 两个操作数同时是内存单元的数 mov eax,var2 mov var1,eax ③ push指令不支持字节操作 push ax 或 push eax ④ 两个操作数类型不明确 mov byte ptr [ebx],100 或mov word ptr [ebx],100 或mov dword ptr [ebx],100 3.(每小题2分,共4分)

① xchg ebx,[edi] 或 xchg [edi],ebx ② movsb

4.(每空2分,共8分) dec edx

cmp al,[edi] jmp L3

共 8 页 第 6 页

inc edi

五、编程题(共35分) 1.(5分)

readstring macro,:msg

lea eax,msg call readmsg mov ecx,eax

endm

2.(8分) .686

.model flat,stdcall option casemap:none includelib bin\\kernel32.lib ExitProcess

proto,:dword

WriteConsole equ STD_OUTPUT_HANDLE = -11 .data

msg byte 'Hello, Assembly!',13,10 outsize dword ? .code start:

invoke GetStdHandle,

STD_OUTPUT_HANDLE ;获得输出句柄

invoke WriteConsole,eax,

addr msg,sizeof msg,addr outsize,0 ;

invoke ExitProcess,0 ;退出 end start

GetStdHandle proto,:dword WriteConsoleA

proto,:dword,:

dword,:dword,:dword,:dword

3.(10分) .model small .686 .stack .data

msg byte ‘Input number:0~9’,’$’ .code start:

mov ax,@data mov ds,ax mov ah,9 mov dx,offset msg int 21h again:mov ah,1

共 8 页 第 7 页

int 21h cmp al,30h jb next cmp al,39h jbe done next:jmp again done:mov ax,4c00h

int 21h end start 4. (12分) include io32.inc .data

msg byte ‘Are you sure you can pass in

the Assembly exam?’,13,10,0

.code start:

mov eax,sizeof msg push eax

mov eax,offset msg push eax call zhuanhuan add esp,8

mov eax,offset msg call dispmsg exit 0 zhuanhuan proc

push ebp mov ebp,esp push ebx push ecx

mov ebx,[ebp+8] mov ecx,[ebp+12] again:mov al,[ebx]

cmp al,’A’ jb next cmp al,’Z’ jbe next1 cmp al,’a’ jb next cmp al,’z’

ja next

next1:xor al,20h

mov [ebx],al

next:inc ebx

loop again

pop ecx

pop ebx mov esp,ebp pop ebp ret

zhuanhuan endp end start

共 8 页 第 8 页

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

Top