返回顶部
首页 > 资讯 > 后端开发 > 其他教程 >汇编语言系列之汇编实现简单数学运算
  • 845
分享到

汇编语言系列之汇编实现简单数学运算

2024-04-02 19:04:59 845人浏览 八月长安
摘要

目录1.计算S=1+2×3+3×4+4×5+···+N(N+1)1.1设计要求:1.2设计思路:1.3程序清单:1.4程序运行结果及分析:2.计算N!2.1设计要求:2.2设计思路:

软件:emu8086

语言:汇编语言(Assembly)

注意:本文列出了两种算术运算的代码,全部代码为博主独自一人编写,会有瑕疵,谨慎使用。

1.计算S=1+2×3+3×4+4×5+···+N(N+1)

1.1设计要求:

设计程序,实现数学公式S=1+2×3+3×4+4×5+···+N(N+1)的算法。数值N由加键盘输入,计算结果在显示终端输出。设计要求:计算结果不超过十六位寄存器的存储能力,如有溢出提示错误。

1.2设计思路:

输入N值然后把N给BH作为循环次数,通过循环实现乘和累加计算,结果为十六进制,通过除以10得到十进制,存入堆栈再依次输出。

1.3程序清单:


DATA SEGMENT
     pkey   DB  0dh,0ah,"pleas input N end by ';' :$"
     over   DB  0AH,0DH,"overflow!",0dh,0ah,'$'
     result  DB  0dh,0ah,'result is:','$'
     DAT1  DB  8 DUP(0)
DATA ENDS

STACK SEGMENT
    SSTACK DB 100 DUP(0)
STACK ENDS 

CODE SEGMENT
     ASSUME CS:CODE,DS:DATA,SS:STACK 
     
STATE:  
    MOV AX,DATA
    MOV DS,AX
    LEA SI,DAT1     ;开辟缓冲区
    LEA DX,pkey
    MOV AH,9
    INT 21H         ;DOS功能调用,输出字符串
    
LLP:MOV AH,1
    INT 21H         ;DOS功能调用,输入N值
    SUB AL,2FH      
    INC DX          ;DX计数
    MOV [SI],AL     ;将输入的数据存在SI缓冲区
    INC SI
    CMP AL,0CH      ;输入为封号结束输入
    JNZ LLP
    SUB SI,2
    CMP DX,02H      ;DX不为2表示输入为两位数
    JNZ LLLP 

LLP1:MOV CX,1
     MOV BL,2       ;赋初始值    
     JMP LP
LLLP:
     MOV DI,SI
     SUB DI,1          
     SUB [DI],1
     MOV AL,10
     MUL [DI]
     ADD [SI],AX     ;输入是两位数时十位乘10加个位
     SUB AH,AH
     JMP LLP1
     
LP: MOV BH,[SI]      ;把循环次数给BH
    MOV AL,BL
    INC BL
    MUL BL           ;BL(加1)和AL(原值)相乘给AX
    ADD CX,AX        ;AX和CX相加给CX,通过循环实现累加
    JO  OOF         ;如果溢出重新输入
    CMP BH,BL        ;判断是否达到N值
    JNZ LP 
    MOV AX,CX
    MOV CX,0AH
    MOV BX,0                 
              
    
LOP:MOV DX,0
    DIV CX         ;AX表示的32位数除以10,商放在AX,余数放在DX
    INC BX
    ADD DX,30H
    PUSH DX           ;将余数依次压入栈
    CMP AX,0
    JNZ LOP           ;商不为0继续除10
    LEA DX,result
    MOV AH,9
    INT 21H           ;DOS功能调用,输出字符串  
    
OUTPUT:
     POP DX
     MOV AH,2
     INT 21H          ;DX中数据依次出栈并显示
     DEC BX
     JNZ OUTPUT       ;出栈完成后停止
     JMP STATE            
     
OOF:LEA DX,over
    MOV AH,09H
    INT 21H           ;DOS功能调用,溢出显示
    JMP STATE 
          
CODE ENDS

END STATE

1.4程序运行结果及分析:

乘法和累加计算根据流程图一步步赋值即可得到,在输入两位数和结果转十进制输出时遇到了麻烦,通过查找资料不断尝试,最终找到了简单的解决办法,即输入两位时移位累加,输出除以10存入堆栈并依次输出显示。

图5 计算S=1+2×3+3×4+4×5+···+N(N+1)设计结果

2.计算N!

2.1设计要求:

掌握汇编语言实现高级语言中数学函数的方法。设计程序,实现数学公式N!=N(N-1)(N-2)······2*1的算法。数值N由键盘输入,计算结果在显示终端输出。设计要求:N的范围为0-65535,即不超出16位寄存器的存储容量。

