汇编语言实现求两个数的最小公约数,平方差,各占和的百分比

按下列要求编程:

(1)输入两个小于100的十进制正整数。

(2)求出这两个数的所有公约数。

(3)求出这两个数的平方差,若是负的要输出负号。

(4)计算两个数各占和的百分比,并且按照“ %”的格式输出(小数点后保留两位)。

(5)数据的输入和结果的输出都要有必要的提示,且提示独占一行。

(6)要使用到子程序。

?

源代码:

  1 data segment
  2     hh db 0dh,0ah,‘$‘
  3     m1 db ‘please enter a number:‘,0dh,0ah,‘$‘
  4     m2 db ‘please enter another number:‘,0dh,0ah,‘$‘
  5     m3 db ‘gong yue shu:‘,0dh,0ah,‘$‘
  6     m4 db ‘ping fang cha:‘,0dh,0ah,‘$‘
  7     m5 db ‘num1/sum is:‘,0dh,0ah,‘$‘
  8     m6 db ‘num2/sum is:‘,0dh,0ah,‘$‘
  9     sum dw 0
 10     x dw 0
 11     y dw 0
 12     z dw 0
 13     sign db 0h
 14     s db 6 dup(0h),‘$‘
 15 data ends
 16
 17 code segment
 18     assume cs:code,ds:data
 19     main proc far
 20     start:
 21         mov ax,data
 22         mov ds,ax
 23         mov ax,offset m1
 24         call print
 25         call enternumber
 26         mov bx,ax
 27         mov x,bx
 28         mov sum,bx
 29
 30         mov ax,offset m2
 31         call print
 32         call enternumber
 33         mov cx,ax
 34         mov y,cx
 35         add sum,cx
 36
 37         call find
 38         mov ax,offset m3
 39         call print
 40         mov ax,cx
 41
 42         mov bl,al
 43         mov bh,1
 44         l1:
 45             mov al,bl
 46             xor ah,ah
 47             div bh
 48             cmp ah,0
 49             jnz next2
 50             mov al,bh
 51             aam
 52             mov cx,ax
 53             add ch,30h
 54             mov dl,ch
 55             mov ah,2
 56             int 21h
 57             add cl,30h
 58             mov dl,cl
 59             mov ah,2
 60             int 21h
 61             mov dx,offset hh
 62             mov ah,09h
 63             int 21h
 64
 65         next2:
 66             inc bh
 67             cmp bl,bh
 68             jl done
 69             jmp l1
 70         done:
 71             mov ax,offset m4
 72             call print
 73             call pfc
 74
 75
 76         mov ax,offset hh
 77         call print
 78         mov ax,offset m5
 79         call print
 80         mov al,byte ptr x
 81         mov bh,100
 82         mul bh
 83         mov bl,byte ptr sum
 84         div bl
 85         mov bl,al
 86
 87         call disp10
 88
 89         mov dl,‘%‘
 90         mov ah,02h
 91         int 21h
 92
 93         mov ax,offset hh
 94         call print
 95         mov ax,offset m6
 96         call print
 97
 98         mov al,byte ptr y
 99         mov bh,100
100         mul bh
101         mov bl,byte ptr sum
102         div bl
103         mov bl,al
104         call disp10
105         mov dl,‘%‘
106         mov ah,02h
107         int 21h
108
109         mov ah,4ch
110         int 21h
111
112         main endp
113
114     print proc near
115
116         mov dx,ax
117         mov ah,09h
118         int 21h
119         ret
120
121     print endp
122
123     enternumber proc near
124
125         mov ah,01h
126         int 21h
127         mov dh,al
128         sub dh,30h
129
130         mov ah,01h
131         int 21h
132         cmp al,0dh
133         jz next1
134         sub al,30h
135         shl dh,1
136         mov dl,dh
137         shl dh,1
138         shl dh,1
139         add dh,dl
140         add dh,al
141
142         next1:
143             mov cl,dh
144             mov dx,offset hh
145             mov ah,09h
146             int 21h
147             mov al,cl
148             xor ah,ah
149         ret
150     enternumber endp
151
152    find proc near
153
154        cmp bx,cx
155        jnl first
156        xchg bx,cx
157        first:
158            xor dx,dx
159            mov ax,bx
160            div cx
161            cmp dx,0
162            jz equal
163            mov bx,cx
164            mov cx,dx
165            jmp first
166
167        equal:
168            ret
169    find endp
170
171    pfc proc near;  计算平方差
172        work:
173            mov al,byte ptr x
174            mul al
175            mov z,ax
176            mov al,byte ptr y
177            mul al
178            cmp z,ax
179            jb n1
180            sub z,ax
181            jmp n2
182
183        n1:
184            sub ax,z
185            mov z,ax
186            mov sign,‘-‘
187        n2:
188            mov cx,5h
189            mov di,4h
190            mov bx,0ah
191            mov ax,z
192
193        w2:
194            mov dx,0
195            div bx
196            add dl,30h
197            mov s[di],dl
198            dec di
199            cmp ax,0h
200            jz w2exit
201            loop w2
202        w2exit:
203            mov al,sign
204            mov s[di],al
205            mov di,0
206
207        w3:
208            inc di
209            cmp s[di],0h
210            jz w3
211            lea dx,s[di]
212            mov ah,09h
213            int 21h
214        ret
215    pfc endp
216
217    disp10 proc near  ;计算占和百分比
218        mov ah,0
219        mov al,bl
220        mov bh,100
221        div bh
222        mov bl,ah
223        mov dl,al
224        cmp dl,0
225        jz jump1
226        add dl,30h
227        mov ah,02
228        int 21h
229        jump1:
230            mov al,bl
231            mov ah,0
232            mov bh,10
233            div bh
234            mov bl,ah
235            mov dl,al
236            cmp dl,0
237            jz jump2
238            add dl,30h
239            mov ah,02
240            int 21h
241        jump2:
242            mov dl,bl
243            add dl,30h
244            mov ah,02h
245            int 21h
246        ret
247
248    disp10 endp
249 code ends
250 end start

