多字节加减法汇编程序.doc_第1页
多字节加减法汇编程序.doc_第2页
多字节加减法汇编程序.doc_第3页
多字节加减法汇编程序.doc_第4页
多字节加减法汇编程序.doc_第5页
已阅读5页,还剩4页未读 继续免费阅读

下载本文档

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

文档简介

16位10进制正整数加减法汇编程序代码说明:将代码复制到Masm for Windows 集成实验环境 2012.5软件当中保存后点击运行如图:出现如下窗口:在屏幕上输入被加数(被减数)按+结束,然后再输入加数(减数)按=结束,最后窗口会显示运算结果。例如要计算123456+123456789,步骤如下:显然运算结果是正确的。进行减法运算:123456-123456789,结果如下:(注:由于n=16所以本程序最多只能进行16位数以内的正整数加减运算,如需进行任意位数的运算只需对n进行更改即可,这是本程序的最大优点。但是本程序只能完成正整数的加减运算,对负数和小数的运算就无能为力了,另外也无法进行连加与连减的运算。因此程序还有待进一步的改进。)汇编程序代码:DATAS SEGMENTn EQU 16 ;n表示和的最大位数m EQU 8 ;因为和是ASCII码要转换成BCA码所以m=n/2k EQU 9*m+6 ; BUF0 DB 1 DUP (30H); BUF1 DB n DUP(0) ;被加数(ASCII),n=8 DB 1 DUP (30H) BUF2 DB n DUP(0) ;加数(ASCII) BUF3 DB m DUP(0) ;被加数(BCD) BUF4 DB m DUP(0) ;加数(BCD) FHA DB 4 DUP(?) ;用于保存+、-、数据长度 SBC DB m DUP(?) ;BCD码形式的和 SAS DB n DUP(?) ;ASCII码形式的和 BUF5 DB 30H,n DUP(0),30H,n DUP(0),n DUP(0),4 DUP(?),m DUP(?),n DUP(?)DATAS ENDSSTACKS SEGMENTDB 100 DUP(?) ;此处输入堆栈段代码STACKS ENDSCODES SEGMENT ASSUME CS:CODES,DS:DATAS,SS:STACKSINPT1 PROC ;输入被加数到BUF1按+结束 LEA SI,BUF1 MOV CX,0 ;CX用来统计输入数的字长 IN1:MOV AH, 01H INT 21H CMP AL,+ JZ BJS1 CMP AL,- JZ BJS1 MOV SI,AL INC SI INC CL JMP IN1 ;将BUF1中的ASCII转换成BCD码到BUF3BJS1: MOV FHA,AL MOV 1FHA,CL LEA DI,BUF3 MOV BX,2 MOV AX,CX DIV BL ADD AL,AH MOV CL,AL AB1: DEC SI ;AB1-ASCII转换成BCD码 MOV AL,SI SUB AL,30H DEC SI MOV AH,SI SUB AH,30H PUSH CX MOV CL,4 SHL AH,CL POP CX ADD AL,AH MOV DI,AL INC DI LOOP AB1 ;输入加数到BUF2按=结束 LEA SI,BUF2 MOV CX,0 ;CX用来统计输入数的字长 IN2:MOV AH, 01H INT 21H CMP AL,= JZ JAS MOV SI,AL INC SI INC CX JMP IN2 ;将BUF2中的ASCII转换成BCD码到BUF4JAS: MOV 2FHA,CL LEA DI,BUF4 MOV BX,2 MOV AX,CX DIV BL ADD AL,AH MOV CL,AL AB2: DEC SI ;AB2-ASCII转换成BCD码 MOV AL,SI SUB AL,30H DEC SI MOV AH,SI SUB AH,30H PUSH CX MOV CL,4 SHL AH,CL POP CX ADD AL,AH MOV DI,AL INC DI LOOP AB2 RETINPT1 ENDP;加法子程序 JAF PROC CLC MOV CL,m ;m=8 LEA BX,BUF3 LEA SI,BUF4 LEA DI,SBC ADC_:MOV AL,BX ADC AL,SI DAA MOV DI,AL INC SI INC DI INC BX LOOP ADC_ RETJAF ENDP;减法子程序JIAF PROCSBB_:MOV AL,1FHA CMP AL,2FHA JA BDJ1 ;被加数长度大于加数长度,即被加数大于加数 JZ BZJ1 ;被加数长度等于加数长度,进行大小比较 JMP BBJ ;被加数长度小于加数长度,即被加数小于加数 BZJ1:MOV CL,AL ;被加数长度等于加数长度,进行大小比较 LEA SI,BUF1 LEA DI,BUF2BZJ3:MOV AL,SI CMP AL,DI JA BDJ1 ;被加数当前位大于加数当前位即被加数大于加数跳转 JB BBJ ;被加数当前位小于加数当前位即被加数小于加数跳转 INC SI ;被加数当前位等于加数当前位,调整指针继续比较 INC DI LOOP BZJ3 JMP BDJ1 ;被加数等于加数 BBJ:MOV AH,02H MOV DL,- INT 21H CLC MOV CL,m LEA BX,BUF4 LEA SI,BUF3 LEA DI,SBC JMP BDJBDJ1:CLC MOV CL,m LEA BX,BUF3 LEA SI,BUF4 LEA DI,SBC BDJ:MOV AL,BX SBB AL,SI DAS MOV DI,AL INC SI INC BX INC DI LOOP BDJ RETJIAF ENDP;BCD码转ASCII码子程序 BCD_ASC PROC MOV CX,m ;m=8 LEA SI,SBC LEA DI,SASBC_as:MOV AL,SI MOV AH,AL AND AL,0FH ADD AL,30H MOV DI,AL INC DI PUSH CX MOV CX,4 SHR AH,CL POP CX ADD AH,30H MOV DI,AH INC DI INC SI LOOP BC_as MOV CL,n ;这里n等于16DIS1:DEC DI ;把首位的0去掉 例如:0+1=00000001显示结果1 CMP BYTE PTRDI,30H JNZ DISP ;首位不为0跳转 LOOP DIS1 JNZ DISP ;CX不等于0 即结果不为0跳转 MOV DL,0 ;CX等于0 即结果为0则显示0结束 MOV AH,02H INT 21H JMP DIS2 DISP:MOV DL,DI MOV AH,02H INT 21H DEC DI LOOP DISPDIS2:RETBCD_ASC ENDP;数据段初始化子程序CLC1 PROC MOV CX,K LEA SI,BUF5 LEA DI,BUF0CLC2:MOV AL,SI MOV DI,AL INC SI INC DI LOOP CLC2 RETCLC1 ENDPSTART: ;主程序:16位数以内整数加减法 MOV AX,DATAS MOV DS,AX ;此处输入代码段代码 CALL INPT1 ;调用输入子程序 CMP FHA,+ ;判断加减号 JNZ Jiha ;是-跳转到减法 CALL JAF ;调用加法子程序 JMP B_A1 ;跳转到BCD 转ACSII子程序Jiha:CALL JIAF ;调用减法子程序B_A1:CALL BCD_AS

温馨提示

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

评论

0/150

提交评论