汇编语言-子函数找素数

1. 题目:找出100~200内所有的素数。

2. 要求:将100~200内所有的素数找出并显示值,要求每行显示5个素数。

3. 要求素数的判定算法用子程序来实现,子程序在判定数是否为素数后有不同的返回参数。

 1 ; Example assembly language program -- adds two numbers
 2 ; Author:  Karllen
 3 ; Date:    revised 05/2014
 4
 5 .386
 6 .MODEL FLAT
 7
 8 ExitProcess PROTO NEAR32 stdcall, dwExitCode:DWORD
 9
10 INCLUDE io.h            ; header file for input/output
11
12 cr      EQU     0dh     ; carriage return character
13 Lf      EQU     0ah     ; line feed
14
15 .STACK  4096            ; reserve 4096-byte stack
16
17 .DATA                   ; reserve storage for data
18        promot   BYTE   "The program is to find primes from 100 to 200",cr,Lf,0
19        cmm      BYTE   " ",0
20        crlf     BYTE   cr,Lf,0
21        number   DWORD  ?
22        flai     DWORD  ?
23        value    BYTE   11 DUP(?)
24  PUBLIC _start                   ; make entry point public
25 .CODE                           ; start of main program code
26 _start:
27        output   promot
28        mov      number,99
29        mov      flai,0
30
31        doFirstWhile:
32                  inc number
33                  cmp number,200
34                  jg  endFirstWhile
35                  mov   eax,number
36                  push  eax
37                  call  findPrime
38                  add   esp,4
39                  ;
40                      cmp  eax,0
41                      je   endSecond
42                      inc  flai
43                      dtoa value,number
44                      output value
45                      output cmm
46                         mov eax,flai
47                         mov ecx,5
48                         cdq
49                         idiv ecx
50                         cmp  edx,0
51                         je   printCrlf
52
53                  endSecond:
54                      jmp doFirstWhile
55                  printCrlf:
56                         output crlf
57                      jmp doFirstWhile
58
59        endFirstWhile:
60         INVOKE  ExitProcess, 0  ; exit with return code 0
61
62
63 findPrime PROC  NEAR32
64               push  ebp
65               mov   ebp,esp
66
67               mov   ebx,2
68               mov   eax,[ebp+8]
69               mov   ecx,eax
70               docuWhile:
71                     cmp ebx,ecx
72                     je  found
73                     mov eax,ecx
74                     cdq
75                     idiv ebx
76                     cmp  edx,0
77                     je   noFound
78                     inc  ebx
79                     jmp  docuWhile
80               found:
81                     mov eax,1
82                     jmp endcuWhile
83               noFound:
84                     mov eax,0
85               endcuWhile:
86               pop   ebp
87               ret
88    findPrime ENDP
89
90 END                             ; end of source code

测试结果

时间: 2024-10-06 22:44:36

汇编语言-子函数找素数的相关文章

函数里面有函数叫函数的闭包:子函数可以调用父函数变量,如果子函数找不到变量,那么整条作用域链的变量都会被保存

1 <!DOCTYPE HTML> 2 <html> 3 <head> 4 <meta http-equiv="Content-Type" content="text/html; charset=utf-8"> 5 <title>无标题文档</title> 6 <script> 7 //作用域 8 var a=0; 9 10 function abc(){ 11 var a=1; 1

C++_第七章函数的基本知识_求阶乘的子函数_ 函数参数类型为数组_ 求数组内所有元素和、部分元素和的方法_实现了先从键盘输入到一个数组中,再用for循环取读出数组中的元素 for循环也可以用break来结束循环的

/* 第七章函数的基本知识 */ /*01)c++对于返回值有一定的限制:可以是常量.变量.指针.结构对象或表达式,但不可以是数组02)c++返回数组的方法:将数组作为结构会对象组成部分来返回03)函数遇到return则结束该函数04)如果一个函数的两房额参数类型相同,则必须分别制定每个参数的类型,而不能像声明常规变量那样,将声明组合在一起05)*/ //本代码注意double类型的写法以及double和int类型数据的转换 1 #include <iostream> 2 3 void che

tcl脚本学习十:proc 子函数的使用

lesson 10 :proc 子函数的使用 1. proc sum {arg1 arg2} { set x [expr $arg1+$arg2]; return $x } puts " The sum of 2 + 3 is: [sum 2 3]\n\n" //[语法] :proc procName { var1 var2 ... } {body}说明:1. proc 命令有三个参数:procName 是定义的过程名字:{var1 var2 ...}是输入.输出参数列表:body 是

Shell 语法 if 、 case 、for 、 while、 until 、select 、repeat、子函数

if语法 : if [ expression ]    then   commandselif [ expression2 ]   then   commandselse   commandsfi case 语法: case string1 in   str1)    commands;;   str2)    commands;;   *)    commans;;esac 循环语句 for 语法:    for  var in list do commands done     在此形式时,

matlab中同一文件定义子函数的方法

在matlab中一个.m文件中可以有多个的子函数,但仅能有一个主函数,并且M文件名必须和主函数相同在一个m文件中通常有两种定义子函数的方法: 1.嵌套定义 myfunc1会和主函数共享变量名.这种情况下,使用相同的变量名,如果不是故意为之,就不合适了.function mainFunc(... a = myfunc1();...function myfunc1()...end end2. 非嵌套定义function mainFunc()...a = myfunc1();...end functi

Oracle的over子函数的妙用

摘要 oracle的over 子函数可实现按指定的字段分组排序,对于相同分组字段的结果集进行排序,其中PARTITION BY 为分组字段,ORDER BY 指定排序字段这对统计分析这类问题意想不到的效果. over函数的妙用 例1: 累计求和 select fdate 日期,total 金额,tax 税额, sum(total) over (order by fdate) 累计金额,sum(tax) over (order by fdate) 累计税额 from ( select fildat

matlab调试时子函数断点不起作用

matlab调试代码时总是遇到这样一个奇怪的问题,就是当我在主程序(.m脚本)中调用子函数并在子函数中设置断点,然后开始调试运行主程序... 发现主程序直接运行到结束而并没有在调用子函数的时候在所设置的断点处停下来,而且所设置的断点也被清除... 但是如果在主程序中调用相应子函数的地方设置断点,调试时在此处停一下然后在继续运行则可以在子函数中的断点停下... 这个问题困扰我挺长时间,虽然用第二种方法能够实现需要的调试功能,但是总是要在主程序停一下,有点麻烦 so, 有事问谷歌--you get

a+b(用子函数)

今天编的一个较简单的函数调用的程序 题目:a+b(用子函数) 程序 #include<stdio.h> void addition() { int a,b; scanf("%d %d",&a,&b); a=a+b; printf("%d",a); }-----------------------------------------//在子函数中进行a+b int main() { addition();------------------

ARM子函数定义中的参数放入寄存器的规则

关于ARM子函数定义中的参数放入寄存器的规则,网上也有很多文章和书籍介绍了,但是还有很多同学不太了解这个基础知识,这里摘取网上的一些介绍,简述一下. 对于ARM体系来说,不同语言撰写的函数之间相互调用(mix calls)遵循的是 ATPCS(ARM-Thumb Procedure Call Standard),ATPCS主要是定义了函数呼叫时参数的传递规则以及如何从函数返回,关于ATPCS的详细内容可以查看ADS1.2 Online Books Developer Guide的2.1节. 简单