综合性的汇编语言程序设计实验_第1页
综合性的汇编语言程序设计实验_第2页
综合性的汇编语言程序设计实验_第3页
综合性的汇编语言程序设计实验_第4页
综合性的汇编语言程序设计实验_第5页
已阅读5页,还剩14页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、湘潭大学实 验 报 告课 程: 80X86汇编语言程序设计 实验题目: 综合性的汇编语言程序设计 学 院: 信息工程学院 专 业: 14级计算机科学与技术二班 学 号: 2014551418 姓 名: 周 宇 指导教师: 匡林爱 完成日期: 2016.5.12 1、 实验内容开发一个总源代码行数不低于300行(或新代码行数不少于200行)的汇编语言程序以解决一个相对独立的局部应用问题。2、 实验环境硬件环境:一台微型计算机软件环境:Window7系统、debug环境、masm3、 实验代码设计DATAS SEGMENT ;此处输入数据段代码 STRING1 DB '0: EXIT, 1

2、: A+B, 2: A-B, 3: A*B, 4: A/B ','$' STRING2 DB 'Please enter a number to have a choice :','$' STRING3 DB 'Please enter A:','$' STRING4 DB 'Please enter B:','$' STRING5 DB 'You have chosed the A+B','$' STRING6 DB 'You hav

3、e chosed the A-B','$' STRING7 DB 'You have chosed the A*B','$' STRING8 DB 'You have chosed the A/B','$' STRING9 DB 'Thanks for using U !','$' STRING10 DB 'You enter the error number ! Please enter again.','$' STRING11 DB 

4、9;-','$' NUM1 DW 0NUM2 DW 0DATAS ENDSSTACKS SEGMENT ;此处输入堆栈段代码STACKS ENDSCODES SEGMENT ASSUME CS:CODES,DS:DATAS,SS:STACKS HUANHANG PROC NEAR ;换行子程序 可用 STR_CRLFDB 0AH,0DH,'$'MOV AH,02HMOV DL,0DHINT 21HMOV DL,0AH INT 21H RETHUANHANG ENDPJIAFA PROC NEAR ;加法子程序 MOV DX,NUM1 CALL PRINT

5、 ;调用数据以十进制输出子程序,把NUM1以十进制形式输出 MOV DL,'+' CALL STDOUT ;调用输出子程序,把+号输出 MOV DX,NUM2 CALL PRINT MOV DL,'=' ;调用输出子程序,把=号输出 CALL STDOUT MOV AX,NUM1 ADD AX,NUM2 MOV DX,AX CALL PRINT RETJIAFA ENDPJIANFA PROC NEAR ;减法子程序 MOV DX,NUM1 CALL PRINT MOV DL,'-' CALL STDOUT MOV DX,NUM2 CALL PR

6、INT MOV DL,'=' CALL STDOUT MOV AX,NUM1 MOV BX,NUM2 SUB AX,BX MOV DX,AX CALL PRINT RETJIANFA ENDPCHENGFA PROC NEAR ;乘法子程序 MOV DX,NUM1 CALL PRINT MOV DL,'*' CALL STDOUT MOV DX,NUM2 CALL PRINT MOV DL,'=' CALL STDOUT MOV AX,NUM1 MOV DX,0 MUL NUM2 MOV DX,AX CALL PRINT RETCHENGFA E

7、NDPCHUFA PROC NEAR ;除法子程序 MOV DX,NUM1 CALL PRINT MOV DL,'/' CALL STDOUT MOV DX,NUM2 CALL PRINT MOV DL,'=' CALL STDOUT MOV DX,0 MOV AX,NUM1 DIV NUM2 MOV DX,AX CALL PRINT RETCHUFA ENDPPRINT PROC NEAR ;数据以十进制输出子程序 PUSH DX PUSH AX PUSH CX PUSH BX MOV CX,0DO:MOV AX,DX MOV DX,0 MOV BX,10 D

8、IV BX XCHG AX,DX ADD AL,30H PUSH AX INC CX CMP DX,0 JNZ DODO1:POP AX MOV DL,AL CALL STDOUT LOOP DO1 POP BX POP CX POP AX POP DX RETPRINT ENDPSTDOUT PROC NEAR ;输出子程序 MOV AH,2 INT 21H RETSTDOUT ENDPSTART: MOV AX,DATAS MOV DS,AX ;此处输入代码段代码 ONEAGAIN:;输入选择继续执行程序XOR AX,AXXOR BX,BXMOV NUM1,0;很重要的两步MOV NUM2

9、,0; CALL HUANHANG CALL HUANHANG LEA DX,STRING11 MOV AH,9 INT 21H CALL HUANHANG LEA DX,STRING1 ;显示菜单 MOV AH,9 INT 21H CALL HUANHANG CALL HUANHANG LEA DX,STRING2 ;提示菜单的选择 MOV AH,9 INT 21H CALL HUANHANG CALL HUANHANG MOV AH,1 ;输入选择 INT 21H ;菜单选择。 ;CALL HUANHANG ;此换行千万不能加,加了后AX的值就变了!,导 ;致不能正确的选择菜单 CMP A

