汇编语言期中试题答案.docx

上传人:b****3 文档编号:3550515 上传时间:2022-11-23 格式:DOCX 页数:17 大小:83.31KB
下载 相关 举报
汇编语言期中试题答案.docx_第1页
第1页 / 共17页
汇编语言期中试题答案.docx_第2页
第2页 / 共17页
汇编语言期中试题答案.docx_第3页
第3页 / 共17页
汇编语言期中试题答案.docx_第4页
第4页 / 共17页
汇编语言期中试题答案.docx_第5页
第5页 / 共17页
点击查看更多>>
下载资源
资源描述

汇编语言期中试题答案.docx

《汇编语言期中试题答案.docx》由会员分享,可在线阅读,更多相关《汇编语言期中试题答案.docx(17页珍藏版)》请在冰豆网上搜索。

汇编语言期中试题答案.docx

汇编语言期中试题答案

班级软件2班学号20112723姓名林苾湲

密封装订线密封装订线密封装订线

z西南交通大学2012-2013学年第

(二)学期中期试卷

课程代码3200514课程名称汇编语言程序设计考试时间120分钟

题号

总成绩

得分

阅卷教师签字:

(注意:

请将所有题的答案写在答题纸上,直接写在考卷上不给分)

一、填空题(答案填在横线上,每空1分,共10分)

1.堆栈段的段地址保存在ss寄存器,栈顶指针保存在sp寄存器。

2.某计算机的机器字长为16,其十进制数-10的二进制数补码是:

111111*********0。

3、80386有哪几种工作方式:

实模式、保护模式、虚拟8086模式。

4.有效地址可以由以下四种成分组成,分别是位移量、基址、变址、比例因子。

二、选择题(将答案的编号填在题后的括号内,每题2分,共20分)

1.两个带符号数分别保存在AX和BX寄存器中,且AX>BX,当执行指令CMPAX,BX之后,OF和SF的值为(

(1)).

(1)相同

(2)不同(3)无法确定(4)SF=0,OF=1

2.指令MOVAX,[BX][SI]的寻址方式是(

(1)).

(1)基址变址寻址

(2)间接寻址(3)相对的基址寻址(4)相对的基址变址寻址

3.如果SP=20H,在执行指令PUSHAX之后,SP的值为((4)).

(1)22H

(2)18H(3)1EH(4)1DH

4.如果CONSTEQU0ABCDH,在执行MOVAH,HIGHCONST指令后,AH的值为(

(2)).

(1)0AH

(2)0ABH(3)0CDH32(4)0BCH

5.某程序在数据段定义了某变量Arraydw200DUP(100),在程序中执行MOVCX,Array之后,CX寄存器的值为:

(1))

(1)100

(2)200(3)400(4)2

6.下面哪个段寄存器通常用于存放数据((4))

(1)ES

(2)CS(3)SS(4)DS

7.如果在程序中须使用386以后的32位寄存器,则需要在该指令之前进行说明,可采用伪指令(

(1))

(1).386

(2).8086(3).Use32(4)Use32

8.下面哪一个字符串不是汇编语言保留字(

(2)).

(1)ALPHA

(2)ALPH(3)CLD(4)LOOP

9.下面在数据段中定义的标识符中哪一个是合法的标识符((4))

(1)Add

(2)23AC(3).ab(4)$50H

10.下面哪条语句可用于表示子程序返回((3))

(1)ENDM

(2)ENDP(3)RET(4)END

三、判断下面的8086指令是否有误。

若有错,请指明错误原因,并修改使其完成相同操作(可用多条指令,每题2分,共10分)

1.MOVAX,BH

解:

错误,源/目的操作数长度不一致

改为:

MOVAH,BH

2.MOV[2000H],AX

解:

正确

3.MOV[AX],BX

解:

错误,对于内存单元,必须指明其长度

改为:

MOVWORDPTR[AX],BX

4.MOVBYTEPTR[BX],1234H

解:

错误,源/目的操作数长度不一致

改为:

MOVWORDPTR[BX],1234H

5.MOV[DI],[SI]

解:

错误,源/目的操作数不能同时为内存单元

改为:

MOVAX,WORDPTR[SI]

MOVWORDPTR[DI],BX

四、简答题(共35分)

