ImageVerifierCode 换一换
格式:DOCX , 页数:18 ,大小:20.75KB ,
资源ID:11575331      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/11575331.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(实验7循环程序设计实验.docx)为本站会员(b****5)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

实验7循环程序设计实验.docx

1、实验7循环程序设计实验 实验6中1、2题参考程序1. 设数据区有双精度数据A、B 定义例如:A DD 2A3D0B2CH B DD 2573ADEH 求自编程序,计算A与B的和与差,并用十六进制和二进制形式分别显示。用16进制形式显示程序:DATA SEGMENT BUF DB 5 DUP(0) A DD 2A3D0B2CH ;存放情况与 A DW 0B2CH,2A3DH相同 B DD 2573ADEH ;存放情况与 B DW 3ADEH,257H相同 C DD 0,0DATA ENDSCODE SEGMENT ASSUME CS:CODE, DS:DATASTART:MOV AX,DATA

2、MOV DS,AX;以下参考本实验参考程序段15,注意设定数据类型,加添变量C MOV AX,WORD PTR A ADD AX,WORD PTR B MOV WORD PTR C,AX MOV AX,WORD PTR A+2 ADC AX,WORD PTR B+2 MOV WORD PTR C+2,AX;以下调用实验5的参考程序段2,注意将显示内容C的高16位放到AX中。;同时注意在数据区有变量BUF与A,且A在BUF后面。 MOV AX,WORD PTR C+2 MOV DI,OFFSET A ;将DI指向BUF的下一单元 MOV CX,0 MOV BX,16 ;准备除以16CBUF10:

3、 DEC DI ;准备存放余数,往前倒存 INC CX MOV DX,0;将除数的高16位(在DX中)清0,DX也将用来存放余数 DIV BX ;DX,AX除以BX (BX=16) ADD DL,30H ;余数变为ASCII码值 MOV BYTE PTRDI,DL ;存储十六进制数 CMP AX,0 ;是否为0? JNZ CBUF10 ;不为0转CBUF10 CHANGE11: MOV DL,BYTE PTRDI;取出存放在BUF中的十六进制数到DL供显示 CMP DL,3AH ;是否小于10? JB CHANGE12 ;如果小于10转显示 ADD DL,7 ;否则为A到F之间数,加7CHAN

4、GE12: MOV AH,2 ;显示1个字符 INT 21H INC DI LOOP CHANGE11;以下再调用实验5的参考程序段2,以显示C的低16位。;注意将显示内容C的低16位放到AX中。;还要注意改变标号CBUF10到CBUF12为CBUF13到CBUF15 MOV AX,WORD PTR C MOV DI,OFFSET A ;将DI指向BUF的下一单元 MOV CX,0 MOV BX,16 ;准备除以16CBUF13: DEC DI ;准备存放余数,往前倒存 INC CX MOV DX,0;将除数的高16位(在DX中)清0,DX也将用来存放余数 DIV BX ;DX,AX除以BX

5、(BX=16) ADD DL,30H ;余数变为ASCII码值 MOV BYTE PTRDI,DL ;存储十六进制数 CMP AX,0 ;是否为0? JNZ CBUF13 ;不为0转CBUF13 CHANGE14: MOV DL,BYTE PTRDI;取出存放在BUF中的十六进制数到DL供显示 CMP DL,3AH ;是否小于10? JB CHANGE15 ;如果小于10转显示 ADD DL,7 ;否则为A到F之间数,加7CHANGE15: MOV AH,2 ;显示1个字符 INT 21H INC DI LOOP CHANGE14 MOV AH,4CH INT 21HCODE ENDSEND

6、START本解存在问题:当低16位字数不到4位时显示结果位数错误。如果利用子程序完成本题,程序如下:DATA SEGMENT BUF DB 5 DUP(0) A DD 2A3D0B2CH ;存放情况与 A WORD OB2CH,2A3DH相同 B DD 2573ADEH ;存放情况与 A WORD 3ADEH,257H相同 C DD 0,0DATA ENDSCODE SEGMENT ASSUME CS:CODE, DS:DATASTART:MOV AX,DATA MOV DS,AX;以下参考本实验参考程序段15,注意设定数据类型,加添变量C MOV AX,WORD PTR A ADD AX,W

