汇编语言程序设计期末考试题.docx

上传人:b****6 文档编号:7312103 上传时间:2023-01-22 格式:DOCX 页数:12 大小:20.81KB
下载 相关 举报
汇编语言程序设计期末考试题.docx_第1页
第1页 / 共12页
汇编语言程序设计期末考试题.docx_第2页
第2页 / 共12页
汇编语言程序设计期末考试题.docx_第3页
第3页 / 共12页
汇编语言程序设计期末考试题.docx_第4页
第4页 / 共12页
汇编语言程序设计期末考试题.docx_第5页
第5页 / 共12页
点击查看更多>>
下载资源
资源描述

汇编语言程序设计期末考试题.docx

《汇编语言程序设计期末考试题.docx》由会员分享,可在线阅读,更多相关《汇编语言程序设计期末考试题.docx(12页珍藏版)》请在冰豆网上搜索。

汇编语言程序设计期末考试题.docx

汇编语言程序设计期末考试题

一、单项选择题(本大题共10小题,每小题3分,共30分)在每小题列出的四个备选项中只有一个是符合题目要求的,请将其代码填写在题后的括号内。

错选、多选或未选均无分。

1.CPU要访问的某一存储单元的实际地址称(C)

  A.段地址 B.偏移地址 C.物理地址  D.逻辑地址

2.某存储单元的物理地址是12345H,可以作为它的段地址有(D)

  A.2345H  B.12345H  C.12340H  D.1234H

3.执行后使BX=0的同时也使CF=0,OF=0的指令是(A)

A.XORBX,BX B.ORBX,BX  C.ANDBX,BX D.CMPBX,BX

4.循环控制指令LoopNZ/LoopNE控制循环继续执行的条件是(B)

A.CX≠0且ZF=1 B.CX≠0且ZF=0 C.CX≠0或ZF=1  D.CX≠0或ZF=0

5.在执行DAA指令,当高四位BCD码校正时产生进位,如要把此进位值送入AH中,对这进位值的操作应是(C)

  A.DAA校正指令的功能已自动加在AH中

  B.进位值在AF中,校正后根据AF内容再加在AH中

  C.进位值在CF中,校正后根据CF内容再加在AH中

  D.进位值在AL最高位上,校正后根据AL最高位内容再加在AH中

6.AND,OR,XOR,NOT为四条逻辑运算指令,下面的解释正确的是(C)

  A.指令XORAX,AX执行后,AX内容不变,但设置了标志位

  B.指令ORDX,1000H执行后,将DX最高位置1,其余各位置0

  C.指令ANDAX,OFH执行后,分离出AL低四位

  D.NOTAX,执行后,将AX清0

7.在执行下列指令时,需要使用段寄存器DS的指令是(D)

  A.STOSW B.ADDAL,CL  C.NEGBX  D.INCDA[BX]

8.无论BH中原有的数是奇数或偶数,若要使BH中的数一定为奇数,应执行的指令是(B)

A.ADDBH,01H  B.ORBH,01H  C.XORBH,01H D.TESTBH,01H

9.比较两个带符号的数A、B,当A=B时程序转移,测试的条件为(A)

  A.ZF=1  B.ZF=0  C.SF=1   D.SF=0

10.下面各传送指令中,正确的是(C)

  A.MOV[DI],[SI]       B.MOV[DX+DI],AL

  C.MOVWORDPTR[BX],0100H D.MOVAL,BX

11.汇编语言语句格式中对名字项的规定如下,请找出其中错误的说法(B)

  A.名字的第一个字符可以是大写英文字母及小写英文字母

  B.名字的第一个字符可以是字母、数字及、@、_

  C.名字的有效长度≤31个字符

  D.在名字中不允许出现$

12.要实现使BETA的值为56,应采用语句为(C)

A.BETADB56  B.BETADB56H  C.BETAEQU56 D.BETAEQU56H

