汇编语言期中试题答案Word下载.docx
- 文档编号:16455833
- 上传时间:2022-11-23
- 格式:DOCX
- 页数:17
- 大小:83.31KB
汇编语言期中试题答案Word下载.docx
《汇编语言期中试题答案Word下载.docx》由会员分享,可在线阅读,更多相关《汇编语言期中试题答案Word下载.docx(17页珍藏版)》请在冰豆网上搜索。
(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
00H
22H
11H
0FEH
11111111B
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:
Start:
Movds,ax
LeaSI,BYTE_TBL
MOVCX,5;
送入循环次数,如送入cl,ch必先清0
XORBL,BL
LOP:
ADDBL,[SI];
累加
LOOPLOP;
cl减1后循环
MOVCL,BL
Codeends
Endstart
五、程序阅读(阅读程序并绘制流程,共10分)
Msg1db"
Pleaseinputthefirststring:
$"
Msg2db"
Pleaseinputthesecondstring:
Ensgdb0ah,0dh,'
$'
sdb100,0,100dup(0)
s1db100,0,100dup(0)
dsp1db"
s>
=s1$"
dsp2db"
s<
s1$"
codesegment
moves,ax
leadx,Msg1
movah,09h
leadx,s
movah,0ah
leadx,Ensg
leadx,msg2
leadx,s1
leadx,ensg
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
jbnext4
next3:
leadx,dsp1
jmpnext5
next4:
leadx,dsp2
next5:
movah,09h
codeends
JAJB
JA
JB
JZ
六、用汇编语言重写下面的C语言程序。
(共15分)。
intmain()
{
intsum=0,n,i=0;
printf(“Pleaseinputintegern:
\n”);
scanf(“%d”,&
n);
while(i<
n){
sum+=i;
i=i+1;
}
printf(“sum=%d\n”,sum);
return1;
}
Msg1db"
Pleaseinputintegern:
Msg2db"
TheSUMare:
EntMsgdb0ah,0dh,'
numdw0
tamountdw0;
累加结果
resultdb8dup(0)
db200dup(0)
callinone
movnum,dx;
num获取累加总数
callcompute;
计算累加结果后存入tamount
leadx,Msg2
calloutput
exit1:
movah,4ch
inoneproc;
结果按小数点后面有几位,扩大相应倍数后存在dx
pushax
pushbx
pushcx
xordx,dx
lop2:
movah,01h
cmpal,0dh
jzextp1
cmpal,'
.'
jznext
andal,0fh
movcl,al
movax,dx
movbx,10
mulbx
movdx,ax
movch,0
adddx,cx
jmplop2
extp1:
popcx
popbx
popax
ret
inoneendp
computeproc;
pushdx
xorcx,cx
movcx,num
xorax,ax
movbx,1
lop1:
addax,bx;
开始累加
incbx
looplop1
movtamount,ax
popdx
popcx
computeendp
outputproc
pushsi
leasi,result
addsi,8;
si指尾
movax,tamount
movbx,10;
作为除数
lop3:
xordx,dx
divbx
mov[si],dl;
每次把余数放入相应位子
inccx
cmpcx,0;
比较是倒数第0位时,赋小数点(无小数)
jnznext2
moval,'
mov[si],al
cmpax,0;
;
比较ax(原数)是否除到头了,是就结束去显示
jznext3
jmplop3
leasi,result
movcx,9
lop4:
moval,[si]
incsi
deccx
cmpal,0;
如果是0就跳过,去掉前面的0
jzlop4
inccx
lop5:
是小数点就直接显示
jznext4
oral,30h;
非小数点化成ascll码后显示
movdl,al
movah,02h
looplop5
popsi
outputendp
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 汇编语言 期中 试题答案