2.2设计思路:

输入N值,通过循环实现阶乘并将计算结果存入AX,然后十六进制转十进制输出。

2.3程序清单:


DATA SEGMENT 
    pkey   DB  0AH,0DH,"Please Input N(1-8):",'$'  
    result DB  0AH,0DH,"the results is:",'$' 
    over   DB  0AH,0DH,"overflow!",0AH,0DH,'$'
DATA ENDS           

STACK SEGMENT
    SSTACK DB 100 DUP(0)
STACK ENDS          

CODE SEGMENT
    ASSUME CS:CODE,DS:DATA,SS:STACK
    
STATE: 
       MOV AX,DATA
       MOV DS,AX   ;数据段初始化

       LEA DX,pkey
       MOV AH,09H
       INT 21H       ;DOS功能调用,显示字符串  
       
       MOV AH,1      
       INT 21H       ;DOS功能调用,输入N 
       SUB AL,30H
       CMP AL,08H
       JA  OOF       ;输入大于8溢出 
       
       XOR AH,AH   
       MOV BP,AX     ;赋循环计数值N给BP  
       
LP:    MOV BX,BP
       DEC BX
       JZ  LLP       ;阶乘次数为BX,BX为0必须马上跳转
       MUL BX        ;AX中存放阶乘结果(十六进制转十进制用)
       DEC BP
       JNZ LP 

LLP:   MOV CX,0
       MOV BX,10
       
LLLP:  MOV DX,0     
       DIV BX        ;AX表示的32位数除以10,商放在AX,余数放在DX 
       ADD DX,30H    
       PUSH DX       ;将余数转换为ASCII码值并压入栈
       INC CX
       CMP AX,0      ;商不为0就继续除10
       JNZ LLLP 

       MOV AH,09H
       LEA DX,result 
       INT 21H       ;DOS功能调用,输出字符串
       
LOP:   POP DX           
       MOV AH,2                                     
       INT 21H       ;DX各位出栈并显示
       LOOP LOP     
       JMP STATE   

OOF:   LEA DX,over
       MOV AH,09H
       INT 21H      ;DOS功能调用,溢出显示
       JMP STATE 
   
CODE ENDS
     END STATE

2.4程序运行结果及分析:

阶乘部分是利用MUL指令AX中存放计算结果并实现阶乘,除阶乘计算部分外,其它部分和第五题类似,同样结果转十进制输出时遇到了麻烦,利用除以10存入堆栈再依次取出并显示来实现。

图6 计算N!设计结果

到此这篇关于汇编语言系列之汇编实现简单数学运算的文章就介绍到这了,更多相关汇编语言数学运算内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

--结束END--

本文标题: 汇编语言系列之汇编实现简单数学运算