13.REPZCMPSW指令,重复执行的终止条件是(A)

  A.CX=0或ZF=0     B.CX=0且ZF=0

  C.CX=0或ZF=1     D.CX=0且ZF=1

14.下面程序段执行后,AL中的内容是( B)

  MOVAX,8833H

  ADDAL,AH

  DAA

  A.21  B.21H C.0C1H  D.0DDH

15.比较两个带符号的数A、B,当A=B时程序转移,测试的条件为(A)

  A.ZF=1  B.ZF=0 C.SF=1  D.SF=0

16.检查二个无符号数的关系,若要实现AL≥BL时分支去LOP1处,那么在“CMPAL,BL”指令后应跟的分支指令是(C)

  A.JNCLOP1  B.JALOP1C.JCLOP1  D.JGELOP1

17.在下列串操作指令中,同时使用源串和目的串地址指针的指令是(D)

  A.STOSW B.LODSW  C.SCASW D.CMPSW

18.设AL=0AH,下列指令执行后能使AL=05H的是(C)

A.NOTALB.ANDAL,0FH C.XORAL,0FH D.ORAL,0FH

19.DA1DW‘AB’,‘CD’,‘EF’,‘GH’(D)

  ┇

  MOVAX,DA1+3

  指令执行后AX中的内容是

  A.‘EF’ B.‘CD’ C.‘BC’  D.‘FC’

20.使用DOS系统功能调用时,使用的软中断指令是(B)

  A.INT21 B.INT10H  C.NT16H  D.INT21H

二、简答题(每题10分,共30分)

1.简述循环程序常用的控制方法。

解:

技术控制:

适用于循环次数已知,包括正计数与倒计数两种。

采用循环指令LOOP和JCXZ实现,将最大循环次数置入CX,最后用LOOP对CX减1并判断是否为0。

条件控制:

用于循环次数未知。

需要用转移指令判断循环条件,转移指令可以指定目的标号来改变程序运行顺序目的标号指向一个重复执行的语句开始或结束,就构成了循环控制结构,循环体为标号语句至转移指令。

混合控制:

包括开关控制和逻辑尺控制,前者适用于循环内部有一定规律分支,循环前预置开关走向,结束前设置下一个开关方向。

逻辑尺控制适用于内部分支不规律,用位来控制每次循环的操作。

计数控制:

循环次数已知,每循环一次+、-1:

;常用LOOP指令实现

条件控制:

循环次数未知,须根据条件控制循环;用条件转移指令实现

状态控制:

根据事先设置或实时检测的状态来控制循环

2.比较参数传递的三种方法,并分析递归调用时为什么不能采用约定存储单元法来传递数据?

寄存器:

将入口参数和出口参数放在与约定的寄存器,数据传递速度快,编程方便,节约内存单元,但是寄存器数量有限,适用较少的子程序约定存储单元:

不占用寄存器、参数个数任意,数据都有独立的存储单元,但定义变量有难度。

堆栈:

不占用寄存器和存储单元,参数放在公共堆栈区,处理后恢复,注意参数的位置断点保存和恢复。

 参数传递的方法主要有约定寄存器法、约定存储器法与堆栈法三种。

1.约定寄存器法

    约定寄存器法直接利用CPU内部寄存器传送参数。

在转向子程序之前,主程序将入口参数送入指定寄存器中;调用子程序后,子程序从指定寄存器引用这些参数。

经加工处理的结果也放入指定的寄存器中,这样从子程序返回主程序后可以从指定的寄存器中获得处理结果。

这种方法最简单,但由于寄存器资源有限,故仅适用传递参数较少的情况。

2.约定存储器法

  约定存储器法是在存储器中专门指定一些单元存放入口参数和出口参数。

在转子程序之

前,主程序用数据传送指令将入口参数存入入口参数的存储单元中。

调用子程序后,子程序按照约定从入口参数存储单元中取出这些参数进行处理。

子程序完成处理,将处理结果送入指定的出口参数存储单元中,返回后主程序可从这些特定存储单元中获取需要的处理结果。

 约定存储器法传送速度比约定寄存器法要慢些,适合于传递参数较多的情况。

