8086汇编实验第一次报告Word下载.docx
- 文档编号:19010836
- 上传时间:2023-01-03
- 格式:DOCX
- 页数:12
- 大小:352.97KB
8086汇编实验第一次报告Word下载.docx
《8086汇编实验第一次报告Word下载.docx》由会员分享,可在线阅读,更多相关《8086汇编实验第一次报告Word下载.docx(12页珍藏版)》请在冰豆网上搜索。
(1)用找到应插入数的位置作为循环结构的结束条件,把要插入数的位置前的元素均前移一个字。
从数组的尾部向头部查找,可逐字取出数组中一个数K与N比较,若K>N,则把K前移一个字,然后继续往后查找。
若K≤N,则把N插在K之前结束程序。
在arry_head-2单元中存放‘-1’,这样可以保证如果数N小于数组中所有数,那它必然大于-1,这样可以正确地把N放在数组之首,循环结束依然可以用K大于N。
(2)根据最高有效位是否为1来计数,然后用移位的方法把各位数逐次移到最高位,以测试数是否为0作为循环结束条件。
实验二:
利用逻辑右移把M中的数依次放到要比较的地址中,源变址从0开始,将M数组中的元素与0相比,大于0则跳转,小于0则求补使其变为绝对值,再比较大小,记下绝对值最大的数存入M+2n单元,偏移地址存入M+2(n+1)单元。
实验三.
将输入的数字依次与12345比较,相等则实现相对应的跳转,每跳转一次相应的计数器加1,依次计算每个数字出现的次数并放入相应的位置,转化为ASCⅡ码输出。
实验中遇到的问题及其解决方法
1、实验一
(1)忽视边界问题
考虑N与数组中所有数的大小关系。
当它大于所有数,循环次数可能为0,当它小于所有数,不允许查找范围超过数组首地址。
利用所有数均为正数的条件,在array_head-2单元中存放‘-1’,保证若N小于所有数那它必大于-1,正确地把N放在数组之首。
2、实验二调用NEG指令。
用补码表示负数解决了负数输出为正数的问题。
3、实验三在数组中包含负数时输出错误,单步调试后发现是输出语句有误,改正后正确输出了绝对值最大的数。
实验结果
见附录
建议
Dosbox工作环境与系统不兼容,无法使用,建议使用emd8086,更加简便易上手
附录
1.
(1)
datareasegment
xdw?
arry_headdw3,5,15,23,37,49,52,65,78,99
arry_enddw105
ndw32
datareaends
prognamsegment
mainprocfar
assumecs:
prognam,ds,datarea
start:
pushds
subax,ax
pushax
movax,datarea
movds,ax
movax,n
movarry_head-2,0ffffh
movsi,0
compare:
cmparry_end[si],ax
jleinsert
movbx,arry_end[si]
movarry_end[si+2],bx
subsi,2
jmpshortcompare
insert:
movarry_end[si+2],ax
ret
mainendp
prognamends
endstart
(2)
datasegment
addrdwnumber
numberdwY
countdw?
Ydw1,2,3,5,1,0,9
dataends
mainprocfar
assume:
cs:
prognam,ds:
data
movax,data
movcx,0
movbx,addr
movax,[bx]
repeat:
testax,0ffffh
jzexit
jnsshift
inccx
shift:
shlax,1
jmprepeat
exit:
movcount,cx
ret
二.
DATASEGMENT
MDW-9,2,-5,4,1,6,7,-8
nEQU$-M
DW2DUP(?
)
DATAENDS
CODESEGMENT
ASSUMECS:
CODE,DS:
DATA
START:
MOVAX,DATA
MOVDS,AX
MOVSI,0
MOVDI,0
MOVCX,n
SHRCX,1
MOVBX,0
NEXT:
MOVAX,M[SI]
CMPAX,0
JGETRUE
negAX
TRUE:
CMPBX,AX
JGGETNUM
XCHGBX,AX
MOVDI,SI
GETNUM:
INCSI
LOOPNEXT
MOVAX,M[DI]
MOV[M+n],AX
MOV[M+n+2],DI
movdl,bl
adddl,30h
movah,02h
int21h
movah,4ch
int21h
CODEENDS
ENDSTART
输入数组为-2,5,1,-6,-4,7,-8输出绝对值最大数8
三.
DATASSEGMENT
COUNTdb5dup(0)
DATASENDS
CODESSEGMENT
CODES,DS:
DATAS
pushds
subax,ax
pushax
MOVAX,DATAS
MOVDS,AX
next:
movah,01h
int21h
cmpal,'
1'
jzcompare1
2'
jzcompare2
3'
jzcompare3
4'
jzcompare4
5'
jzcompare5
jmpexit
compare1:
movcl,COUNT
addcl,1
movCOUNT[0],cl
jmpnext
compare2:
movbx,1
movcl,COUNT[bx]
movCOUNT[bx],cl
jmpnext
compare3:
movbx,2
compare4:
movbx,3
compare5:
movbx,4
movdl,COUNT[0]
adddl,30h
movah,02
int21h
movdl,COUNT[1]
movdl,COUNT[2]
movdl,COUNT[3]
movah,02
movdl,COUNT[4]
movah,4ch
CODESENDS
检验:
输入非1~5的数字会自动跳出,
输入53413,打印出10211
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 8086 汇编 实验 第一次 报告