汇编语言怎么实现简单数学运算

技术汇编语言怎么实现简单数学运算这篇文章主要介绍“汇编语言怎么实现简单数学运算”,在日常操作中,相信很多人在汇编语言怎么实现简单数学运算问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”汇编语

本文主要介绍“如何用汇编语言实现简单的数学运算”。在日常操作中,相信很多人对于如何用汇编语言实现简单的数学运算有所疑惑。边肖查阅了各种资料,整理出简单易用的运算方法,希望能帮助大家解答“如何用汇编语言实现简单的数学运算”的疑惑!接下来,请和边肖一起学习!

5.计算S=1+23+34+45++N(N+1)

10-1010,设计了数学公式S=1.234.45 . n(n ^ 1)的算法。n值由键盘输入,计算结果在显示终端输出。设计要求:如果出现溢出提示错误,计算结果不应超过16位寄存器的存储容量。

00-1010,输入n的值再把n给BH作为循环数,通过循环实现乘法和累加。结果是十六进制。除以10得到十进制数,存储在堆栈中,依次输出。

汇编语言怎么实现简单数学运算

5.1设计要求:

DATASEGMENT

pkeyDB0dh,0ah,' pleasinputendby ';':$'

overDB0AH,0DH,“溢出!”,0dh,0ah,' $ '

resultDB0dh,0ah,' resultis: ',' $ '

DAT1DB8DUP(0)

数据结束

STACKSEGMENT

SSTACKDB100DUP(0)

STACKENDS

CODESEGMENT

ASSUMECS:CODE,DS:DATA,SS:STACK

状态:

数据移动

MOVDS,AX

DAT1莱西;打开缓冲区

pkey

MOVAH,9岁

INT21HDOS函数调用,输出字符串

LLP:MOVAH,1

INT21HDOS函数调用,输入n值

SUBAL,2FH

INCDXDX计数

MOV[SI],AL;输入数据存储在SI缓冲器中。

INCSI

CMPAL,0CH输入作为标题的结尾。

JNZLLP

SUBSI,2

CMPDX,02H如果DX不是2,则输入两位数。

(=NationalBureauofStandards)国家标准局

p;  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

5.4程序运行结果及分析:

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

汇编语言怎么实现简单数学运算

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

6.计算N!

6.1设计要求:

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

6.2设计思路:

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

汇编语言怎么实现简单数学运算

6.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

6.4程序运行结果及分析:

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

汇编语言怎么实现简单数学运算

图6 计算N!设计结果

到此,关于“汇编语言怎么实现简单数学运算”的学习就结束了,希望能够解决大家的疑惑。理论与实践的搭配能更好的帮助大家学习,快去试试吧!若想继续学习更多相关知识,请继续关注网站,小编会继续努力为大家带来更多实用的文章!

内容来源网络,如有侵权,联系删除,本文地址:https://www.230890.com/zhan/123880.html

(0)

相关推荐

  • 如何使用Cytoscape的NetworkAnalyzer工具计算网络相关属性

    技术如何使用Cytoscape的NetworkAnalyzer工具计算网络相关属性如何使用Cytoscape的NetworkAnalyzer工具计算网络相关属性,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编

    攻略 2021年11月10日
  • gis安装

    技术gis安装 gis安装1、下载arcGis10.2软件下载地址:https://pan.baidu.com/s/1rHtNHn-l-myoSvCvbpAGHA 提取码:ki1e (压缩包密码:arc

    礼包 2021年10月28日
  • Python怎么修改表格数据

    技术Python怎么修改表格数据这篇文章主要介绍“Python怎么修改表格数据”,在日常操作中,相信很多人在Python怎么修改表格数据问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Pyt

    攻略 2021年11月29日
  • javascript如何判断id是否存在

    技术javascript如何判断id是否存在这篇文章主要为大家展示了“javascript如何判断id是否存在”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“javascrip

    攻略 2021年11月7日
  • 槟榔危害,吃槟榔最大的危害是什么

    技术槟榔危害,吃槟榔最大的危害是什么我国南方诸省居民尤其是湖南等地有嚼吃槟榔的习俗,有人趣称为“中国式口香糖”。槟榔对治疗多种肠道寄生虫病如绦虫槟榔危害、蛔虫、蛲虫等都有效,可以称之为“肠道寄生虫的克星”,其他还有诸多功

    生活 2021年10月21日
  • 拓端tecdat|R语言平滑算法LOESS局部加权回归、三次样条、变化点检测拟合电视节目《白宫风云》在线收视率

    技术拓端tecdat|R语言平滑算法LOESS局部加权回归、三次样条、变化点检测拟合电视节目《白宫风云》在线收视率 拓端tecdat|R语言平滑算法LOESS局部加权回归、三次样条、变化点检测拟合电视节

    礼包 2021年10月28日