7、ORD PTR B MOV WORD PTR C,AX MOV AX,WORD PTR A+2 ADC AX,WORD PTR B+2 MOV WORD PTR C+2,AX;以下调用显示子程序,注意将显示内容C的高16位放到AX中。MOV AX,WORD PTR C+2CALL DISP_16;以下再调用显示子程序,以显示C的低16位。;注意将显示内容C的低16位放到AX中。MOV AX,WORD PTR CCALL DISP_16; MOV AH,4CH INT 21H;以下将实验5的参考程序段2改为子程序。开始定义子程序名,注意结尾用RET返回。;注意子程序的位置在MOV AH,4CH

8、与 INT 21H 二句的后面。;仍然要注意在数据区有变量BUF与A,且A在BUF后面。DISP_16 PROC MOV DI,OFFSET A ;将DI指向BUF的下一单元 MOV CX,0 MOV BX,16 ;准备除以16CBUF10: DEC DI ;准备存放余数,往前倒存 INC CX MOV DX,0;将除数的高16位(在DX中)清0,DX也将用来存放余数 DIV BX ;DX,AX除以BX (BX=16) ADD DL,30H ;余数变为ASCII码值 MOV BYTE PTRDI,DL ;存储十六进制数 CMP CX,4 ;是否4个16进制数字?注意本处略微改动解决了上一解法的

9、问题。 JNZ CBUF10 ;不为0转CBUF10 CHANGE11: MOV DL,BYTE PTRDI;取出存放在BUF中的十六进制数到DL供显示 CMP DL,3AH ;是否小于10? JB CHANGE12 ;如果小于10转显示 ADD DL,7 ;否则为A到F之间数,加7CHANGE12: MOV AH,2 ;显示1个字符 INT 21H INC DI LOOP CHANGE11RETDISP_16 ENDPCODE ENDSEND START注:(1)注意本解中将CMP AX,0这一句改为CMP CX,4就解决了上一解法的问题,即使低16位只有0个、1个、2个、3个非零16进制数

10、字,结果都是正确的。(2)请在本解基础上考虑如果改为10进制显示,只需要改那二个数字?如果改为2进制显示,又只需要改那三个数字?用2进制形式显示程序又一解:DATA SEGMENT BUF DB 5 DUP(0) A DW 0B2CH,2A3DH ;存放情况与 A DW 0B2CH,2A3DH相同 B DW 3ADEH,257H ;存放情况与 B DW 3ADEH,257H相同 C DW 0,0DATA ENDSCODE SEGMENT ASSUME CS:CODE, DS:DATASTART:MOV AX,DATA MOV DS,AX;以下参考本实验参考程序段15,注意设定数据类型,加添变量

11、C MOV AX,WORD PTR A ADD AX,WORD PTR B MOV WORD PTR C,AX MOV AX,WORD PTR A+2 ADC AX,WORD PTR B+2 MOV WORD PTR C+2,AX;以下调用显示子程序,注意将显示内容C分4次放到BL中。MOV BL,BYTE PTR C+3 ;请想一下以下C的4个字节显示次序为什么如此CALL DISP_2MOV BL,BYTE PTR C+2CALL DISP_2MOV BL,BYTE PTR C+1CALL DISP_2MOV BL,BYTE PTR CCALL DISP_2 MOV AH,4CH INT

12、21H;以下将实验6的参考程序段2改为子程序。开始定义子程序名,注意结尾用RET返回。;注意子程序的位置在MOV AH,4CH 与 INT 21H 二句的后面。;要注意显示内容要求放到BL中,每次显示8位。DISP_2 PROC MOV CL,8 NEXT: MOV DL,0 SAL BL,1 RCL DL,1 ADD DL,30H MOV AH,2 INT 21H DEC CL JNE NEXTRETDISP_2 ENDPCODE ENDSEND START减法程序与以上程序类似,不再给出解答。2. 设数据区有双精度数据A=2A3D0B2CH、B= 2573ADEH,其存储情况如下所示。求自

