当前位置:网站首页>【汇编语言实战】一元二次方程ax2+bx+c=0求解(含源码与过程截屏,可修改参数)
【汇编语言实战】一元二次方程ax2+bx+c=0求解(含源码与过程截屏,可修改参数)
2022-07-24 08:55:00 【怪&】
目录:
前言
你好啊,我是“ 怪& ”,是一名在校大学生哦。
主页链接:怪&的个人博客主页
️博文主更方向为:课程学习知识、作业题解、期末备考。随着专业的深入会越来越广哦…一起期待。
️一个“不想让我曾没有做好的也成为你的遗憾”的博主。
很高兴与你相遇,一起加油!
一、实验说明及要求
1、实验说明
1、通过实验内容1理解底层程序设计。
2、要求在数据段中定义a、b、c、x,a、b、c初值不限。
3、程序执行过程中通过debug修改参数a、b、c的值。
4、计算的结果保存在变量x中。
2、实验要求
1、实验目的。
2、简单的程序流程图。
3、实验过程中内存状况截图及运行结果截图。
4、完整的代码(包括必要的注释)。
二、实验代码
DATAS SEGMENT
;此处输入数据段代码
a dw +1H ;+1,-2,+3 B^-4AC=4-(12)=-8 b^2-4ac<0,无根
b dw -2H ;+1,-4,+4 B^-4AC=16-(16)=0 b^2-4ac=0,有一根
d dw +3H ;+1,-2,-3 B^-4AC=4-(-12)=16 b^2-4ac>0,有两根
x1 dw 1H
x2 dw 1H
DATAS ENDS
STACKS SEGMENT
;此处输入堆栈段代码
STACKS ENDS
CODES SEGMENT
ASSUME CS:CODES,DS:DATAS,SS:STACKS
START:
MOV AX,DATAS
MOV DS,AX
;此处输入代码段代码
beginning:
mov AX,b ;
IMUL AX ;b^2
MOV CX,AX ;cx=b^2
MOV AX,4 ;ax=4
IMUL A ;ax=4a
IMUL D ;ax=4ac
MOV BX,AX ;bx=4ac
MOV AX,CX ;ax=b^2
SUB AX,BX ;ax=b^3-4ac
cmp AX,0 ;b^<4ac
JL no_answer ;跳转至no_answer
CMP AX,0
JE one_answer ;相等,跳转至ONE_ANSWER
jmp two_answer ;否则跳转至two_answer
no_answer:
mov x1,0
mov x2,0
jmp end_work
one_answer: ;一个值的时候:x1+x2=-b/(-2a)
MOV AX,B ;AX:B
MOV BX,A
DIV BX ;AX:B/A
MOV CX,2
DIV CX ;AX:B/(2A)
MOV CX,-1
MUL CX ;AX:-B/(2A)
MOV X1,AX ;X1=-B/(2A)
MOV X2,AX ;X2:-B/(2A)
JMP end_worK
sqrt: ;求ax的根号
mov bx,+1 ;用bx比较
mov cx,0 ;用cx记录求根数
compute:
SUB AX,BX ;ax-bx
CMP AX,0
JL continue_work ;<0
CMP AX,0
JE equal_cx1 ;=0
;>0
add bx,2 ;bx+2
add cx,1 ;根数+1
;cmp ax,bx ;比较
;jb continue_work ;当剩余值ax小于bx时,根数即为cx
;cmp ax,bx ;比较
;je equal_cx1 ;当剩余值ax=bx时,根数即为cx+1
JMP compute
equal_cx1: ;当剩余值ax=bx时,根数即为cx+1
add cx,1
jmp continue_work
two_answer:
jmp sqrt
continue_work: ;cx: sqrt(b^2-4ac)
mov AX,B ;ax=b
MOV BX,-1
IMUL BX ;AX=-1
add AX,CX ;ax:-b+sqrt(b^2-4ac)
MOV BX,2 ;BX=2
IDIV BX ;ax= [-b+sqrt(b^2-4ac)]/2
mov BX,A ;BX=A
IDIV BX ;ax= [-b+sqrt(b^2-4ac)]/(2a)
MOV X1,AX
mov AX,B ;ax=b
MOV BX,-1
IMUL BX ;AX=-b
sub AX,CX ;ax:-b-sqrt(b^2-4ac)
MOV BX,2 ;BX=2
IDIV BX ;ax= [-b-sqrt(b^2-4ac)]/2
mov BX,A ;BX=A
IDIV BX ;ax= [-b-sqrt(b^2-4ac)]/(2a)
MOV X2,AX
end_work:
jmp beginning ;跳至开头,重新执行
MOV AH,4CH ;退出
INT 21H
CODES ENDS
END START
三、代码思路


