版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、目录实验一 基本程序编程和程序调试1一、实验目的1二、实验设备1三、实验内容及步骤1四、思考题7五、实验总结9实验二 程序设计和pc机上程序调试操作实验9一、实验目的9二、实验设备9三、实验内容及步骤9实验三 dos系统功能调用及模块化程序设计23一、实验目的23二、实验设备24三、实验内容及步骤24四、思考题:33五、实验总结34实验四 教材第4章习题程序设计34实验一 基本程序编程和程序调试一、 实验目的二、 实验设备三、 实验内容及步骤数码转换程序及其调试1、 将ascii码表示的十进制数转换为二进制数1) 程序设计算法2) 实验步骤3)代码 4)程序流程图地址(h) 助记符 注释200
2、0 mov si,3500 ;源地址2003 mov di,3510 ;结果地址2006 mov bx,000a ;乘数 102009 mov cx,0004 ;计数200c mov ah,00 ;ah 清零200e mov al,si ;取被转换数2010 sub al,30 ;ascii码变十进制数2012 imul bx ;高位(ax)*(bx)送ax2014 add al,si+01 ;取下一位1017 sub al,30 ;ascii码减30变十进制数2019 inc si ;源地址指针+1201a loop 2012 ;cx-1,若cx不等于零则继续201c mov di,ax ;
3、若cx等于零则存结果201e int 3 图1-15)运行结果2 将十进制数的ascii码转换为bcd码1) 程序设计算法2) 实验步骤3) 代码 4)程序流程图地址(h) 助记符 注释2000 mov cx,0005;循环计数器赋初值2003 mov di,3500;ascii码首址2006 mov bl,ff; 错误标志送bl2008 mov al,di;送ascii码至al200a cmp al,3a; 比较al与3ah200c jnb 2014; 不低于3a则转2014200e sub al,30; 低于3a则取ascii码的低四位2010 jb 2014; 低于30则转2014201
4、2 mov bl,al; 否则al内容送bl,取代ff2014 mov al,bl; 结果或错误标志送al2016 mov di+0a,al2019 inc di201a loop 2006201c int 3图1-25) 运行结果:3 将十六位二进制数转换为ascii码表示的十进制数1)程序设计算法2)实验步骤3) 代码 4)程序流程图地址(h) 助记符 注释2000 mov dx,3500;取二进制数2004 mov si,3515; 目标首址在35102007 dec si2008 mov ax,dx200a mov dx,0000200d mov cx,000a 2010 div cx
5、; ; 除102012 xchg ax,dx2014 add al,302016 mov si,al2018 cmp dx,0000201b jne 2007201d cmp si,3510 ; 填余下高位为02021 jz 202a; 2023 dec si2024 mov al,302026 mov si,al2028 jmp 201d202a int 3图1-35) 运行结果4、 十六进制数转换为ascii码1)程序设计算法2)实验步骤3) 代码 4) 程序流程图地址(h) 助记符 注释2000 mov cx,00042003 mov di,35002006 mov dx,di2008
6、mov ax,dx200a and ax,000f ;取低四位值200d cmp al,0a; ; 判是否“0”-“9”200f jb 2013 ; 是“0”-“9”转20132011 add al,07; 是“a”-“f”,加72013 add al,30; 转换为ascii码2015 mov di+0a,al2018 inc di2019 push cx ;保护循环计数器内容201a mov cl,04; 移位次数送cl201c shr dx,cl201e pop cx201f loop 20082021 int 3图1-45)运行结果4 bcd码转换为二进制数 1) 程序设计算法2) 实
7、验步骤3)代码 4)程序流程图地址(h) 助记符 注释2000 mov cx,00042003 mov di,35002006 mov al,di2008 add al,al ;乘2200a mov bl,al200c add al,al ;乘2200e add al,al ;乘22010 add al,bl ;乘102012 inc di2013 mov ah,002015 add al,di; bcd码十位与个位加2017 mov di+0f,ax;存结果 201a inc di201b loop 2006201d int 3 图1-55)运行结果 四、 思考题1、 2、3、4、1)asc
8、ii码十六进制代码: 运行结果2) 十进制小数二进制3)二进制bcd码五、 实验总结实验二 程序设计和pc机上程序调试操作实验一、 实验目的二、 实验设备三、 实验内容及步骤(一)按要求编写程序并在debug下建立、汇编和调试程序、 四字节二进制数的加法1)程序设计要求2)实验步骤代码:mov si,3500 ;源地址mov di,3508 ;目的地址mov ax,si ;取低两位运算adc ax,si+4mov di,axpushf;将上一次加法运算后的标志位结果入栈add si,2add di,2popf ;出栈mov ax,si ;取高两位运算adc ax,si+4 ;带进位加法mov
9、di,axint 3 运行结果:2、数据块的搬移1)程序设计思想和要求)实验步骤3) 代码:(1)源数据块与目的数据块无重叠 mov si,3500 mov di,3510 mov cx,10 ;循环16次2009: mov al,si mov di,al inc si inc diloop 2009int 3运行结果:(2)源数据块与目的数据块有重叠。源数据块首地址大于目的数据块 代码:mov si,3505 mov di,3500 mov cx,10 ;循环16次2009: mov al,si mov di,al inc si inc di loop 2009 int 3运行结果:目的数据
10、块首址大于源数据块首址mov si,3500 mov di,3505 mov cx,10 ;循环16次2009: mov al,si+f mov di+f,al dec si ;地址指针递减 dec di loop 2009 int 3运行结果:3、无序数据块的递增排序)程序设计思想和要求)实验步骤代码:2000 mov si,3500 ;指定循环次数 2003 mov di,3000 2006 mov cx,si 2008 dec cx 2009 push cx200a mov bx,0000 200d mov al,di+bx 200f cmp al,di+bx+1 2012 ja 201
11、b2014 inc bx 2015 loop 200d 2017 pop cx 2018 loop 2009 201a int 3 201b mov ah,di+bx+1 201e mov di+bx+1,al 2021 mov di+bx,ah 2023 jmp 2014运行结果:4、求数的平方根)程序设计思想和要求)实验步骤代码:2000 mov si,40062003 mov di,40172006 mov cx,00042009: mov bx,0001200c mov dx,0000200f mov ah,si2011 mov al,si+12014 cmp ax,00002017
12、je 20282019 sbb ax,bx201b cmp ax,0000201e jle 20272020 inc bx2021 inc bx2022 inc dx2023 cmp ax,bx2025 ja 20192027 inc dx2028 mov di,dl202a dec di202b dec si202c dec si202d loop 2009202f int 3运行结果:5、思考题(1)(2)(3)6. 总结(二)masm汇编程序和link连接程序的使用操作1、计算机钢琴程序1)实验内容源程序为:data segmentmess db push any key to stop
13、!,0dh,0ah,$table dw 524,588,660,698,784,880,988,1048,1176,1320,0tablel db 31h,31h,32h,31h,34h,33h,3bh db 31h,31h,32h,31h,35h,34h,3bh db 31h,31h,38h,36h,34h,33h,32h,3bh db 36h,36h,36h,34h,35h,34h,3bh,0aahdata endsstack segment para stack stacksta db 256 dup(?)stack endscode segment assume cs: code, d
14、s: data, ss: stack, es: datastart proc far div word ptr table+bx push ds mov bx, ax xor ax, ax mov al, 10110110b push ax out 43h, al mov ax, data mov ax, bx mov ds, ax out 42h, al mov es, ax mov al, ah mov ah, 09h out 42h, al lea dx, mess in al, 61h int 21h or al, 03hkk: lea si, tablel out 61h, al c
15、all delay in al, 61h and al, 0fch out 61h, al qq: inc sising: mov ah, 06h jmp sing mov dl, 0ffh finish: ret int 21h start endp jne finish mov al, si delay proc near ; 延时子程序 cmp al, 3bh push cx jne ddd push ax call delay mov ax, 500h ; 大循环次数 jmp qq x1: mov cx, 0ffffh ; 小循环次数ddd: cmp al, 0aah x2: dec
16、cx je kk jnz x2 sub al, 31h dec ax shl al, 01h jnz x1 mov bl, al pop ax mov ax, 0000h pop cx mov dx, 12h ret mov bh, 00h delay endp code ends end start2、求数据块的最小值和最大值)实验内容 data segment buffer db 10,22,33,-80,127,-76,0,90,-45,60,-1 minval db ? maxval db ? data ends stack segment para stack stack sta d
17、b 100 dup(?) stack ends code segment assume cs:code, ds:data, es:data, ss:stack start proc far pubh ds mov ax, 0 push ax mov ax, data mov ds, ax mov es, ax lea bx, buffer mov ch, 0 mov cl, bx inc bx mov al, bx mov minval, al mov maxval, al inc bx dec cx again: mov al, bx cmp al, minval je next jg a1
18、 mov minval, al jmp next a1: cmp al, maxval jl next mov maxval, al next: inc bx dec cx jne again retf start endp code ends end start)实验步骤3. 运行结果:反汇编生成的代码:结果:最小值在141c:b中,最大值在141:c中。3、从无序数列中删除一个元素1)实验内容2)实验步骤 代码:data segmentser db 7,abcdefgkey db fflag db 0data endsstack segment para stack stackstac d
19、b 100 dup (?)stack endscode segment 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 lea bx,ser mov cx,bx mov al,keyaa: inc bx cmp al,byte ptr bx je kk loop aa mov flag,0ffh jmp enkk: dec cxbb: mov al,byte ptr bx+1 mov byte ptr bx,al inc
20、bx loop bb en: retstart endp code ends end start运行结果:4、思考题 5. 总结实验三 dos系统功能调用及模块化程序设计一、 实验目的二、 实验设备三、 实验内容及步骤(一)dos键盘、显示基本功能子程序调用1、 显示缓冲区的字符串 1)实验程序:dsegsegmentstringdbwelcome to dong hua university!,0dh,0ah,$dsegendsstack segmentpara stack stackdb256dup (?)stackendscsegsegmentmainprocfarassume cs:
21、cseg, ds: dseg ss: stackstart:pushdsmovax,0pushaxmovah,9movdx,seg stringmovds, dxmovdx,offset stringint21hretmainendpcsegendsendstart2) 实验步骤:运行结果:2、键盘输入小写字母,显示器显示大写字母 1)实验程序: csegsegmentmain procfar assumecs:csegstart:pushdsmov ax, 0push axbegin:movah,1int21hcmpal,ajbstopcmpal,zjastopsubal,20hmovdl,
22、almovah,2int21hjmp beginstop:retmainendpcsegendsendstart 2) 实验步骤:运行结果:3、从键盘输入一个二位十进制的月份数(01-12),显示相应月份的英文缩写名1)程序及其结构程序如下:datasgsegmentparadatathreedb3monindb3,4 dup(?)alfmondb ?,$montabdb jan,feb,mar,apr,may,jundb jul,aug,sep, oct,nov,decdatasgendscodesgsegmentparacodeassumecs:codesg,ds:datasgmainpr
23、ocfarpushdssubax,axpushaxmovax,datasgmovds,axmoves,axcallinputcalllocatecalldisplayretmainendpinputprocnear; 键盘输入并将asc码转换二进制数的子程序pushdxmovah,0ah; 键盘输入月份数leadx, moninint21hmovah,monin+2 ; 将月份数字的asc码取入ah和almoval,monin+3xorax,3030h; 将asc码转换为bcd码cmpah,00jzreturnsubah,ahaddal,10return:popdxretinput:endpl
24、ocateprocnear;将月份数字转换为英文缩写字母的子程序pushsipushdipushcxleasi,montabdecalmulthreeaddsi,axmovcx,03cldleadi,alfmonrepmovsbpopcxpopdipopsiretlocate:endpdisplayprocnear;屏幕显示子程序pushdxleadx,alfmonmovah,09int21hpopdxretdisplayendpcodesgendsendmain运行结果:分别输入01,09,10得到(二)采用dos功能调用设计源程序,并运行调试程序1、十进制加法和结果显示程序1)程序设计要求
25、2)实验步骤:3)代码desg segmentaddop1 dd 9999sum dd ?desg endseseg segmentaddop2 dd 9999eseg endsstack segment para stack stackdb 100 dup(?)stack endscode segmentassume ds:desg,cs:code,es:esegstart:mov ax,desgmov ds,axmov ax,esegmov es,axmov ax,word ptr addop1add ax,word ptr addop2mov word ptr sum,axmov ax,
26、word ptr addop1+2adc ax,word ptr addop2+2mov word ptr sum+2,axmov bx,word ptr sum+2call displaymov bx,word ptr sumcall displaymov ah,4chint 21hdisplay proc nearmov cx,10000dcall dec_divmov cx,1000dcall dec_divmov cx,100dcall dec_divmov cx,10dcall dec_divmov cx,1dcall dec_divretdec_divproc nearmov ax
27、,bxmov dx,0div cxmov bx,dxmov dl,aladd dl,30hmov ah,2hint 21hretdec_div endpdisplay endpcode endsend start4) 运行结果反汇编结果: (两个加数均为9999)2、十进制加法和算式显示程序1)程序设计要求2) 实验步骤: 3)代码dseg segment addop1 dd 1234jiahao db +,$denghao db =,$ten dw 10sum dd ?dseg endseseg segmentaddop2 dd 6789eseg endsstack segment para
28、 stack stackdb 100 dup(?)stack endscode segmentassume ds:dseg,cs:code,es:esegstart:mov ax,dsegmov ds,axmov ax,esegmov es,axmov ax,word ptr addop1add ax,word ptr addop2mov word ptr sum,axmov ax,word ptr addop1+2adc ax,word ptr addop2+2mov word ptr sum+2,axmov bx,word ptr addop1+2call displaymov bx,wo
29、rd ptr addop1call displaymov ah,09hmov dx,offset jiahaoint 21hmov bx,word ptr addop2+2call displaymov bx,word ptr addop2call displaymov ah,09hmov dx,offset denghaoint 21hmov bx,word ptr sum+2call displaymov bx,word ptr sumcall displaymov ah,4chint 21hdisplayproc nearmov cx,10000dcall dec_divmov cx,1
30、000dcall dec_divmov cx,100dcall dec_divmov cx,10dcall dec_divmov cx,1dcall dec_divretdec_divproc nearmov ax,bxmov dx,0div cxmov bx,dxmov dl,aladd dl,30hmov ah,2hint 21hretdec_div endpdisplay endpcode endsend start4)运行结果3、键盘输入加数和被加数进行十进制数加法,显示结果程序1)程序设计要求2)实验步骤:同上dsegsegmentaddopdw2 dup(?)addop1dd?ji
31、ahao db +,$denghao db =,$ten dw 10sumdd?go db please input two number: $goo db the sum is: $tishi db the number you input is not right,must 10000,please input again! $dsegendsesegsegmentaddop2dd?esegendsstack segmentparastack stack db 100 dup(?)stackendscodesegmentassumeds:dseg,cs:code,es:esegstart:
32、movax,dsegmovds,axmovax,esegmoves,axts:mov si,0mov cx,2 lea dx, go mov ah, 09int 21hagain: push cxcall inputcmp ax,10000jl rightpop cxcall crlfmov dx,offset tishimov ah,09hint 21hcall crlfjmp tsright: mov addopsi,ax;add sum,axinc siinc sipop cxloop againcall crlflea dx, goo mov ah, 09int 21hmovsi,0m
33、ovbx,addopsimovword ptr addop1,bxmovword ptr addop1+2,0incsiincsimovbx,addopsimovword ptr addop2,bxmovword ptr addop2+2,0push axmovax,wordptraddop1addax,word ptraddop2movword ptr sum,axmovax,word ptr addop1+2adcax,word ptr addop2+2movword ptr sum+2,axpop axmovbx,word ptraddop1+2calldisplaymovbx,word
34、 ptraddop1calldisplaymov ah,09hmov dx,offset jiahaoint 21hmovbx,word ptraddop2+2calldisplaymovbx,word ptraddop2calldisplaymov ah,09hmov dx,offset denghaoint 21hmovbx,word ptrsum+2call displaymovbx,word ptrsumcall displaymovah,4chint 21hcrlf proc nearmov dl,0ah mov ah,02hint 21hmov dl,0dh mov ah,02h
35、int 21hretcrlf endpinput proc near mov ax,0push axagain1:mov ah,01h int 21hcmp al,30h jl exitcmp al,39hjg exitsub al,30h mov bl,almov bh,0pop axcwdimul ten add ax,bxpush axjmp again1exit:pop axretinput endpdisplay proc nearmov cx,10000d call dec_divmov cx,1000d call dec_divmov cx,100d call dec_divmov cx,10d call dec_divmov cx,1d call dec_divret dec_div proc near mov ax,bx mov dx,0 div cx mov bx,dx mov dl,al add dl,30h mov ah,2h
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 章鱼苗买卖合同(3篇)
- 停车位短期出租协议(3篇)
- 项目经理年终总结
- 2023年青岛国际邮轮港区服务管理局招聘工作人员笔试真题
- 2023年巴中西南领航实验学校教师招聘笔试真题
- 2024年苯甲酰H酸项目合作计划书
- 楼层设计合同范本
- 粮油经销合同范本
- 保证工程质量合同范本
- 2022年采购部员工的个人工作计划范文样本
- Specification-原材料规格书模板
- 实验室课外向学生开放计划
- 科技特派员工作调研报告
- 2021年电力公司创一流工作会议讲话
- 中波广播发送系统概述
- 县疾控中心中层干部竞聘上岗实施方案
- 急性心肌梗死精美PPt完整版
- 毕业设计(论文)基于三菱PLC的交通灯模拟控制
- (完整版)offer模板范本.docx
- 物业日常巡查记录表.doc
- 门技术参数[图文借鉴]
评论
0/150
提交评论