运行示例:

?                                        ?

原文地址:https://www.cnblogs.com/lihello/p/11493320.html

时间: 2024-10-12 16:45:50

汇编语言实现求两个数的最小公约数,平方差,各占和的百分比的相关文章

求两个数的最大公约数和最小公倍数

import java.util.Scanner; //求两个数的最大公约数,最小共倍数. public class CommonMaxDivisor { public static void main(String[] args){ Scanner scanner=new Scanner(System.in); int m=scanner.nextInt(); int n=scanner.nextInt(); scanner.close(); CommonMaxDivisor cmd=new

写一个方法,求两个数的最大公约数和最小公倍数。

package homework0702; /* * 最大公约数 利用辗转相除法求解两个正整数的最大公约数 在循环中,只要除数不等于0,用较大的数除以较小的数,将小的一个数作为下一轮循环的大数,取得的余数作为下一轮循环较小的数,如此循环直到较小的数值为0,返回较大的数.即为最大公约数. 辗转相除法(欧几里得算法) 定理:两个整数的最大公约数等于其中较小的那个数和两数的相除余数的最大公约数.最大公约数(greatest common divisor)缩写为gcd. 最小公倍数 最小公倍数 = (a

求两个数的最大公约数

求两个数的最大公约数 问题:给定两个正整数a和b,求他们的最大公约数. 最简单的方法就是穷举法,如果a>b,那么依次计算1~b的所有整数是否是a和b的公约数. public static void main(String[] args) { long timer = System.currentTimeMillis(); System.out.println(getGCB(1000234234,1242342390)); System.out.println(System.currentTime

求两个数的最大公约数和最小公倍数 C语言

C程序设计第八章的第一道题目,求两个数的最大公约数和最小公倍数.需要注意一下几点: 1.最大公约数和最小公倍数间的关系: 设两个数是a,b最大公约数是p,最小公倍数是q 那么有这样的关系:ab=pq 所以q=ab/p.2.任意整数和0的公约数是该整数的所有约数,所以它们的最大公约数为该整数本身.3.碾转相除法:被除数%除数=余数,如果余数不为0,就让原来的除数做为被除数,余数作为除数,再进行运算 被除数%除数=余数,直到得到的余数为0为止,此时的除数就是最大公约数. #include <stdi

[000]求两个数的最大公约数

求出两个数的最大公约数 1 int foo(int v1, int v2) 2 { 3 while(v2) { 4 int temp = v2; 5 v2 = v1 % v2; 6 v1 = temp; 7 } 8 9 return v1; 10 } [000]求两个数的最大公约数,布布扣,bubuko.com

C语言辗转相除法求2个数的最小公约数

辗转相除法最大的用途就是用来求两个数的最大公约数. 用(a,b)来表示a和b的最大公约数. 有定理: 已知a,b,c为正整数,若a除以b余c,则(a,b)=(b,c). (证明过程请参考其它资料) 例:求 15750 与27216的最大公约数. 解: ∵27216=15750×1+11466 ∴(15750,27216)=(15750,11466) ∵15750=11466×1+4284 ∴(15750,11466)=(11466,4284) ∵11466=4284×2+2898 ∴(11466

c语言:求两个数的最大公约数。

求两个数的最大公约数. 程序: #include <stdio.h> int main() { int num1, num2, t; printf("请输入两个正整数:"); scanf("%d%d",&num1, &num2);//7,8 while (t = num1%num2)//7           1        0,循环结束 { num1 = num2;     //8           7 num2 = t;     

C语言--求两个数的最大公约数

问题: 求两个数的最大公约数 #include<stdio.h> #include<math.h>  main() { int a,b,c,i,j; printf("请输入三个数(数以逗号隔开):\n"); int arr[3]; int t; scanf_s("%d,%d,%d", &a,&b,&c); arr[0] = a;  arr[1] = b;  arr[2] = c; for (j = 0; j < 

C语言求两个数中最大公约数

在C语言中如何求两个数的最大公约数呢?下面用三种方法进行求解. 方法一:穷举法. 先比较两个数的大小,然后找出较小数t,最后判断t为何值时两个数都能整除,此方法效率较低. 代码如下: #include<stdio.h> int main() {      int num1,num2,temp,i;      scanf("%d%d",&num1,&num2);      if(num1>num2)      {            temp=num1