13、编程序,计算A与B的积,放到数据区的X1,X2,X3,X4四个字单元中,再求用十六进制形式显示。 A1 DW 2A3DH A2 DW 0B2CH B1 DW 532DH B2 DW 3ADEH X1 DW 0 X2 DW 0 X3 DW 0 X4 DW 0 提示:如上数据区有字变量X1,X2,X3,X4;初值均为0;X1准备存结果的最高16位;X4准备存结果的最低16位;将A看成A1,A2;A1为高16位,A2为低16位;同样,B看成B1,B2。 那么,可以将B2与A2的积加到X3,X4中;将B2与A1的积加到X2,X3中;将B1与A2的积加到X2,X3中;将B1与A1的积加到X1,X2中;注

14、意进位。DATA SEGMENT BUF DB 5 DUP(0) A DB 0 ;BUF之后标志,满足显示子程序的要求 A1 DW 2A3DH A2 DW 0B2CH B1 DW 532DH B2 DW 3ADEH X1 DW 0 X2 DW 0 X3 DW 0 X4 DW 0DATA ENDSCODE SEGMENT ASSUME CS:CODE, DS:DATASTART:MOV AX,DATA MOV DS,AX;以下参考本实验参考程序段1 MOV AX,A1 MUL B1 MOV X1,AX MOV X2,DX;以下再参考本实验参考程序段1,注意乘数与乘积位置,;再注意以加的方式加到存

15、储单元中 MOV AX,A1 MUL B2 ADD X2,AX ADC X3,DX MOV AX,A2 MUL B1 ADD X2,AX ADC X3,DX MOV AX,A2 MUL B2 ADD X3,AX ADC X4,DX;以下调用显示子程序。MOV AX,X4CALL DISP_16MOV AX,X3CALL DISP_16MOV AX,X2CALL DISP_16MOV AX,X1CALL DISP_16 MOV AH,4CH INT 21H;以下为实验5的参考程序段2改的子程序。;仍然要注意在数据区有变量BUF与A,且A在BUF后面。DISP_16 PROC MOV DI,OFF

16、SET A ;将DI指向BUF的下一单元 MOV CX,0 MOV BX,16 ;准备除以16CBUF10: DEC DI ;准备存放余数,往前倒存 INC CX MOV DX,0;将除数的高16位(在DX中)清0,DX也将用来存放余数 DIV BX ;DX,AX除以BX (BX=16) ADD DL,30H ;余数变为ASCII码值 MOV BYTE PTRDI,DL ;存储十六进制数 CMP CX,4 ;是否到4个字? JNZ CBUF10 ;不为0转CBUF10 CHANGE11: MOV DL,BYTE PTRDI;取出存放在BUF中的十六进制数到DL供显示 CMP DL,3AH ;是

17、否小于10? JB CHANGE12 ;如果小于10转显示 ADD DL,7 ;否则为A到F之间数,加7CHANGE12: MOV AH,2 ;显示1个字符 INT 21H INC DI LOOP CHANGE11 RET DISP_16 ENDPCODE ENDS END START 实验7 循环程序认识与设计练习一、实验内容:自编算术运算、逻辑运算、移位运算程序段,和供参考的数据转换、显示程序段组合成完整程序,上机实现并验证。二、实验目的:1.通过参考程序段的1与2,了解循环程序的结构与意义。2. 复习双精度数运算程序设计方法。 3. 复习逻辑运算、移位运算指令内容与使用方法,学习用这些指

18、令解决实际问题的方法。 4. 熟悉常见的算术运算、逻辑运算、移位运算程序设计方法。 5. 学习1号、2号、9号DOS系统功能调用的使用方法 6. 复习数据转换程序与显示程序设计方法 7. 学习将多个程序段拼凑设计程序的方法三、实验题目1. 求利用2号中断接受从键盘输入的最多4个16进制数字组成一个16进制数,并依次用十六进制、十进制显示的程序。2. 接上题,求将字变量BUF的值乘以上述16进制数,再用十六进制数显示的程序。3. 在内存的源数据区SOURCE处有若干个ASCII码字符,要求将其中的英文大写字母转换为小写字母,其它字符不转换,并存放到结果数据区DEST处。已知数据区如下。DATA

