




已阅读5页,还剩17页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
目 录实验一 数据传送2实验二 算术运算8实验三 代码转换14实验四 程序的基本结构练习20实验五 存储器(ram 6264)扩展25实验六 可编程并行接口(8255)扩展28实验七 可编程计数/定时器(8253)扩展34实验八 a/d、d/a转换45实验九 可编程串行通信接口(8251)扩展53 22实验一:数据传送实验学时:2实验类型:验证实验要求:必修一实验目的1学习程序设计的基本方法和技能,掌握用汇编语言设计、编写、调试和运行程序的方法;学习用全屏幕编辑软件qedit.exe建立源程序(.asm文件);学习用汇编软件masm.exe对源文件汇编产生目标文件(.obj文件);学习用连接程序link.exe对目标文件产生可执行文件(.exe文件);学习用调试软件td.exe调试可执行文件;2掌握各种寻址方法以及简单指令的执行过程。二实验器材pc机三实验组织运行要求1利用堆栈实现ax的内容与bx的内容进行交换。堆栈指针sp=2000h,ax=3000h,bx=5000h;2汇编、调试、观察、记录结果;用qedit.exe软件输入汇编语言源程序,以.asm格式文件存盘;用masm对源程序进行汇编产生二进制目标文件(.obj文件),再用连接程序link产生可执行文件(.exe文件);用调试软件td调试、运行程序,观察、记录结果。四实验步骤1进入子目录e:sy86后,利用qedit.exe(简称q)送入以下汇编语言源程序,并以 m1.asm文件存盘汇编语言程序的上机过程进入sy86子目录e:cdsy868 e:sy86进入qedit.exe 编辑界面e:sy86 q8 输入文件名*.asm(如m1.asm)后,输入源程序源程序datasegmentparapublicdata ;数据段定义db512dup(0) dataends stack segment parastackstack ;堆栈段定义db512dup(?)stackends codesegmentparapubliccode ;代码段定义assumecs:code,ds:data,es:data,ss:stackmainproc far ;定义过程程序push dsmov ax,0push axmov ax,datamov ds,axmov es,ax movsp,2000hmovax,3000hmovbx,5000hpushaxpushbxpopaxpopbxretmain endp ;结束主要部分程序code ends ;结束代码段end main ;结束汇编用masm程序产生.obj文件操作如下:e:sy86 masm m1.asm m1.obj8microsoft(r)macro assembler version 5.00copyright(c)microsoft corp 1981-1985,1987. all rights reserved.object filenamehexasc.obj:8source listingnul.lst:8cross-reference nul.crf:851576+385928 bytes symbol space free0 warning errors0 severe errors以上说明汇编过程已经完成。用link程序产生exe文件操作如下:e:sy86link m1.obj8microsoft(r)overlay linker version 3.60copyright(c)microsoft corp 1983-1987. all rights reserved. run file m1.exe:8list file nul.map:8libraries .lib:8e:sy86link程序输出3个文件:.exe文件;.lib库文件;.map列表文件。连接过程全部完成,可以执行程序;在td状态下用单步运行f8对m1.exe文件进行调试,观察、记录结果。e:sy86td8进入td调试软件后用单步执行f8命令从首地址开始执行指令并观察相应变化。运行结果如下:f88 ax=0000 bx=0000 cx=000d dx=0000 sp=2000 bp=0000 si=0000 di=0000 ds=17f7 es=17f7 ss=17f7 cs=17f7 ip=0103 nv up di pl nz na po nc 17f7:0103 b80030movax,3000f88 ax=3000 bx=0000 cx=000d dx=0000 sp=2000 bp=0000 si=0000 di=0000 ds=17f7 es=17f7 ss=17f7 cs=17f7 ip=0106 nv up di pl nz na po nc 17f7:0106 bb0050movbx,5000f88 ax=3000 bx=5000 cx=000d dx=0000 sp=2000 bp=0000 si=0000 di=0000 ds=17f7 es=17f7 ss=17f7 cs=17f7 ip=0109 nv up di pl nz na po nc 17f7:0109 50pushaxf88ax=3000 bx=5000 cx=000d dx=0000 sp=1ffe bp=0000 si=0000 di=0000 ds=17f7 es=17f7 ss=17f7 cs=17f7 ip=010a nv up di pl nz na po nc 17f7:010a 53pushbxf88 ax=3000 bx=5000 cx=000d dx=0000 sp=1ffc bp=0000 si=0000 di=0000 ds=17f7 es=17f7 ss=17f7 cs=17f7 ip=010b nv up di pl nz na po nc 17f7:010b 58popaxf88 ax=5000 bx=5000 cx=000d dx=0000 sp=1ffe bp=0000 si=0000 di=0000 ds=17f7 es=17f7 ss=17f7 cs=17f7 ip=010c nv up di pl nz na po nc 17f7:010c 5bpopbxf88 ax=5000 bx=3000 cx=000d dx=0000 sp=2000 bp=0000 si=0000 di=0000 ds=17f7 es=17f7 ss=17f7 cs=17f7 ip=010d nv up di pl nz na po nc17f7:010d f4hlt2用以上同样的方法,完成下列程序的调试:编辑、汇编、连接、运行程序,观察、记录结果。输入以下汇编程序(分号 “;” 后面内容不需输入)用单步运行执行程序,按分号后的要求记录结果。源程序datasegment para public datadataendsstacksegment para stack stackdb512 dup (?)stack endscodesegment para public codeassumecs:code,ds:data,es:data,ss:stackstartproc farpushdsmovax,0pushaxmovax,datamov ds,axmov es,ax movax,2000h;ah=20hmovds,ax ;al=00hds=2000hmovss,ax;ss=2000hax=2000hmovbx,2030h;bh=20hbl=30hmovsi,bx;si=2030hmovdi,3040h;di=3040hmovsi,di;si=3040hmovsp,50ffh;sp=50ffhmovdx,sp;dh=50hdl=0ffhmovcl,25;cl=25(19h)movbl,cl;cl=19hbl=19hmovah,0f0h;ah=0f0hmovch,ah;ch=0f0hmovbyte ptrdi,64;(di)=40hmovword ptrsi,256;(si)=00h (si+1)=01hmovdl,si+1;dl=01hmovdh,1+si;dh=01hmoval,1si;al=01hmovword ptrbxsi,34;(bx+si)=22h(bx+si+1)=00hmovbx+si+4,bl;(bx+si+4)=19hmovbp,2bx+di;bp=0100hmovbp,al;(bp)=01hmovax,bpdi;ax=8b00hmovbl,al;bl=00hmoves,bx;es=2000hpushbx;sp=50fdh(sp,sp+1)=2000hpushdi;sp=50fbh(sp,sp+1)=3040hpopcx;sp=50fdhcx=3040hpopdx;sp=50ffhdx=2000hxchgax,bp;ax=0101hbp=8b00hxchgdh,bl;dh=00hbl=20hlahf;flag=nv up di pl nz na po nc;flag=00000000;ah=02hsahf;flag=nv up di pl nz na po nc;flag=00000000;ah=02hpushf;sp=50fdh(sp,sp+1)=3102hpopf;sp=50fdh;flag= nv up di pl nz na po nc;flag=00000000nopstartendpcodeendsendstart以文件名“e2”存盘;单步运行程序,每运行一条指令即检查相应结果并予以记录;利用断点运行、跟踪运行和全速运行等功能调试程序、运行程序并检查结果。运行结果:各寄存器及内存变化如上。五思考题常用的数据传送指令有几种类型?试归纳并举例说明。答:常用的数据传送指令有四种类型:1.通用数据传送指令mov oprd1,oprd2例:mov ax,2000h;ax=2000h压栈指令 push oprd出栈指令 pop oprd例:push ax;sp=sp-2,(sp,sp+1)=ax pop ax;ax=(sp,sp+1),sp=sp+2交换指令 xchg pord1,oprd2例:mov ax,02ffh mov bp,0001hxchg ax,bp;ax=0001h,bp=02ffh2.累加器专用传送指令输入、输出指令 in、out例:in ax,dx;ax=( dx+1, dx) out dx,ax;( dx+1, dx) =ax换码指令 xlat例:xlat;al=(bx+al)3.地址传送指令有效地址送寄存器 lea reg,src例:lea si,dat1;si=addr(dat1)指针送ds和寄存器 lds reg,src例:lds di,bx;di=(ds16+bx),ds=(ds16+bx+2)指针送es和寄存器 les reg,src例:les di,bx;di=(ds16+bx),es=(ds16+bx+2)4.标志寄存器传送指令标志传送指令 例:lahf;ahpsw的低字节 sahf;psw的低字节ah标志进、出栈 例:pushf;spsp-2,(sp+1,sp)psw popf;psw(sp+1,sp),spsp+2实验二:算术运算实验学时:2实验类型:设计实验要求:必修一实验目的1验证算术运算基本指令;2正确使用加、减、乘、除程序,为设计综合算术运算程序打好基础;3学习独立编程;4深入学习、掌握td调试软件的使用方法。二实验器材pc机三实验内容及步骤1加、减法运算要求调试以下程序源程序datasegment para public datadataendsstacksegment para stack stackdb512 dup (?)stack endscodesegment para public codeassumecs:code,ds:data,es:data,ss:stackstartproc farpushdsmovax,0pushaxmovax,datamov ds,axmov es,ax mov ax,2040h;ah=20h,al=40h,cf=0addal,ah;ah=20h,al=60h,cf=0movcx,257;cx=0101h,cf=0mov si,ax;si=2060h,subsi,cx;si=1f5fh,cx=010h,cf=0subch,cl;ch=00h,cl=01h,cf=0adcax,cx;ax=2061h,cx=0001h, cf=0movword ptr si,513;(si,si+1)=0201hadc si,al ;(si,si+1)=0262h,cf=0sbbax,si;ax=1dffh,cf=0incbyte ptr si+1 ;(si,si+1)=0362hdecbyte ptr si;(si,si+1)=0361hdaa;ah=1dh, al=65h, af=1,cf=1aaa;ah=1eh, al=0bh, af=1,cf=1retstart endpcode endsend start运行结果:各寄存器及内存数据如上。2加、减法程序设计要求试设计、编写程序,计算(up1)+(up2)-(up3),结果存放在dx中。如25+48-19=?其中up1、up2、up3的内容均为二位十进制数,并以非压缩bcd码格式存入存储器:(up1)= 0205h,(up2)= 0408h,(up3)= 0109hup1 = 2050h, up2 = 2150h, up3 =2250h源程序datasegment para public datadataendsstacksegment para stack stackdb512 dup (?)stack endscodesegment para public codeassumecs:code,ds:data,es:data,ss:stackstartproc farpushdsmovax,0pushaxmovax,datamov ds,axmov es,ax mov ax,0000mov dx,0000mov si,2050hmov di,2150hmov bp,2250hmov word ptrsi,0205hmov word ptrdi,0408hmov word ptrbp,0109hmov al,si;送被加数低8位add al,di;低8位相加aaa;加法ascii调整mov dl,al;暂存mov al,si+1;送被加数高8位adc al,di+1;带进位加aaa;加法ascii调整xchg al,dl;al与dl交换sub al,bp;和的低8位减减数的低8位aas;减法ascii调整xchg al,dl;al与dl交换,存低8位结果sbb al,bp+1;高8位带进位减aas;减法ascii调整mov dh,al;存高8位结果retstartendpcodeendsendstart运行结果:dx=0504h3乘法程序设计要求:试设计、编写程序,计算(a)(b)。a、b表示内存单元,分别存放着二个用非压缩bcd码表示的十进制数(如34、56)。内存单元(a)=04h,(a1)=03h,内存单元(b)=06h,(b1)=05h,计算结果应为非压缩的bcd码表示的十进制数,存放在以c为首地址的4个连续内存字节单元中。设内存单元a=2200h、b=2220h、c=2240h;源程序datasegment para public datadataendsstacksegment para stack stackdb512 dup (?)stack endscodesegment para public codeassumecs:code,ds:data,es:data,ss:stackstartproc farpushdsmovax,0pushaxmovax,datamov ds,axmov es,ax mov ax,0mov bx,0mov di,223ahmov si,2230hmov al,04h;被乘数低8位送almov bl,06h;乘数低8位送blmul bl;相乘,al=18h,cf=0aam;调整,ah=02h,al=04hmov word ptr di,ax;存结果,(di,di +1)= 04h,02hmov al,03h;被乘数高8位送almul bl;被乘数高8位乘以乘数低8位,al=12h,cf=0aam;调整,ah=01h,al=08hadd al,di+1;部分积相加,al=0ahaaa;调整,ah=02h,al=00h,af=1,cf=1mov word ptr di+1,ax;存结果,(di +1,di +2)= 00h,02hmov al,04h;被乘数低8位送almov bl,05h;乘数高8位送blmul bl;相乘,al=14haam;调整,ah=02h,al=00hmov word ptrsi,ax;存结果,(si,si +1)= 00h,02hmov al, 03h;被乘数高8位送almul bl;被乘数高8位乘以乘数高8位,al=0fhaam;调整,ah=01h,al=05hadd al,si+1;部分积相加,al=07haaa;调整,ah=01h,al=07h,af=0,cf=0mov word ptr si+1,ax;存结果,(si+1,si +2)= 07h,01hmov al,di;al=04hmov bp,2240h;乘积首址2240hmov bp,al ;存积低位,(2240h)=04hmov al,di+1add al.si+1aaa;调整,ah=01h,al=00h,af=0,cf=0mov bp+1,al;存积低位加1,(2241h)=00hmov al,di+2 ;al=02hadc al,si+1 ;al=09h,af=0,cf=0aaa;调整,ah=01h,al=09hmov bp+2,al;存积低位加2,(2242h)=09hmov al,0adc al,si+2 ;al=01h,af=0,cf=0aaa;调整,ah=01h,al=01hmov bp+3,al;存积高位,(2243h)=01hretstartendpcodeendsendstart运行结果:(2243h)=01h,(2242h)=09h,(2241h)=00h,(2240h)=04h;积=1904h4除法程序设计(选做)要求试设计、编写程序,计算(a)(b),a、b表示内存单元,数据自定。其中除数(b)是16位十六进制数,存放在bx中;被除数(a)是32位十六进制数,高16位存放在dx,低16位存放在ax中;结果为32位十六进制数的商存放在bx:ax中;16位十六进制余数存放在dx中。设置数据时如果除数等于零或者商大于16位,则应考虑溢出处理。源程序(避免溢出的除法程序)stack segment para stack stack dw32 dup(0)stackendsdata segment para datadata endscode segment para code assume cs:code,ds:data,ss:stackdivuo proc far push ds mov ax,0 push ax mov ax,data mov ds,ax mov ax,1fcdh;被除数低16位 mov dx,3b78h;被除数高16位 mov bx,7c9ah;16位除数 cmp bx,0;除数=0? jnz dvrok;不为零,转 div bx;为零,除 jmp short go_dosdvrok:push es push di push cx mov di,0;取出当前的int 0向量并保存之 mov es,di push es:di push es:di+2 lea cx,ovr_int;获得int 0向量 mov es:di,cxmov cx,seg ovr_int mov es:di+2,cx div bx;做除法 sub bx,bxrestore:pop es:di+2;恢复 int 0 向量 pop es:di pop cx pop di pop esgo_dos:retovr_int:pop cx lea cx,restore push cx push ax mov ax,dx sub dx,dx div bx pop cx push ax mov ax,cx div bx pop bxiretdivuoendpcodeendsenddivuo运行结果:商bx:ax=7a2eh,余数dx=5821h程序流程框图开始y除数为0?int0 中断做除法ny有溢出?int0 中断转ovr-int处理放除数、被除数n结束四思考题1若对两个带符号的双精度数作加、减法运算,该怎样处理。 答:如果对两个带符号的双精度数作加、减法运算,则运算应按照带符号的加、减法考虑。2在编写乘法程序时,若(b)是一个带符号非压缩的bcd码,则程序应该怎样编写。答:如果乘数是一个带符号非压缩的bcd码,则运算应按照带符号的乘法考虑。首先保存被乘数和乘数的符号位,正常运算后,在结果加上符号位。实验三:代码转换实验学时:2实验类型:设计实验要求:必修一实验目的1设计常见的代码转换程序,通过实际操作,调试并检验所设计程序的正确性;2提高独立编程的能力。二实验器材pc机三实验内容1十六进制数ascii码要求:试设计、编写程序,将一个十六进制数0fbe9h转换为ascii码并在屏幕上显示出来。源程序 name hexascdata segment para public datahex dw 0ebf9hasc db 20 dup(0)data endsstack segment para stack stackdb 512 dup (?)stack endscode segment para public code assume cs:code,ds:data,es:data,ss:stackstart proc far push ds mov ax,0 push ax mov ax,data mov ds,ax mov es,ax mov cx,0004hmov ax, hex;取十六进制数0ebf9h lea bx,asc aa: push cxmov cl,04h;给循环计数器赋转换代码长度 rol ax,cl;十六进制数循环左移 push ax and ax,000fh cmp al,0ah;判别是否为“09” jb ascii;是“09”转ascii add al,07hascii:add al,30h mov dh,al mov cl,04h;给循环计数器赋转换代码长度 shr dh,cl;逻辑右移 mov dl,al and dx,0f0fh or dx,3030h mov bx,dh;(bx)=46h,(bx)=42h,(bx)=45h, (bx)=39h, inc bx mov bx,dl inc bx pop ax pop cx loop aa mov al,$ mov bx,al mov ah,09h lea dx,asc int 21h retstart endp code ends end start在td状态下分别用单步执行、全速运行对hexasc.exe文件进行调试、运行,结果正确;在dos状态下运行可执行文件hexasc.exe,结果正确。屏幕显示:45424639。2ascii码bcd码要求:试设计、编写程序,完成以下功能。设有一组ascii码数据:3332h,3537h,3946h,3239h,3642h,存放在起始地址为ds:150h的连续内存单元内,数组长度存入cx 。经过转换后的bcd码存放在起始地址为ds:160h的连续内存续单元内,如果待转换的数据不是十进制数的ascii码,则对应的结果单元存放“0ffh”。源程序name ascbcddata segment para publicdataorg 0150hdata1 dw 3332h,3537h,3946h,3239h,3642horg 0160hdb 10 dup(?)data endsstack segment para stackstackdb 512 dup(?)stack endscode segment para publiccodeassume cs:code,ds:data,es:data,ss:stackstart proc farpush dsmov ax,0push axmov ax,datamov ds,axmov es,ax mov cx,0ah;循环计数器赋转换代码数组长度lea di,data1;ascii首址送dilea si,data2;bcd首址送sibb: mov bl,0ffh;错误标志blmov al,di;ascii码送alcmp al,3ah;检查是否为大于9的ascii码jnb done;是转donesub al,30h;不是,取ascii码低4位jb done;小于0的十进制数,转donemov bl,al;bcd码送bldone:mov al,bl;错误标志或结果送almov si,al;转换结果送bcd数据区inc diinc siloop bb;(cx)不为0,转bbretstart endpcode endsend start运行结果:从ds:160h开始的连续内存单元的bcd码数据为: 02,03,07,05,0ff,09,09,02,0ff,06,。程序流程框图开始ascii首址送dibcd首址送si数组长度送cx取待转换数y待转换数39h?ncx-1=0?y结束sisi+1didi+1置错误标志0ffhn待转换数减30h存转换结果3bcd码二进制要求:试设计、编写程序,完成以下功能。有一组非压缩的bcd码数据存放在起始地址为ds:180h的连续内存单元内,数组长度存入cx。经过转换后的二进制数存放在起始地址为ds:190h的连续内存单元内。非压缩的bcd码数据如下:0802,0103,0009,0706,0407,。源程序name bcd2data segmentorg 0180hdat1 dw 0802h,0103h,0009h,0706h,0407horg 0190hdat2 db 10 dup(?)data endsstack segment para stackstackdb 512 dup(?)stack endscode segmentassume cs:code,ds:data,es:data,ss:stackstart proc far push ds mov ax,0 push ax mov ax,datamov ds,ax mov es,ax mov cx,05h;循环计数器赋转换代码长度lea di,dat1;bcd码首址送di lea si,dat2;二进制首址送sixl:mov al,di+1;bcd码十位数值赋al mov bl,0ah mul bl;乘10 inc di mov ah,00h add ax,di;bcd码十位
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年中国烹饪大师认证考试题库及模拟题
- 2025年铁轨建设项目发展计划
- 2025年放射性核素遥控后装机合作协议书
- 抛光机安全培训课件
- 湖南省邵阳市2024-2025学年高三上学期第一次联考化学试题(含答案)
- 2025年安徽省城名校中考三模物理试题(含答案)
- 2024-2025学年湖南省常德市澧县七年级(上)期末数学试卷(含部分答案)
- 2025年集群通信系统(数字)合作协议书
- 扫黑除恶专项斗争
- 2025年遵义中考试卷历史及答案
- 社区公共卫生护理考核试卷
- DBJ43-T 315-2016 现浇混凝土保温免拆模板复合体系应用技术规程
- 鲁教版初中英语单词总表
- MOOC 理解马克思-南京大学 中国大学慕课答案
- 《医疗卫生机构安全生产标准化管理规范(修订)》
- 乡镇报灾系统培训课件
- 如何辅导初中数学差生
- 《病史采集》课件
- 康复治疗大厅规划方案
- 《慢性病综合防治》课件
- 《物理学史讲座》课件
评论
0/150
提交评论