汇编与接口实验报告2Word文档下载推荐.docx

上传人:b****5 文档编号:19455960 上传时间:2023-01-06 格式:DOCX 页数:17 大小:169.79KB
下载 相关 举报
汇编与接口实验报告2Word文档下载推荐.docx_第1页
第1页 / 共17页
汇编与接口实验报告2Word文档下载推荐.docx_第2页
第2页 / 共17页
汇编与接口实验报告2Word文档下载推荐.docx_第3页
第3页 / 共17页
汇编与接口实验报告2Word文档下载推荐.docx_第4页
第4页 / 共17页
汇编与接口实验报告2Word文档下载推荐.docx_第5页
第5页 / 共17页
点击查看更多>>
下载资源
资源描述

汇编与接口实验报告2Word文档下载推荐.docx

《汇编与接口实验报告2Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《汇编与接口实验报告2Word文档下载推荐.docx(17页珍藏版)》请在冰豆网上搜索。

汇编与接口实验报告2Word文档下载推荐.docx

某控制系统为了抗干扰,采用去极值滤波法处理采集数据,取连续6个A/D采样值(12位——双字节,低12位),要求去掉最大值和最小值,将余下4个数求平均值,用该平均值代表当前时刻系统状态的真值。

试编一程序完成这个滤波过程。

3、键盘及屏幕显示功能调用

试编一程序扫描键盘,当B键按下时,在屏幕上显示0~9循环计数;

S键按下时停止计数;

再按B键继续计数过程。

E键按下时退出程序。

4、流程图与代码

1、多字节无符号数加法:

(所用寄存器为16位)

(1)流程图:

 

(2)代码:

.MODELSMALL

.DATA

DATA1DW4321H,2265H,3333H,4444H,5555H,6666H,7777H,8888H,9999H,0AAAAH

RESULTdw?

?

.CODE

.startup

MOVSI,OFFSETDATA1;

设指针

MOVCX,10;

累加次数

MOVAX,0;

清累加器

MOVDX,0;

清进位累加器

LOP:

ADDAX,[si];

累加一个数到AX

ADCDX,0;

将进位累加到DX

INCSI;

改指针

INCSI

LOOPLOP;

循环

MOVRESULT,AX;

存结果

MOVRESULT+2,DX

.EXIT

END

(3)运行结果:

2、延时器设计(本人学号为偶数,因此以下的程序是在计算机屏幕上显示两列,第一列0---F,第二列F---0列。

主程序流程图:

延时子程序流程图:

.modelsmall

.data

data1db5dup(20H)

num1db30h

num2db46h,0ah,0dh,'

$'

.code

.startup

movcx,10h;

设循环次数

lop:

movah,09h;

显示功能调用

movdx,offsetdata1

int21h

callnearptrdelay;

调用延时子程序

incnum1

decnum2

cmpnum1,3ah

jnznext1;

num1为冒号:

时跳转next1

movnum1,41h

next1:

cmpnum2,40h

jnznext2;

num2位@时跳转next2

movnum2,39h

next2:

looplop

nop

.exit

delayprocnearusescxbx;

延时子程序

movbx,06ffh;

06ffh,设第二时常数

delay1:

movcx,0h

loop$;

自身循环CX次

decbx;

第二时常数减1

jnzdelay1;

不为零循环

ret

delayendp

end

3、单字节无符号数排序

.586

.STACK200H

numdb10

data1db3h,23h,55h,12h,89h,99h,5fh,6ah,29h,47h

.STARTUP

movbl,num;

数据个数

decbl

lop1:

movzxcx,bl;

扩展为16位

movsi,0

lop2:

moval,data1[si]

cmpal,data1[si+1]

jblop3;

[si]<

[si+1]

incsi

looplop2

jmpnext

lop3:

xchgal,data1[si+1]

movdata1[si],al

next:

jzendl

jmplop1

endl:

END

4、去极值滤波

.modelsmall

.data

datanumdb6

datasdw0123h,0abch,0234h,0345h,0456h,0567h

.code

.startup

callpx;

排序

movsi,offsetdatas+2;

掐头去尾送指针

movcx,4;

送累加次数

clc;

清进位

movax,0

qh:

addax,[si];

累加

adcdx,0

loopqh

shrax,2;

除4

mov[datas],ax;

存结果到DATAS首位

.exit

pxprocnear

movbl,datanum;

取字长

decBL

lop0:

movzxcx,bl;

送比较次数

movax,datas[si];

送前数

cmpax,datas[si+2];

与后数比较

jbejh;

若大于则跳转到jh

looplop;

循环比较

jmpnext;

一轮排序完

jh:

xchgax,datas[si+2];

交换

movdatas[si],ax

decbl;

修改比较次数

jzfinish

jmplop0

finish:

nop;

结束

pxendp

5、键盘及屏幕显示功能调用

mess1db'

pressbbutton---count'

0dh,0ah

mess2db'

presssbutton---stop'

mess3db'

pressebutton---exit'

0dh,0ah,'

mess4db'

end'

countdb5dup(20h)

count1db30h,0dh,'

movah,09h;

显示提示信息

movdx,offsetmess1

leasi,count1;

count_;

设处理指针

scan:

callnearptrdelay;

调延时、键扫程序

orbx,bx;

判有无键动

jnzscan1;

有键动,转键处理

jmpsi;

无键动,转当前处理程序

scan1:

;

键处理程序

cmpal,'

b'

jeb_proc

s'

jes_proc

e'

jee_proc

calldelay

jmpsi

b_proc:

leasi,count_;

B键处理

jmpscan

s_proc:

leasi,stop;

S键处理

e_proc:

E键处理

count_:

inccount1;

修改显示数字

moval,3ah;

比较超限

cmpal,count1

jadown;

若不超限,调显示

movcount1,30h;

超限,设启始值

down:

leadx,count;

ds:

dx

stop:

delayprocnearusescx;

movbx,300h;

设第二时常数

loop$;

movdl,0ffh;

监测键动

movah,06h;

若标志位ZF=0,表示AL有来自键盘的字符

int21h;

若标志位ZF=1,表示没有得到字符,且AL=0

jnzkey_ret;

若有键动,延时终止,转键处理

decbx;

jnzdelay1;

jmpdelay_ret

key_ret:

movbx,1;

做键动标志

delay_ret:

ret

按下B键开始计数:

按下S键停止计数:

按下E键退出:

5、总结

本次实验涉及到循环程序的设计跟冒泡排序的汇编程序编写,以及分支条件语句在汇编程序中的实现,这次实验考虑到很多寄存器位数的拓展,因为有时候进位的结果常常使程序运行结果异常,最后一个键动程序涉及到分支条件跳转,较难理解,再者,因为32位应用程序的局限性,我在自己电脑用的是轻松汇编,查询数据都要用到物理地址,不是很方便,总之,通过这次实验,实践操作能力再次提高了。

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

当前位置:首页 > 高等教育 > 工学

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

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