19、SEGMENTSOURCE DB BEIjin2008OLYMPICCOUNT EQU $-SOURCE ;字符个数DEST DB COUNT DUP(?)DATA ENDS分析:英文大写字母AZ,ASCII码值为41H5AH。相应的小写字母为az,ASCII码值为61H7AH。英文大写字母要转换为相应的小写字母只要ASCII码值加20H即可。4. 修改上述程序:将输入到数据区DEST处的字符串在屏幕上显示出来。5. 将以下参考程序段中第3到9题补充完整再上机验证。供参考的程序段: (1)二进制数转换为十六进制数显示。要求在数据区设置BUF DB 10 DUP(0)和D0,例如 D0 DW 1

20、234H MOV DI,OFFSET BUF+10 ;到存储区尾部 DEC DI ;到上一单元 MOV DI,BYTE PTR $ ;9号功能调用要显示内容最后加$表示字串结束 MOV AX,D0 ;取要用来变十进制数的数到AX MOV BX,16 ;准备除以16CHANGE10: DEC DI ;到上一单元 MOV DX,0 ;将除数的高16位(在DX中)清0,DX也将用来存放余数 DIV BX ;DX,AX除以BX (BX=10) ADD DL,30H ;余数变为ASCII码值 MOV BYTE PTRDI,DL ;存储十六进制数 CMP AX,0 ;是否为0? JNZ CHANGE10

21、;不为0转CHANGE10 CHANGE11: MOV DX,DI ;取出存放在BUF中的ASCII码形式的十六进制数首地址到DX中供显示 MOV AH,9 ;显示十六进制数 INT 21H(2)ASCII码表示的十进制数转换为二进制数并显示。要求在数据区设置要求显示的BUF数据,DB类型 MOV SI,OFFSET BUF ;将BUF的地址放到SI中 MOV DX,0 ;清DX为0; MOV CX,5 ;置循环次数为5 MOV BX,10GET_ASC: MOV AL,SI ;取出一个字符 CMP AL,0 ;必须保证5个数都是十进制数(0-9) JB EXIT CMP AL,9 JA EX

22、IT ;判断是否是“0”-“9”DEC_BIN: SUB AL,30H ;减30H变二进制数 MOV AH,0 PUSH AX ;转换为对应的数并置于AX中,转存堆栈 MOV AX,DX MUL BX ;AX内容乘10 MOV DX,AX POP AX ADD DX,AX ;(DX)(DX) * 10 + (AX) INC SI ;使指针SI指向下一个字符 DEC CX JNZ GET_ASC MOV BX,DX ;取要显示的字符到BL中 MOV CL,16 ;移16次,最大数64000NEXT: MOV DX,0 SAL BX,1 RCL DX,1 ADD DX,30H MOV AH,2 I

23、NT 21H DEC CL JNE NEXT(3)以移位方式显示16进制数(要求在数据区设置用来变十六进制数的数D0,例如 D0 DW 1234h)解1: MOV SI,D0 ;取要用来变十六进制数的数到SI MOV BX,4 ;每个字显示4个16进制字符CHANGE10: MOV CX,4 ;准备左移4位(除以16) MOV DX,0 ;将显示内容存储器(在DX中)清0CHANGE20: SHL SI,1 ;SI移一位到进位位 RCL DX,1 ;进位位移到DX LOOP CHANGE20 ;移4次 ADD DL,30H ;一个16进制数变为ASCII码值 CMP DL,3AH ;是否小于1

24、0? JB CHANGE12 ;如果小于10转显示 ADD DL,7 ;否则为A到F之间数,加7CHANGE12: MOV AH,2 ;显示1个字符 INT 21H DEC BX ;处理下一个字符 CMP BX,0 ;是否为0? JNZ CHANGE10 ;不为0转CHANGE10 解2: MOV SI,D0 ;取要用来变十六进制数的数到SI MOV BX,4 ;每个字显示4个16进制字符CHANGE10: MOV CL,4 ;准备循环左移4位 ROL SI,CL ; SI循环左移4位MOV DX,SI ;SI内容送显示 AND DL,0FH ADD DL,30H ;一个16进制数变为ASCI

