华南农业大学汇编语言8086习题附答案.docx
《华南农业大学汇编语言8086习题附答案.docx》由会员分享,可在线阅读,更多相关《华南农业大学汇编语言8086习题附答案.docx(85页珍藏版)》请在冰豆网上搜索。
华南农业大学汇编语言8086习题附答案
题目名称
实验一汇编语言程序结构
题目关键字
源程序结构debug
题目录入时间
2013-3-1322:
45:
26
题目内容
一、实验目的
1.掌握汇编语言程序上机过程。
2.掌握汇编语言结构.
3.了解汇编程序、连接程序、DOS系统装入和返回功能。
4.掌握用DEBUG调试汇编语言程序的方法
二、实验要求
1. 编写完整的汇编语言程序:
(1)逆序输出字符串“BASED ADDRESSING”。
(2)从键盘上输入2个一位的正数,求出它们的和(假设和不超过1位).
(3)试编写一段程序,要求在长度为100H字节的数组中,找出大于42H的无符号数的个数并存入字单元UP中;找出小于42H的无符号数的个数并存入字单元DOWN中.
2。
在DEBUG下查看程序执行的过程,以及变量值的变化.
3。
演示程序运行结果,请指导教师检查.
三、思考
1。
汇编语言程序中语句END后的标号作用是什么?
2.采用标准序结构编制源程序,用ret结束程序运行返回操作系统时,可否将语句mainproc far中的far属性去掉,为什么?
3。
一个段的大小为多少?
一定是64KB吗?
如何在DEBUG下查看程序在内存的存放情况?
四、提交内容
将各个源程序代码、exe文件压缩为RAR后提交到作业系统。
题目创建人
题目注释
1。
1.asm
DATASSEGMENT
Stringdb ”BASEDADDRESSING”
count dw $-String
DATAS ENDS
STACKSSEGMENT
STACKSENDS
CODESSEGMENT
ASSUMECS:
CODES,DS:
DATAS,SS:
STACKS
START:
MOVAX,DATAS
MOVDS,AX
movcx,count ;循环次数
leasi,count—1 ;将最后一个字符‘G’的地址给si
L:
mov ah,2
movdl,[si]
dec si
int21h
loopL
MOVAH,4CH
INT 21H
CODES ENDS
END START
1。
2。
asm
DATASSEGMENT
x db"x=$”
ydb"y=$"
z db”x+y=$"
DATASENDS
STACKSSEGMENT
STACKSENDS
CODESSEGMENT
ASSUMECS:
CODES,DS:
DATAS,SS:
STACKS
START:
MOVAX,DATAS
MOVDS,AX
mov ah,9 ;显示”x=”
lea dx,x
int 21h
movah,1 ;输入X
int21h
subal,30h
movcl,al ;将X放在CL
mov ah,9;显示”y=”
leadx,y
int21h
movah,1 ;输入Y
int21h
sub al,30h
addcl,al ;两数字相加
movah,9;显示”z=”
leadx,z
int21h
movah,2 ;显示结果
movdl,cl
adddl,30h
int 21h
MOVAH,4CH
INT 21H
CODESENDS
ENDSTART
1。
3.asm
DATAS SEGMENT
arraydb128dup(41h,43h)
up dw0
down dw 0
DATASENDS
STACKSSEGMENT
STACKSENDS
CODESSEGMENT
ASSUMECS:
CODES,DS:
DATAS,SS:
STACKS
START:
MOVAX,DATAS
MOVDS,AX
leadi,array
mov cx,256
L:
mov al,[di]
cmp al,42h
jl L1
jaL2
L1:
inc down
jmp L3
L2:
incup
jmpL3
L3:
inc di
loopL
MOVAH,4CH
INT21H
CODESENDS
ENDSTART
题目名称
实验二 程序结构与简单程序设计
题目关键字
简单程序设计
题目录入时间
2013-4-1 22:
45:
55
题目内容
一、实验目的
1.掌握汇编语言源程序结构.
2.掌握汇编语言调试方法。
二、实验要求
1。
编写完整的汇编语言程序:
(1)试编写一段程序,要求对键盘输入的小写字母用大写字母显示出来。
(2) 编写程序,从键盘接收一个小写字母,然后找出它的前导字母和后续字母,再按顺序显示这三个字符。
(3) 试编写一段程序,要求比较两个字符串string1和string2所含字符是否相等,如相等则显示“MATCH”,若不相同则显示“NO MATCH”.
(4) 编写程序,将一个包含有20个数据的数组M分成2个数组:
正数数组P和负数数组N,并分别把这两个数组中数据的个数显示出来。
2。
在DEBUG下查看程序执行的过程,以及变量值的变化。
3。
演示程序运行结果,请指导教师检查。
三、思考
1对输入的非字母字符如何处理?
2.字母“a”和“z"边界字符的处理方法是什么?
3.显示结果为多位数的时候如何输出?
四、提交内容
将各个源程序代码、exe文件,思考题的WORD文档压缩为RAR后提交到作业系统。
题目创建人
题目注释
2。
1。
asm
DATASSEGMENT
crlfdb 0ah,0dh,’$’
DATASENDS
STACKSSEGMENT
STACKSENDS
CODESSEGMENT
ASSUMECS:
CODES,DS:
DATAS,SS:
STACKS
START:
MOVAX,DATAS
MOVDS,AX
mov ah,1;输入数据会AL
int21h
pushax;将AX存进栈里
lea dx,crlf;换行
movah,9
int21h
popdx ;栈里数据放进DX,即将原先AX放进DX
subdl,20h ;小写变大写要减去20h
movah,2 ;输出
int 21h
MOVAH,4CH
INT21H
CODESENDS
END START
2.2.asm
DATASSEGMENT
Stringdb ’zabcdefghijklmnopqrstuvwxyza'
DATASENDS
STACKS SEGMENT
STACKS ENDS
CODES SEGMENT
ASSUME CS:
CODES,DS:
DATAS,SS:
STACKS
START:
MOVAX,DATAS
MOVDS,AX
leadi,String
movah,1 ;输入字母
int21h
L:
incdi ;先DI自加1,第一次就是‘a'的地址,不是‘z’
cmpal,[di];直到找到字母和输入的相匹配
jnz L
decdi ;推前成为前端字母的地址
mov cx,3 ;循环次数3
L2:
movdl,[di]
incdi
mov ah,2
int21h
loopL2
MOV AH,4CH
INT21H
CODESENDS
END START
2。
3.asm
DATASSEGMENT
String1db"thisisaprogram”
ﻩcount1dw$-String1
ﻩString2 db"thisisaprogram"
ﻩcount2dw$—String2
answer1db'match','$’
answer2db’nomatch’,'$’
DATAS ENDS
STACKSSEGMENT
STACKSENDS
CODES SEGMENT
ASSUMECS:
CODES,DS:
DATAS,SS:
STACKS
START:
MOVAX,DATAS
MOVDS,AX
movax,count1
movbx,count2
cmp ax,bx ;比较两个字符串的长度,如果不等就是不匹配
jnznext
movcx,count1 ;字符串长度
leasi,string1
leadi,string2
L:
mov al,[si]
cmpal,[di];比较两个字符串的字符,如果不等就跳
jnznext
inc si
inc di
loopL
leadx,answer1 ;能到这里说明都匹配
movah,9
int21h
jmpfinally ;跳去finally,避免顺序执行了next
next:
;显示不匹配
leadx,answer2
movah,9
int21h
finally:
MOVAH,4CH
INT21H
CODESENDS
ENDSTART
2.4。
asm
DATASSEGMENT
Mdb5dup(-1,1,2,3)
P dw0
N dw0
DATASENDS
STACKS SEGMENT
STACKSENDS
CODES SEGMENT
ASSUMECS:
CODES,DS:
DATAS,SS:
STACKS
START:
MOV AX,DATAS
MOVDS,AX
leasi,M
mov cx,20 ;循环次数
L:
moval,[si]
cmpal,0;和0比较判断正负
jlL1
jgL2
L1:
inc N
jmpL3
L2:
inc P
jmpL3
L3:
inc si
loopL
mov ax,P ;输出P
mov bl,10 ;设置除数10
div bl
movbh,ah ;将ah(余数放在bh保留)
mov dl,al ;将商显示
adddl,30h
movah,2
int21h
mov dl,bh;将余数显示
adddl,30h
movah,2
int21h
movax,N ;输出N
movbl,10
divbl
movbh,ah
movdl,al
add dl,30h
movah,2
int 21h
mov dl,bh
adddl,30h
movah,2
int 21h
MOVAH,4CH
INT 21H
CODES ENDS
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
DATAS SEGMENT
DATAdw 1dup(1,2,-1,4,-2,-6)
countdw($-DATA)/2
DATASENDS
STACKSSEGMENT
STACKSENDS
CODESSEGMENT
ASSUMECS:
CODES,DS:
DATAS,SS:
STACKS
START:
MOVAX,DATAS
MOV DS,AX
mov cx,count
leasi,DATA—2
L1:
;将第一个偶数存在AX
addsi,2
mov ax,[si]
dec cx
testal,01h
jnzL1
L2:
;找到另外一个偶数
add si,2
mov bx,[si]
cmpcx,0
jz L4
deccx
testbl,01h
jnzL2
cmpax,bx ;比较两个偶数,如果ax〉bx那么跳到L3
jgL3
jmpL2
L3:
mov ax,bx
jmpL2
L4:
MOV AH,4CH
INT21H
CODESENDS
END START
3.2.asm
DATAS SEGMENT
NUMdw0
crlfdb0dh,0ah,'$'
DATASENDS
STACKS SEGMENT
STACKSENDS
CODESSEGMENT
ASSUMECS:
CODES,DS:
DATAS,SS:
STACKS
START:
MOVAX,DATAS
MOVDS,AX
movdx,0
movcx,4
L:
mov ah,1
int 21h
cmpal,40h
jgL1
jlL2
L1:
subal,07h ;大写字母多减7
L2:
subal,30h ;变成实际数字
pushax ;原来数字*16+新接受数字
movax,NUM
movbx,16
mulbx
popbx
adcal,bl
mov NUM,ax
loopL ;循环4次
leadx,crlf
movah,9
int21h
movcx,16
movbx,NUM
L3:
movdl,31h
salbx,1 ;左移1位,改变CF
jcL4
subdl,1 ;CF为0,所以DL减去1,变成0
L4:
mov ah,2
int21h
loop L3
MOVAH,4CH
INT21H
CODESENDS
END START
3。
3。
asm
DATASSEGMENT
Stringdb128,?
128dup(’$’)
crlf db 0dh,0ah,24h
count dw0
num dw0
DATASENDS
STACKSSEGMENT
STACKS ENDS
CODESSEGMENT
ASSUME CS:
CODES,DS:
DATAS,SS:
STACKS
START:
MOVAX,DATAS
MOVDS,AX
leadx,String ;吸收字符串
movah,0ah
int 21h
leadx,crlf ;换行
movah,9
int21h
leasi,String+1;cx存放着字符串个数
movcl,[si]
movch,0
leadi,String+2 ;从实际字符串开始
L1:
moval,[di]
incdi
cmp al,30h
jlL2
cmpal,39h
jgL2
dec num ;如果是数字,先减num后加num,将其抵消
L2:
incnum
loopL1
mov cx,0
movax,num
L3:
;余数放栈,检测商是否为0,为0就退出
movbl,10
div bl
pushax
inccx ;记录余数个数
movah,0
cmpal,0
jnzL3
L4:
;将余数输出
popdx
movdl,dh
adddl,30h
movah,2
int21h
loopL4
MOV AH,4CH
INT21H
CODES ENDS
ENDSTART
3。
4。
asm
DATASSEGMENT
mem dw 0,1,2,0,0,3,2,0,5,0,0,1
countdw($-mem)/2
DATASENDS
STACKS SEGMENT
STACKSENDS
CODESSEGMENT
ASSUMECS:
CODES,DS:
DATAS,SS:
STACKS
START:
MOVAX,DATAS
MOV DS,AX
leadi,mem-2 ;先减2再恢复
movcx,count
L:
;找到0元素
cmpcx,0
jz next
adddi,2
movax,[di]
deccx
cmpax,0
jnzL
mov si,di
push cx
L2:
;找到非0元素
cmpcx,0
jz next
addsi,2
movax,[si]
dec cx
cmpax,0
jzL2
mov[di],ax;复制过去
mov wordptr[si],0 ;复制后自己变0
pop cx
jmpL
next:
MOVAH,4CH
INT 21H
CODESENDS
ENDSTART
题目名称
实验四 循环程序设计1
题目关键字
循环结构程序
题目录入时间
2013—4-22 17:
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,输出:
Must be even
如输入数3,输出:
Must begreaterthan orequalto6
2。
演示程序运行结果,请指导教师检查。
三、思考
从键盘上输入一串字符时,数据缓冲区如何定义?
题目创建人
题目注释
ﻫ4。
1.asm
DATASSEGMENT
Stringdb128,?
128dup('$')
DATASENDS
STACKS SEGMENT
STACKS ENDS
CODESSEGMENT
ASSUMECS:
CODES,DS:
DATAS,SS:
STACKS
START:
MOV AX,DATAS
MOVDS,AX
leadx,String
mov ah,0ah
int21h
leasi,String+1 ;字符串个数地址
mov cl,[si]
mov ch,0
incsi ;第一个字符地址
L:
moval,[si]
cmpal,30h
jl L1
cmpal,39h
jgL1
or cl,b;CL第五位置1
jmpnext
L1:
incsi
loop L
next:
MOVAH,4CH
INT21H
CODESENDS
END START
4.2。
asm
DATAS SEGMENT
DATAdw 1,