10、L,'0' ;选择退出 JZ END_OF_CODE CMP AL,'1' ;选择加法 JZ NEXT_OF_JIAFA CMP AL,'2' ;选择减法 JZ NEXT_OF_JIANFA CMP AL,'3' ;选择乘法 JZ NEXT_OF_CHENGFA CMP AL,'4' ;选择乘法 JZ NEXT_OF_CHUFA CALL HUANHANG LEA DX,STRING10 MOV AH,9 INT 21H JMP ONEAGAIN CALL HUANHANG ;菜单选择。 ;加法NEXT_OF_JI

11、AFA: CALL HUANHANG LEA DX,STRING5 MOV AH,09H INT 21H CALL HUANHANG LEA DX,STRING3 ;输入A MOV AH,09H INT 21H CALL HUANHANG LP1: MOV AH,1 INT 21H CMP AL,0DH ;当输入的字符为回车结束数据输入 JZ NEXT1 SUB AL,30H MOV AH,0 MOV CX,AX MOV BX,10 MOV AX,NUM1 MUL BX ADD AX,CX MOV NUM1,AX JMP LP1 NEXT1: LEA DX,STRING4 ;输入B MOV A

12、H,09H INT 21H CALL HUANHANG LP11: MOV AH,1 INT 21H CMP AL,0DH JZ NEXT11 ;当输入的字符为回车结束数据输入 SUB AL,30H MOV AH,0 MOV CX,AX MOV BX,10 MOV AX,NUM2 MUL BX ADD AX,CX MOV NUM2,AX JMP LP11 NEXT11: CALL HUANHANG ;调用换行子程序 CALL JIAFA ;调用加法子程序 JMP ONEAGAIN ;执行完后跳到最上面 ;减法NEXT_OF_JIANFA: CALL HUANHANGLEA DX,STRING6

13、MOV AH,09HINT 21HCALL HUANHANG LEA DX,STRING3 ;输入A MOV AH,09H INT 21H CALL HUANHANG LP2: MOV AH,1 INT 21H CMP AL,0DH ;当输入的字符为回车结束数据输入 JZ NEXT2 SUB AL,30H MOV AH,0 MOV CX,AX MOV BX,10 MOV AX,NUM1 MUL BX ADD AX,CX MOV NUM1,AX JMP LP2 NEXT2: LEA DX,STRING4 ;输入B MOV AH,09H INT 21H CALL HUANHANG LP22: MO

14、V AH,1 INT 21H CMP AL,0DH JZ NEXT22 ;当输入的字符为回车结束数据输入 SUB AL,30H MOV AH,0 MOV CX,AX MOV BX,10 MOV AX,NUM2 MUL BX ADD AX,CX MOV NUM2,AX JMP LP22 NEXT22: CALL HUANHANG CALL JIANFA ;调用减法子程序 JMP ONEAGAIN ;执行完后跳到最上面 ;乘法NEXT_OF_CHENGFA:CALL HUANHANGLEA DX,STRING7MOV AH,09HINT 21HCALL HUANHANG LEA DX,STRING

15、3 ;输入A MOV AH,09H INT 21H CALL HUANHANG LP4: MOV AH,1 INT 21H CMP AL,0DH ;当输入的字符为回车结束数据输入 JZ NEXT4 SUB AL,30H MOV AH,0 MOV CX,AX MOV BX,10 MOV AX,NUM1 MUL BX ADD AX,CX MOV NUM1,AX JMP LP4 NEXT4: LEA DX,STRING4 ;输入B MOV AH,09H INT 21H CALL HUANHANG LP44: MOV AH,1 INT 21H CMP AL,0DH JZ NEXT44 ;当输入的字符为

16、回车结束数据输入 SUB AL,30H MOV AH,0 MOV CX,AX MOV BX,10 MOV AX,NUM2 MUL BX ADD AX,CX MOV NUM2,AX JMP LP44 NEXT44: CALL HUANHANG CALL CHENGFA ;调用换行子程序 JMP ONEAGAIN ;除法NEXT_OF_CHUFA:CALL HUANHANGLEA DX,STRING8MOV AH,09HINT 21HCALL HUANHANG LEA DX,STRING3 ;输入A MOV AH,09H INT 21H CALL HUANHANG LP3: MOV AH,1 IN

17、T 21H CMP AL,0DH ;当输入的字符为回车结束数据输入 JZ NEXT3 SUB AL,30H MOV AH,0 MOV CX,AX MOV BX,10 MOV AX,NUM1 MUL BX ADD AX,CX MOV NUM1,AX JMP LP3 NEXT3: LEA DX,STRING4 ;输入B MOV AH,09H INT 21H CALL HUANHANG LP33: MOV AH,1 INT 21H CMP AL,0DH JZ NEXT33 ;当输入的字符为回车结束数据输入 SUB AL,30H MOV AH,0 MOV CX,AX MOV BX,10 MOV AX,

18、NUM2 MUL BX ADD AX,CX MOV NUM2,AX JMP LP33 NEXT33: ;CALL HUANHANG ; CALL C ;调用乘法子程序 CALL HUANHANG CALL CHUFA ;调用换行子程序 JMP ONEAGAIN END_OF_CODE:;CALL HUANHANGLEA DX,STRING9 MOV AH,9 INT 21H MOV AH,4CH INT 21H CODES ENDS END START该程序是一个简单的汇编语言计算器,能进行加减乘除简单运算,程序运行后有一个选择菜单,选择相应的功能后输入操作数就能执行相应的操作。该程序过于简陋,其中有很多地方没有优化,对于除法计算(不能整除的情况)的精度不高,只能显示整数部分,减法中对于以小减大的计算不能进行

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论