华南农业大学汇编语言8086习题附答案 2.docx
- 文档编号:9456302
- 上传时间:2023-02-04
- 格式:DOCX
- 页数:81
- 大小:34.59KB
华南农业大学汇编语言8086习题附答案 2.docx
《华南农业大学汇编语言8086习题附答案 2.docx》由会员分享,可在线阅读,更多相关《华南农业大学汇编语言8086习题附答案 2.docx(81页珍藏版)》请在冰豆网上搜索。
华南农业大学汇编语言8086习题附答案2
题目名称
实验一汇编语言程序结构
题目关键字
源程序结构debug
题目录入时间
2013-3-1322:
45:
26
题目内容
一、实验目的
1.掌握汇编语言程序上机过程。
2.掌握汇编语言结构。
3.了解汇编程序、连接程序、DOS系统装入和返回功能。
4.掌握用DEBUG调试汇编语言程序的方法
二、实验要求
1.编写完整的汇编语言程序:
(1)逆序输出字符串“BASEDADDRESSING”。
(2)从键盘上输入2个一位的正数,求出它们的和(假设和不超过1位)。
(3)试编写一段程序,要求在长度为100H字节的数组中,找出大于42H的无符号数的个数并存入字单元UP中;找出小于42H的无符号数的个数并存入字单元DOWN中。
2.在DEBUG下查看程序执行的过程,以及变量值的变化。
3.演示程序运行结果,请指导教师检查。
三、思考
1.汇编语言程序中语句END后的标号作用是什么?
2.采用标准序结构编制源程序,用ret结束程序运行返回操作系统时,可否将语句mainprocfar中的far属性去掉,为什么?
3.一个段的大小为多少?
一定是64KB吗?
如何在DEBUG下查看程序在内存的存放情况?
四、提交内容
将各个源程序代码、exe文件压缩为RAR后提交到作业系统。
题目创建人
题目注释
1.1.asm
DATASSEGMENT
Stringdb"BASEDADDRESSING"
countdw$-String
DATASENDS
STACKSSEGMENT
STACKSENDS
CODESSEGMENT
ASSUMECS:
CODES,DS:
DATAS,SS:
STACKS
START:
MOVAX,DATAS
MOVDS,AX
movcx,count;循环(xúnhuán)次数
leasi,count-1;将最后(zuìhòu)一个字符‘G’的地址(dìzhǐ)给si
L:
movah,2
movdl,[si]
decsi
int21h
loopL
MOVAH,4CH
INT21H
CODESENDS
ENDSTART
1.2.asm
DATASSEGMENT
xdb"x=$"
ydb"y=$"
zdb"x+y=$"
DATASENDS
STACKSSEGMENT
STACKSENDS
CODESSEGMENT
ASSUMECS:
CODES,DS:
DATAS,SS:
STACKS
START:
MOVAX,DATAS
MOVDS,AX
movah,9;显示(xiǎnshì)"x="
leadx,x
int21h
movah,1;输入(shūrù)X
int21h
subal,30h
movcl,al;将X放在CL
movah,9;显示(xiǎnshì)"y="
leadx,y
int21h
movah,1;输入(shūrù)Y
int21h
subal,30h
addcl,al;两数字(shùzì)相加
movah,9;显示"z="
leadx,z
int21h
movah,2;显示结果
movdl,cl
adddl,30h
int21h
MOVAH,4CH
INT21H
CODESENDS
ENDSTART
1.3.asm
DATASSEGMENT
arraydb128dup(41h,43h)
updw0
downdw0
DATASENDS
STACKSSEGMENT
STACKSENDS
CODESSEGMENT
ASSUMECS:
CODES,DS:
DATAS,SS:
STACKS
START:
MOVAX,DATAS
MOVDS,AX
leadi,array
movcx,256
L:
moval,[di]
cmpal,42h
jlL1
jaL2
L1:
incdown
jmpL3
L2:
incup
jmpL3
L3:
incdi
loopL
MOVAH,4CH
INT21H
CODESENDS
ENDSTART
题目名称
实验二程序结构与简单程序设计
题目关键字
简单程序设计
题目录入时间
2013-4-122:
45:
55
题目内容
一、实验目的
1.掌握汇编语言源程序结构。
2.掌握汇编语言调试方法。
二、实验要求
1.编写完整的汇编语言程序:
(1)试编写一段程序,要求对键盘输入的小写字母用大写字母显示出来。
(2)编写程序,从键盘接收一个小写字母,然后找出它的前导字母和后续字母,再按顺序显示这三个字符。
(3)试编写一段程序,要求比较两个字符串string1和string2所含字符是否相等,如相等则显示“MATCH”,若不相同则显示“NOMATCH”.
(4)编写程序,将一个包含有20个数据的数组M分成2个数组:
正数数组P和负数数组N,并分别把这两个数组中数据的个数显示出来。
2.在DEBUG下查看程序执行的过程,以及变量值的变化。
3.演示程序运行结果,请指导教师检查。
三、思考
1对输入的非字母字符如何处理?
2.字母“a”和“z”边界字符的处理方法是什么?
3.显示结果为多位数的时候如何输出?
四、提交内容
将各个源程序代码、exe文件,思考题的WORD文档压缩为RAR后提交到作业系统。
题目创建人
题目注释
2.1.asm
DATASSEGMENT
crlfdb0ah,0dh,'$'
DATASENDS
STACKSSEGMENT
STACKSENDS
CODESSEGMENT
ASSUMECS:
CODES,DS:
DATAS,SS:
STACKS
START:
MOVAX,DATAS
MOVDS,AX
movah,1;输入(shūrù)数据会AL
int21h
pushax;将AX存进栈里
leadx,crlf;换行
movah,9
int21h
popdx;栈里数据放进DX,即将(jíjiāng)原先AX放进DX
subdl,20h;小写(xiǎoxiě)变大写要减去20h
movah,2;输出(shūchū)
int21h
MOVAH,4CH
INT21H
CODESENDS
ENDSTART
2.2.asm
DATASSEGMENT
Stringdb'zabcdefghijklmnopqrstuvwxyza'
DATASENDS
STACKSSEGMENT
STACKSENDS
CODESSEGMENT
ASSUMECS:
CODES,DS:
DATAS,SS:
STACKS
START:
MOVAX,DATAS
MOVDS,AX
leadi,String
movah,1;输入(shūrù)字母
int21h
L:
incdi;先DI自加1,第一次就是(jiùshì)‘a’的地址,不是‘z’
cmpal,[di];直到找到字母和输入的相匹配
jnzL
decdi;推前成为(chéngwéi)前端字母的地址
movcx,3;循环(xúnhuán)次数3
L2:
movdl,[di]
incdi
movah,2
int21h
loopL2
MOVAH,4CH
INT21H
CODESENDS
ENDSTART
2.3.asm
DATASSEGMENT
String1db"thisisaprogram"
count1dw$-String1
String2db"thisisaprogram"
count2dw$-String2
answer1db'match','$'
answer2db'nomatch','$'
DATASENDS
STACKSSEGMENT
STACKSENDS
CODESSEGMENT
ASSUMECS:
CODES,DS:
DATAS,SS:
STACKS
START:
MOVAX,DATAS
MOVDS,AX
movax,count1
movbx,count2
cmpax,bx;比较两个字符串的长度,如果不等就是(jiùshì)不匹配
jnznext
movcx,count1;字符串长度(chángdù)
leasi,string1
leadi,string2
L:
moval,[si]
cmpal,[di];比较(bǐjiào)两个字符串的字符,如果不等就跳
jnznext
incsi
incdi
loopL
leadx,answer1;能到这里说明(shuōmíng)都匹配
movah,9
int21h
jmpfinally;跳去finally,避免(bìmiǎn)顺序执行了next
next:
;显示(xiǎnshì)不匹配
leadx,answer2
movah,9
int21h
finally:
MOVAH,4CH
INT21H
CODESENDS
ENDSTART
2.4.asm
DATASSEGMENT
Mdb5dup(-1,1,2,3)
Pdw0
Ndw0
DATASENDS
STACKSSEGMENT
STACKSENDS
CODESSEGMENT
ASSUMECS:
CODES,DS:
DATAS,SS:
STACKS
START:
MOVAX,DATAS
MOVDS,AX
leasi,M
movcx,20;循环(xúnhuán)次数
L:
moval,[si]
cmpal,0;和0比较判断正负
jlL1
jgL2
L1:
incN
jmpL3
L2:
incP
jmpL3
L3:
incsi
loopL
movax,P;输出(shūchū)P
movbl,10;设置(shèzhì)除数10
divbl
movbh,ah;将ah(余数(yúshù)放在bh保留)
movdl,al;将商显示(xiǎnshì)
adddl,30h
movah,2
int21h
movdl,bh;将余数(yúshù)显示
adddl,30h
movah,2
int21h
movax,N;输出N
movbl,10
divbl
movbh,ah
movdl,al
adddl,30h
movah,2
int21h
movdl,bh
adddl,30h
movah,2
int21h
MOVAH,4CH
INT21H
CODESENDS
ENDSTART
题目名称
实验三分支程序设计
题目关键字
分支结构
题目录入时间
2013-4-1420:
14:
57
题目内容
一、实验目的
1.掌握汇编语言源程序结构。
2.掌握汇编语言分支结构程序设计方法。
二、实验要求
1.编写完整的汇编语言程序:
(1)试编写一段程序,求出首地址为DATA的100D字数组中的最小偶数,并把它存放在AX中。
(2)编写一段程序,从键盘接收一个四位的十六进制数,并在终端上显示与它等值的二进制数。
(3)键盘上输入一系列以$为结束符的字符串,然后对其中的非数字字符计数,并显示计数结果。
(4)有一个首地址为mem的100个字的数组,试编制程序删除数组中所有为零的项,并将后续项向前压缩,最后将数组的剩余部分补上零。
2.在DEBUG下查看程序执行的过程,以及变量值的变化。
3.演示程序运行结果,请指导教师检查。
三、思考
1.求极值时程序初始化应该注意什么?
2.如何从键盘上输入多位数?
3.第(4)小题有多少种做法?
四、提交内容
将各个源程序代码、exe文件以及思考题压缩为RAR后提交到作业系统。
提交时请填写自评内容。
题目创建人
题目注释
3.1.asm
DATASSEGMENT
DATAdw1dup(1,2,-1,4,-2,-6)
countdw($-DATA)/2
DATASENDS
STACKSSEGMENT
STACKSENDS
CODESSEGMENT
ASSUMECS:
CODES,DS:
DATAS,SS:
STACKS
START:
MOVAX,DATAS
MOVDS,AX
movcx,count
leasi,DATA-2
L1:
;将第一个偶数(ǒushù)存在AX
addsi,2
movax,[si]
deccx
testal,01h
jnzL1
L2:
;找到另外一个(yīɡè)偶数
addsi,2
movbx,[si]
cmpcx,0
jzL4
deccx
testbl,01h
jnzL2
cmpax,bx;比较两个偶数,如果(rúguǒ)ax>bx那么跳到L3
jgL3
jmpL2
L3:
movax,bx
jmpL2
L4:
MOVAH,4CH
INT21H
CODESENDS
ENDSTART
3.2.asm
DATASSEGMENT
NUMdw0
crlfdb0dh,0ah,'$'
DATASENDS
STACKSSEGMENT
STACKSENDS
CODESSEGMENT
ASSUMECS:
CODES,DS:
DATAS,SS:
STACKS
START:
MOVAX,DATAS
MOVDS,AX
movdx,0
movcx,4
L:
movah,1
int21h
cmpal,40h
jgL1
jlL2
L1:
subal,07h;大写字母多减7
L2:
subal,30h;变成实际(shíjì)数字
pushax;原来数字(shùzì)*16+新接受数字
movax,NUM
movbx,16
mulbx
popbx
adcal,bl
movNUM,ax
loopL;循环(xúnhuán)4次
leadx,crlf
movah,9
int21h
movcx,16
movbx,NUM
L3:
movdl,31h
salbx,1;左移1位,改变(gǎibiàn)CF
jcL4
subdl,1;CF为0,所以(suǒyǐ)DL减去1,变成0
L4:
movah,2
int21h
loopL3
MOVAH,4CH
INT21H
CODESENDS
ENDSTART
3.3.asm
DATASSEGMENT
Stringdb128,?
128dup('$')
crlfdb0dh,0ah,24h
countdw0
numdw0
DATASENDS
STACKSSEGMENT
STACKSENDS
CODESSEGMENT
ASSUMECS:
CODES,DS:
DATAS,SS:
STACKS
START:
MOVAX,DATAS
MOVDS,AX
leadx,String;吸收(xīshōu)字符串
movah,0ah
int21h
leadx,crlf;换行
movah,9
int21h
leasi,String+1;cx存放(cúnfàng)着字符串个数
movcl,[si]
movch,0
leadi,String+2;从实际(shíjì)字符串开始
L1:
moval,[di]
incdi
cmpal,30h
jlL2
cmpal,39h
jgL2
decnum;如果(rúguǒ)是数字,先减num后加num,将其抵消
L2:
incnum
loopL1
movcx,0
movax,num
L3:
;余数放栈,检测商是否(shìfǒu)为0,为0就退出
movbl,10
divbl
pushax
inccx;记录(jìlù)余数个数
movah,0
cmpal,0
jnzL3
L4:
;将余数输出
popdx
movdl,dh
adddl,30h
movah,2
int21h
loopL4
MOVAH,4CH
INT21H
CODESENDS
ENDSTART
3.4.asm
DATASSEGMENT
memdw0,1,2,0,0,3,2,0,5,0,0,1
countdw($-mem)/2
DATASENDS
STACKSSEGMENT
STACKSENDS
CODESSEGMENT
ASSUMECS:
CODES,DS:
DATAS,SS:
STACKS
START:
MOVAX,DATAS
MOVDS,AX
leadi,mem-2;先减2再恢复(huīfù)
movcx,count
L:
;找到0元素(yuánsù)
cmpcx,0
jznext
adddi,2
movax,[di]
deccx
cmpax,0
jnzL
movsi,di
pushcx
L2:
;找到非0元素(yuánsù)
cmpcx,0
jznext
addsi,2
movax,[si]
deccx
cmpax,0
jzL2
mov[di],ax;复制(fùzhì)过去
movwordptr[si],0;复制(fùzhì)后自己变0
popcx
jmpL
next:
MOVAH,4CH
INT21H
CODESENDS
ENDSTART
题目名称
实验四循环程序设计1
题目关键字
循环结构程序
题目录入时间
2013-4-2217:
28:
16
题目内容
一、实验目的
1.掌握汇编语言源程序结构。
2.掌握汇编语言循环结构程序设计方法。
二、实验要求
1.编写完整的汇编语言程序:
(1)从键盘上输入一串字符(用回车键结束,使用10号功能调用。
)放在STRING中,试编制一个程序测试字符串中是否存在数字。
如有,则把CL的第5位置1,否则将该位置置0。
(2)在首地址为DATA的字数组中,存放了100H个16位补码数,试编写一个程序,求出它们的平均值放在AX寄存器中;并求出数组中有多少个数小于此平均值,将结果放在BX寄存器中。
(3)已知数组A包含15个互不相等的整数,数组B包含20个互不相等的整数。
试编制一个程序,把既在A中又在B中出现的整数存放于数组C1中。
(4)简化的歌德巴赫猜想:
任何一个大于6的偶数均可以表示为两个素数之和。
现从键盘输入一个0~65535之间的无符号整数,试验证歌德巴赫猜想。
如输入数12,输出:
12=5+7
如输入数20,输出:
20=3+17
20=7+13
如输入数7,输出:
Mustbeeven
如输入数3,输出:
Mustbegreaterthanorequalto6
2.演示程序运行结果,请指导教师检查。
三、思考
从键盘上输入一串字符时,数据缓冲区如何定义?
题目创建人
题目注释
4.1.asm
DATASSEGMENT
Stringdb128,?
128dup('$')
DATASENDS
STACKSSEGMENT
STACKSENDS
CODESSEGMENT
ASSUMECS:
CODES,DS:
DATAS,SS:
STACKS
START:
MOVAX,DATAS
MOVDS,AX
leadx,String
movah,0ah
int21h
leasi,String+1;字符串个数地址(dìzhǐ)
movcl,[si]
movch,0
incsi;第一个字符(zìfú)地址
L:
moval,[si]
cmpal,30h
jlL1
cmpal,39h
jgL1
orcl,00001000b;CL第五(dìwǔ)位置1
jmpnext
L1:
incsi
loopL
next:
MOVAH,4CH
INT21H
CODESENDS
ENDSTART
4.2.asm
DATASSEGMENT
DATAdw1,2,3,4,5,6,7,8,9,10
countdw($-DATA)/2
DATASENDS
STACKSSEGMENT
STACKSENDS
CODESSEGMENT
ASSUMECS:
CODES,DS:
DATAS,SS:
STACKS
START:
MOVAX,DATAS
MOVDS,AX
movdx,0
movax,0
movcx,count
leasi,DATA
L:
;计算(jìsuàn)总数
movbx,[si]
addax,bx
addsi,2
loopL
movbx,count;求平均值
divbx
leasi,DATA
movcx,count;设置(shèzhì)循环个数
movbx,0;初始化
L2:
movdx,[si]
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 华南农业大学汇编语言8086习题附答案 华南 农业大学 汇编语言 8086 习题 答案