1.已知某程序的数据段定义如下,请用图表示其在内存中的存放形式(以16进制数形式表示)。

DataSegment

Var1DB-10,2DUP(20H,30H)

Var2EQU$-Var1

Var3dw20H,1122H

Var4DD0FEH

Var5DB2DUP(20H,-1,2DUP(-2,03H))

Dataends

解:

11110110B

20H

30H

20H

30H

20H

00H

22H

11H

0FEH

00H

00H

00H

20H

11111111B

11111110B

03H

11111110B

03H

20H

11111111B

11111110B

03H

11111110B

03H

2.用寄存器BX实现寄存器相对寻址方式(位移量为0200H),将DX的内容和存储单元中的一个字相加,和放在存储单元中。

解:

ADD0200H[BX],DX

3.按照下面的要求设计某数据段,段名为DATA,变量名依次为ITEM1到ITEM5:

(a)十进制数为71的字节变量,用16进制形式表示。

(b)未赋初值的字变量。

(C)十进制数为7524的双字变量,用十六进制形式表示。

(d)十进制数为47的字节变量,用二进制形式表示。

(e)包含6,9,14,18,23,29,31和38的字变量.

解:

DATAsegment

ITEM1db47h

ITEM2DW?

ITEM3DD0474H

ITEM4DB00101111B

ITEM5DW6,9,14,18,23,29,31,38

DATAENDS

4.编写程序段,采用Loop指令将存放在BCDVAL中的01060803H转换成31363833H,并将转换结果保存在ASCII开始的存储单元。

解:

datasegment

BCDVALdd01060803h

Add31363833h

ASCIIdd?

dataends

stacksegmentparastack

db20hdup(0)

stackends

codesegment

assumecs:

code,ss:

stack,ds:

data

start:

movax,data

movds,ax

movcx,4

movsi,3

lop:

moval,bytePTRA[si]

movbyteptrBCDVAL[si],al

MOVbyteptrASCII[si],al

decsi

looplop

movah,4ch

int21h

codeends

endstart

5.下面的程序实现TABLE表中元素的排序,请检查程序中的错误,并修改。

1.TITLEBUBBLESORT

2.DATASEGMENT

3.TABLEDB20,-30,11,120,29,32,-48,-25,72

4.DB96,33,21,50,-19,-46,35,29,-21

5.COUNTEQU$-TABLE

6.DATAENDS

7.STACKSEGMENTPARASTACK

8.DW20HDUP(0)

9.STACKENDS

10.CODESEGMENT

11.ASSUMECS:

CODE,SS:

STACK,DS:

DATA

12.MAIN:

MOVAX,DATA

13.MOVDS,AX

14.MOVDX,COUNT

15.decDX

16.LOP1:

MOVBL,0

17.MOVCX,DX

18.MOVSI,2

19.LOP2:

MOVAL,TABLE[SI]

20.CMPAL,TABLE[SI+1]

21.JLENEXT

22.XCHGAL,TABLE[SI+1]

23.MOVTABLE[SI],AL

24.MOVBL,0FFH

25.NEXT:

INCSI

26.LOOPLOP2

27.INCDX

28.CMPBL,0

29.JNELOP1

30.MOVAH,4CH

31.INT21H

32.CODEENDS

33.ENDMAIN

解:

1.第15句错误,冒泡不用比到最后一位的前一位,这里需要在该句前加一句decDX

2.第18句错误,每次从第一个数开始比较,采用冒泡排序,把最大的数甩到当前最后位置,应该改为MOVSI,0

3.第27句错误,DX记下每次从开始处到要甩的最后位置的距离,长度不应该增加,应该减小。

改为:

DECDX

4.第28句错误,BL中存标记项,如果发生交换bl被置FF,需要再循环,如果bl为0表示排序已经完成,无需再继续。

这句无错

6.编写程序将下面数据段中BYTE_TBL开始的6个存储单元的内容相加并保存到CL寄存器中。

DATASEGMENT

BYTE_TBLDB12,15,16,10,8

DATAENDS

解:

Codesegment

Assumecs:

code,ss:

stack,ds:

data

Start:

movax,data

Movds,ax

LeaSI,BYTE_TBL

MOVCX,5;送入循环次数,如送入cl,ch必先清0

XORBL,BL

LOP:

ADDBL,[SI];累加

INCSI