3.堆栈法

堆栈法使用堆栈来完成数据传递。

在调用子程序之前将参数压入堆栈,转入子程序后通过

sP指针获得压入堆栈的参数地址,从而将其取出。

子程序的处理结果亦送入堆栈保存。

返回主程序后再通过出栈指令取出结果。

使用该方法时应明了堆栈的变化情况,特别注意参数入栈与出栈顺序。

   堆栈法适合于参数较多且子程序有嵌套、递归调用的场合。

3.简述外部中断和软件中断的中断过程。

中断是用以提高计算机工作效率、增强计算机功能的一项重要技术。

外部中断:

当中断源向CPU发出中断请求,CPU接受请求在一定条件下暂停执行原程序进行中断处理,执行完中断服务程序后再返回断点继续执行原程序。

软件中断:

是一条CPU指令,用以自陷一个中断。

由于软中断指令通常要运行一个切换CPU至内核态的子例程,它常被用作实现系统调用.

4.简述循环程序结构的一般组成。

初始化部分:

在循环程序的开头,先执行。

设置地址指针的初值、计数器的初值及程序中用到的某些寄存器和某些内存单元的初值,只执行一遍。

工作部分:

从初始化部分设置的初值开始,动态地反复执行相同的操作,实现循环程序的功能。

修改部分:

对参加运算的数据或地址指针和记过单元地址指针修改控制部分:

按预定循环次数的执行和正常退出循环。

5.简述多分支程序实现的一般步骤与常用处理方法。

使用条件转移JCC指令和无条件专题JMP指令实现分支程序结构。

获得条件变量-->对应转换为地址表入口偏移-->BX=BX+入口偏移JMP[BX]跳转到相应位置。

常用地址表的方法。

无法使用地址表,只能通过多条条件转移指令实现。

6.简述完整子程序结构所包含的内容。

子程序也是一段程序,由文字说明和子程序本身构成。

一般由子程序名、子程序的功能。

子程序选用的寄存器名和存储单元分配、子程序入口参数、子程序出口参数。

三.编写程序,计算两个64位数的和,不考虑和的进位。

(20分)

由于64位数占用的寄存器比较多,故适合于用约定存储单元法来进行处理。

程序中将64位加数mMl和M.M2存放在两个双字单元内。

由于不考虑和的进位,所以

和也可用两个双字单元来存放。

程序如下:

DATASEGMENT

NUMlDD1234H,12345678H:

M7Ml为123456781234H

MM2DD432lH,8765432lH:

NIM2为87654321432lH

SUMDD?

,?

DATAENDS

STACKSEGMENTPARASTACK’STACK’