本文链接: https://lsjlt.com/news/158598.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • 汇编语言系列之汇编实现简单数学运算
    目录1.计算S=1+2×3+3×4+4×5+···+N(N+1)1.1设计要求:1.2设计思路:1.3程序清单:1.4程序运行结果及分析:2.计算N!2.1设计要求:2.2设计思路:...
    99+
    2024-04-02
  • 汇编语言怎么实现简单数学运算
    这篇文章主要介绍“汇编语言怎么实现简单数学运算”,在日常操作中,相信很多人在汇编语言怎么实现简单数学运算问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”汇编语言怎么实现简单数学运算”的疑惑有所帮助!接下来,请跟...
    99+
    2023-06-21
  • 汇编语言系列之汇编实现字符串操作
    目录1.字符串匹配设计1.1设计要求:1.2设计思路:1.3程序清单:1.4程序运行结果及分析:2.字符串输入及显示设计2.1设计要求:2.2设计思路:2.3程序清单:2.4程序运行...
    99+
    2024-04-02
  • 5.7 汇编语言:汇编高效乘法运算
    乘法指令是一种在CPU中实现的基本算术操作,用于计算两个数的乘积。在汇编语言中,乘法指令通常是通过mul(无符号乘法)和imul(有符号乘法)这两个指令实现的。由于乘法指令在执行时所消耗的时钟周期较多,所以编译器在优化代码时通常会尝试将乘法...
    99+
    2023-08-30
    汇编 汇编语言 Windows汇编 x86
  • 汇编语言系列之汇编实现各种码制的转换(思路详解)
    目录1.十六进制转换为二进制数设计1.1设计要求:1.2设计思路:1.3程序清单:1.4程序运行结果及分析:2.十六进制转换为十进制数设计2.1设计要求:2.2设计思路:2.3程序清...
    99+
    2024-04-02
  • 汇编语言之实现发出各种声音
    软件:emu8086 语言:汇编语言(Assembly) 注意:本文列出了响铃,机枪声音,音乐播放的代码,第一个代码为博主独自一人编写,所有代码都会有瑕疵,谨慎使用。 9.响铃设计 ...
    99+
    2024-04-02
  • c语言switch反汇编的实现
    目录一、switch语句1、在正向编码时,switch语句可以看做是if语句的简写2、break在switch语句的妙用二、switch语句的反汇编1、当switch存在3个分支时2...
    99+
    2024-04-02
  • c语言怎么实现switch反汇编
    这篇文章主要介绍“c语言怎么实现switch反汇编”,在日常操作中,相信很多人在c语言怎么实现switch反汇编问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”c语言怎么实现switch反汇编”的疑惑有所帮助!...
    99+
    2023-06-08
  • 汇编语言的函数式编程实例分析
    这篇文章主要介绍了汇编语言的函数式编程实例分析的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇汇编语言的函数式编程实例分析文章都会有所收获,下面我们一起来看看吧。一切都是为了消除副作用要了解函数式编程,我们需要首...
    99+
    2023-06-27
  • 学习python 之编写简单乘法运算题
    实现代码: #! /usr/bin/python //处理程序 #filename jiafa.py //文件名 import sys import random run...
    99+
    2022-06-04
    乘法 简单 python
  • 计算机系统汇编语言和机器语言深入理解
    目录引言1、机器语言2、汇编语言3、高级语言总结引言 《深入理解计算机系统》第三章——程序的机器级表示。作者首先讲解了汇编代码和机器代码的关系,阐述了汇编承...
    99+
    2024-04-02
  • 汇编语言功能实现数据复制实例分析
    这篇文章主要讲解了“汇编语言功能实现数据复制实例分析”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“汇编语言功能实现数据复制实例分析”吧!问题1:将内存ffff:0~ffff:b单元中的数据复...
    99+
    2023-06-25
  • 汇编语言功能实现数据复制实例详解
    目录问题1:将内存ffff:0~ffff:b单元中的数据复制到0:200~0:20b单元中问题2:将“mov ax,4c00h“之前的指令复制到内存0:200处问题3:将程序中定义的...
    99+
    2024-04-02
  • 汇编语言如何实现发出各种声音
    这篇文章主要介绍“汇编语言如何实现发出各种声音”,在日常操作中,相信很多人在汇编语言如何实现发出各种声音问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”汇编语言如何实现发出各种声音”的疑惑有所帮助!接下来,请跟...
    99+
    2023-06-21
  • 汇编语言中如何实现字符串操作
    这篇文章将为大家详细讲解有关汇编语言中如何实现字符串操作,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。软件:emu8086语言:汇编语言(Assembly)注意:小编列出了字符串匹配和字符串...
    99+
    2023-06-21
  • 汇编语言显示功能实现教程详解
    目录问题11 如何确定字符要显示的位置确定3行字符在每一行的起始位置确定3行字符在屏幕中的哪一行2 如何确定字符要显示的颜色属性 问题2:分析:问题1 在屏幕中间...
    99+
    2024-04-02
  • 用Go语言编写的四则运算库:简单高效的数学计算工具
    用Go语言编写的四则运算库:简单高效的数学计算工具随着计算机技术的不断进步,数学计算在我们日常生活和工作中扮演着越来越重要的角色。无论是进行复杂的数据分析,还是进行简单的数据处理,数学计算都是不可或缺的一环。为了提高计算效率和准确度,我们需...
    99+
    2023-12-23
    Go语言 数学计算 四则运算
  • 汇编语言怎么实现各种码制的转换
    本篇内容主要讲解“汇编语言怎么实现各种码制的转换”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“汇编语言怎么实现各种码制的转换”吧!1.十六进制转换为二进制数设计1.1设计要求:设计转换程序,将键...
    99+
    2023-06-21
  • 汇编语言显示功能实现方法是什么
    本篇内容主要讲解“汇编语言显示功能实现方法是什么”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“汇编语言显示功能实现方法是什么”吧!问题1在屏幕中间分别显示绿底,绿底红色,白底蓝色的字符串“Wel...
    99+
    2023-06-25
  • 汇编语言功能用循环累加实现乘法
    目录问题1:编程计算2的2次方,结果存在ax中分析:用2+2实现问题2:编程实现2的12次方分析:用loop实现问题3:编程实现123*236,结果存在ax中分析:用236相加123...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作