LOOPLOP;cl减1后循环

MOVCL,BL

Codeends

Endstart

五、程序阅读(阅读程序并绘制流程,共10分)

datasegment

Msg1db"Pleaseinputthefirststring:

$"

Msg2db"Pleaseinputthesecondstring:

$"

Ensgdb0ah,0dh,'$'

sdb100,0,100dup(0)

s1db100,0,100dup(0)

dsp1db"s>=s1$"

dsp2db"s

dataends

stacksegmentparastack

db20hdup(0)

stackends

codesegment

assumecs:

code,ss:

stack,ds:

data

start:

movax,data

movds,ax

moves,ax

leadx,Msg1

movah,09h

int21h

leadx,s

movah,0ah

int21h

leadx,Ensg

movah,09h

int21h

leadx,msg2

movah,09h

int21h

leadx,s1

movah,0ah

int21h

leadx,ensg

movah,09h

int21h

movch,s+1

cmpch,s1+1

janext

movcl,ch

jmpnext1

next:

movcl,s1+1

next1:

leasi,s+2

leadi,s1+2

xorch,ch

cld

repzcmpsb

jznext2

janext3

jmpnext4

next2:

movch,s+1

cmpch,s1+1

jbnext4

next3:

leadx,dsp1

jmpnext5

next4:

leadx,dsp2

next5:

movah,09h

int21h

movah,4ch

int21h

codeends

endstart

 

解:

JAJB

JA

JB

JZ

JB

JA

JZ

六、用汇编语言重写下面的C语言程序。

(共15分)。

intmain()

{

intsum=0,n,i=0;

printf(“Pleaseinputintegern:

\n”);

scanf(“%d”,&n);

while(i

sum+=i;

i=i+1;

}

printf(“sum=%d\n”,sum);

return1;

}

 

解:

datasegment

Msg1db"Pleaseinputintegern:

$"

Msg2db"TheSUMare:

$"

EntMsgdb0ah,0dh,'$'

numdw0

tamountdw0;累加结果

resultdb8dup(0)

dataends

stacksegmentparastack

db200dup(0)

stackends

codesegment

assumecs:

code,ss:

stack,ds:

data

start:

movax,data

movds,ax

leadx,Msg1

movah,09h

int21h

callinone

movnum,dx;num获取累加总数

callcompute;计算累加结果后存入tamount

leadx,Msg2

movah,09h

int21h

calloutput

exit1:

movah,4ch

int21h

 

inoneproc;结果按小数点后面有几位,扩大相应倍数后存在dx

pushax

pushbx

pushcx

xordx,dx

lop2:

movah,01h

int21h

cmpal,0dh

jzextp1

cmpal,'.'

jznext

andal,0fh

movcl,al

movax,dx

movbx,10

mulbx

movdx,ax

movch,0

adddx,cx

next:

jmplop2

extp1:

popcx

popbx

popax

ret

inoneendp

 

computeproc;计算累加结果后存入tamount

pushcx

pushdx

pushax

pushbx

xorcx,cx

movcx,num

xorax,ax

movbx,1

lop1:

addax,bx;开始累加

incbx

looplop1

movtamount,ax

popbx

popax

popdx

popcx

ret

computeendp

outputproc

pushsi

pushbx

pushax

pushcx

xorcx,cx

leasi,result

addsi,8;si指尾

movax,tamount

movbx,10;作为除数

lop3:

xordx,dx

divbx

mov[si],dl;每次把余数放入相应位子

inccx

cmpcx,0;比较是倒数第0位时,赋小数点(无小数)

jnznext2

decsi

pushax

moval,'.'

mov[si],al

popax

next2:

cmpax,0;;比较ax(原数)是否除到头了,是就结束去显示

jznext3

decsi

jmplop3

next3:

leasi,result

movcx,9

lop4:

moval,[si]

incsi

deccx

cmpal,0;如果是0就跳过,去掉前面的0

jzlop4

decsi

inccx

lop5:

moval,[si]

cmpal,'.';是小数点就直接显示

jznext4

oral,30h;非小数点化成ascll码后显示

next4:

movdl,al

movah,02h

int21h

incsi

looplop5

popcx

popax

popbx

popsi

ret

outputendp

codeends

endstart

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

当前位置:首页 > 党团工作 > 入党转正申请

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

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