DB100DUP(?

STACKENDS

CODESEGMENT

ASSUMECS:

CODE,SS:

STACK,DS:

DATA,ES:

DArA

MAINPAR:

主程序

BEGIN:

PUSHDS

MOVAX,0

PUSHAX

MOVAX,D』uA

MOVDS,AX

MOVES,AX

CALLADD64;调用子程序ADD64

RET

MAINENDP

子程序名称:

ADD64

;子程序功能:

两个64位数的相加

;输入参数:

MUMl一被加数的地址

;NUM2一加数地址

输出参数:

SUM一和数地址

ADD64PROC

PUSHF

PUSHAX:

保护现场

PUSHBX

PUSHCX

LEABX,Mmll:

Bx指向被加数单元

MOVCX,4

CLC

AGAIN:

MOVAx,[Bx】;取被加数的相应字一Ax

ADcAx,[Bx+8】;与加数相应字相加

MOV【Bx+lOH】,Ax;保存和

INCBX

INCBX

LOOPAGAIN

POPCx:

恢复现场

POPBX

POPAX

POPF

RET

ADD64ENDP

CODEENDS

ENDBEGIN

四.编写程序,将一个十六位二进制数转换为ASCLL码,并以十进制数形式在屏幕上输出。

(20分)

DATASEGMENT

BINARYDW0110110000001100B

BUFDW9DUP

DATAENDS

STACKISEGMENTPARASTACK‘STACK’

DB100HDUP

STACKENDS

CODESEGMENT

ASSUMECS:

CODE,DS:

DATA

STARTPROCFAR;

PUSHDS

MOVAX,0

PUSHAX

MOVAX,DATA

MOVDS,AX

MOVCX,BINARY;CX

CAALLCONV;

CALLDISPLAY;

RET

STARTENDP

;子程序名称:

CONV

;子程序功能:

将CX中十六位二进制数转换为十进制数

;入口参数:

CX

;调用子程序:

CHANGE

CONVPROCNEAR

PUSHAX

PUSHBX

PUSHDX

PUSHSI

LEABX,BUF

MOVAL,0AH

MOV[BX],AL;

INCBX

MOVAL,CH;

ORAL,AL

JNSPLUS;

NEGCX;

MOVAL;’-’

MOV[BX],AL;

JMPGOON

PLUS:

MOVAL,‘+’

MOV[BX],AL;

GOON:

INCBX

MOVSI,10000;

CALLCHANGE

MOVSI,1000;

CALLCHANGE

MOVSI,100;

CALLCHANGE

MOVSI,10;

CALLCHANGE

MOVAL,CL;

ADDAL,30H

MOV[BX],AL

INCBX

MOVAL,‘$’;

MOV[BX],AL

POPSI

POPDX

POPBX

POPAX

RET

CONVENDP

;子程序名称;CHANGE

;子程序功能;统计CX中所包含权(在SI中)的个数

;并把个数转换为ASCH码,存入缓冲区中

;入口参数:

CX

;调用子程序:

CHANGE

CONVPROCNEAR

PUSHAX;

PUSHBX

PUSHDX

PUSHSI

LEABX,BUF

MOVAL,0DH

MOV[BX],AL;

INCBX

MOVAL,CH;

ORAL,AL

JNSPLUS;

NEGCX;

MOVAL,‘-‘

MOV[BX],AL;

JMPGOON

PLUS:

MOVAL,‘+’

MOV[BX],AL;

CHANGEENDP

;子程序名称:

DISPLAY

;子程序功能:

输出以$结尾的一个字符串

;调用子程序:

系统09号功能

DISPLAYPROCNEAR

PUSHAX

MOVDX,OFFSETBUF

MOVAH,9

INT21H

POPAX

RET

DISPLAYENDP

CODEENDS

ENDSTART

五.编写程序,将输入的大写字母转换为小写字母。

(20分)

DATASSEGMENT

adb"input",0dh,0ah,"$"

DATASENDS

CODESSEGMENT

ASSUMECS:

CODES,DS:

DATAS

START:

movax,DATAS

movds,ax

movdx,offseta;定义数据段

movah,9h

int21h;输出“input”,并且让下一位所要显示的显示在下一行

movah,1

int21h;输入

movdl,al;转存输入

subdl,20h

movah,2

int21h;输出此时的DL中的数值(为ASCII码)

movax,4c00h

int21h

CODESENDS

ENDSTART

六.对两个整数变量A和B,编写程序完成下列功能:

1、若两个数中有一个是奇数,则将奇数送入A单元中,偶数送入B单元中。

2、若两个数均为奇数,则两个数分别加1,并存入原变量中。

3、若两个数均为偶数,则两变量不变。

(20分)

dsegsegment

adw?

bdw?

dsegends

csegsegment

mainprocfar

assumecs:

cseg,ds:

dseg

start:

pushds

subax,ax

pushax

movax,dseg

movds,ax

begin:

movax,a

movbx,b

xorax,bx

testax,0001

jzclass

testbx,0001

jzexit

xchgbx,a

movb,bx

jmpexit

class:

testbx,0001

jzexit

incb

inca

exit:

ret

mainendp

csegends

endstart

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 人文社科 > 文学研究

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1