25、I码值 CMP DL,3AH ;是否小于10? JB CHANGE12 ;如果小于10转显示 ADD DL,7 ;否则为A到F之间数,加7CHANGE12: MOV AH,2 ;显示1个字符 INT 21H DEC BX ;处理下一个字符 CMP BX,0 ;是否为0? JNZ CHANGE10 ;不为0转CHANGE10 (4)ASCII码表示的十六进制数到二进制数的转换INPUT: MOV AH,01H INT 21H ;键盘输入 SUB AL,30H JL EXIT ;输入其它字符 CMP AL,0AH JL CHANGE ;输入0-9 SUB AL,07H CMP AL,0AH JL

26、EXIT ;输入其它字符 CMP AL,0FH JLE CHANGE ;输入A-F SUB AL,20H CMP AL,0AH JL EXIT ;输入其它字符 CMP AL,0FH JLE CHANGE ;输入a-f JMP EXIT ;输入其它字符CHANGE: MOV CL,4 SHL DX,CL MOV AH,0 ADD DX,AX ;(DX)(DX) * 16 + (AX) DEC BL JNZ INPUTEXIT: MOV BX,DX ;取要显示的字符到BL中 MOV CL,16 ;移16次NEXT: MOV DX,0 SAL BX,1 RCL DX,1 ADD DX,30H MOV

27、 AH,2 INT 21H DEC CL JNE NEXT(5)十进制数的ASCII码转换为压缩型BCD码。要求在数据区有ASC_BUF、BCDBUF二个数据集,由若干个十进制数的ASCII码字符组成,要定义其长度放到COUNT中。 MOV SI,OFFSET ASC_BUF MOV DI,OFFSET BCDBUF MOV CX,COUNT MOV BX,CX SHR BX,1 ;BX右移一位,等效于除2 JNC EVEN1 ;(CF)=0,则CX为偶数 MOV BL,SI ;对首位单独进行处理 AND BL,0FH MOV DI,BL DEC CX INC SI INC DIEVEN1:

28、MOV AL,SI AND AL,0FH ;清高4位为0 MOV BL,SI+1 AND BL,0FH ;清高4位为0 MOV DL,16 MUL DL ADD AL,BL MOV DI,AL ADD SI,2 INC DI DEC CX JNZ EVEN1(6)BCD码转换为十进制数的ASCII码,要求在数据区有ASC_BUF数据,DB类型,共3个数据。 MOV SI,OFFSET BCD_BUF ADD SI,3 MOV CX,3 MOV DH,0CHG_OUT1:PUSH CX MOV AL,SI ;取压缩BCD码 DEC SI ;修改指针 MOV DL,AL MOV CL,4 ROR

29、AL,CL AND AL,0FH ;取高半字节BCD码 ADD AL,30H ;生成ASCII码 MOV DL,AL MOV AH,2 INT 21H ;标准设备输出 MOV AL,DL AND AL,0FH ;取低半字节BCD码 ADD AL,30H ;生成ASCII码 MOV DL,AL MOV AH,2 INT 21H ;标准设备输出 POP CX DEC CX JNZ CHG_OUT1 (7)双字除10取余求变10进制数(设双字在DX AX中,除数10在BX中,在数据区中准备字节类型10个字数据区D:D DB 10 DUP(?) ) LEA DI,D+10 MOV DI,BYTE PT

30、R $ ;准备调用9号中断显示程序 DEC DI ;到上一单元 MOV SI,AX ;保存AX MOV AX,DX ;取要用来变十进制数的数的高16位到AX MOV BX,10 ;准备除以10CHANGE10: MOV DX,0;将除数的高16位(在DX中)清0,DX也将用来存放余数 DIV BX ;DX,AX除以BX (BX=10) MOV CX,AX ;保存高16位除以10的商 MOV AX,SI ;再恢复AX中原来的双字的低16位 DIV BX ADD DL,30H ;余数变为ASCII码值 MOV BYTE PTRDI,DL ;存储十进制数 DEC DI ;到上一单元 MOV SI,AX

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

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