四、程序运行结果
(1)、无解
a=+1 b=-2 c=+3
b^2-4ac = 4-12 = -8<0
所以令x1=0, x2=0
内存中,x1、x2初始值如下:

指令执行:发现跳至no_answer情况

结果:可以看到内存中x1=0,x2=0 计算正确

(2)、一个解(X1 = X2)
a= +1 b = -4 c = +4
b^2-4ac = 16-16=0
x1 = x2 =-2a/b=2
用debug将内存中的a、b、c、x1、x2调整至 1、-4、4、1、1
据此运行图可见其已跳转至One_answer情况了。
结果分析:根据有符号数乘法,结果低位有效。
可得:x1=x2=2,所以计算正确。
(3)、两个不同解
a =+1 b=-2 c=-3
b^2-4ac=4-(-12)=16>0,所有两个根
x1=3
x2=-1
用debug将内存中的a、b、c、x1、x2调整至 1、-2、-3、1、1
跳至two_answer情况(两个不同解)
求出 b 2 − 4 a c \sqrt {b^2 - 4ac} b2−4ac ,求根部分为:sqrt标识,求根结果保存在CX中
求出x1=3
求出x2=-1 (有符号数运算,仅低位有效,补码为FF,真实值即为-1)
在内存中查看结果: X1=3 X2=-1
.
五、实验总结
在这次的实验中,我再次熟悉了DEBUG的启动及其基本命令的使用,同时将在课堂上所学过以及先前实验已实践过的寄存器调用与寻址操作再次复习巩固,并且对汇编语言下的:顺序程序设计、分支程序设计、循环程序设计有了自己的理解与设计。
同时,一元二次方程的求解涉及有符号数的计算,所以在分支跳转以及运算时需要注意指令的选择,DIV/IDIV,MUL/IMUL等,我在实践代码设计与调试中明白了有/无符号数的运算操作以及存储方式,对标志寄存器以及分支跳转更加熟练。
由于一元二次方程的解有三个情况:1、无解 2、一个解(两个解相同) 3、两个不同的解的情况 ,以及运用到循环、跳转、分块等思想。在实验过程中,我有遇到一些问题,例如汇编代码运行的顺序、跳转、运算结果有符号的判断跳转等,在老师的耐心解答以及我再次调试、实践下,最终圆满的完成了所有的实验要求,同时将过程与结果都认真记录下来。
5月16日下午2:30-5:30的汇编实验课,我从下午2:30做至晚上9:30,经历了近百次的调试bug以及上万次的执行指令,终于大体完成要求的功能,但还是有些小地方不够完美,之后又三次前往实验室完善代码及图片记录,最终呈现至此博文中。
️️️忙碌的敲代码也不要忘了浪漫鸭!
汇编语言是进入大学至此最喜欢的专业课之一,也承载着我的遗憾……
宝子们一定要学好哦!

边栏推荐
- SQL learning
- SQL problem summary
- Xiaobai learns oauth2
- C language practice questions + Answers:
- The detailed process of building discuz forum is easy to understand
- Typescript -- Generic
- WordPress free theme: document, making reading more convenient
- 安装软件时提示【An error occurred while trying to create a file in the destination directory: 拒绝访问】的解决方法
- Usage of volatile keyword in C language
- 1、 Midwey addition, deletion, modification and query
猜你喜欢

redis学习一redis介绍及NIO原理介绍

Android系统安全 — 5.3-APK V2签名介绍

VGA character display based on FPGA

PXE principle and configuration

Office fallback version, from 2021 to 2019

Use the bark app to realize the process of pushing messages to mobile phones

Hack the box - Web requests module detailed Chinese tutorial

4、 Midway integrates swagger and supports JWT bearers

【翻译】使用gRPC和REST的微服务架构中的集成挑战

Source code analysis of BlockingQueue (arraybq and linkedbq)
随机推荐
Wargames bandit (21-33) problem solving essay
C # briefly describe the application of Richter's replacement principle
如何将CAD文件导入图新地球中,与影像地形倾斜模型准确叠加
Office fallback version, from 2021 to 2019
Tiktok 16 popular categories, tiktok popular products to see which one you are suitable for?
Precautions for using kettle excel input
C# 简述里氏替换原则的应用
在npm上发布自己的库
Seven data show the impact of tiktok's combination of payment and organic content
Shell script backup mongodb database
Xtrabackup realizes full backup and incremental backup of MySQL
安装软件时提示【An error occurred while trying to create a file in the destination directory: 拒绝访问】的解决方法
table-rowspan
Four data interaction modes of go grpc
Using OpenCV to do a simple face recognition
POI operation excel collation
RPC调用方如何实现异步调用:CompletableFuture
3、 Midway interface security certification
面试官:哥们Go语言的读写锁了解多少?
剑指 Offer II 024. 反转链表