| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 931 人关注过本帖
标题:【汇编算法】小白求助~~~关于用汇编求100以内素数
取消只看楼主 加入收藏
花刺smile
Rank: 1
等 级:新手上路
帖 子:1
专家分:0
注 册:2013-7-1
结帖率:0
收藏
已结贴  问题点数:20 回复次数:0 
【汇编算法】小白求助~~~关于用汇编求100以内素数
要求:
(1)求出这些素数。
(2)在屏幕上显示出求素数的动态过程(在屏幕上先显示出100以内的所有数,再动态地删去不符合要求的数,删除的过程要明显。)
(3计算这些素数的平均值(四舍五入取整),以十进制形式输出,并让该值以红色显示。
(4)数据的输入和结果的输出都要有必要的提示,且提示独占一行。
(5)要使用到子程序。
各位大神,拜托了,最好 后面有点注释。跪求~
下面是我网上找的程序,运行不成功,不知道该怎么改:
assume cs:code,ss:sty,es:data
data segment
 dw "02","03","05","07","11","13","17","19","23","29","31","37","41","43","47","53","59","61","67","71","73","79","83","89","97"
data ends
sty segment
 db 16 dup (0)
sty ends

code segment
ks:mov ax,0b800h
   mov ds,ax
   mov bx,0         ;显存基址跟偏移
   
   mov ax,sty
   mov ss,ax
   mov sp,32         ;栈基址跟偏移
   mov ax,data
   mov es,ax         ;素数
   mov ax,1
   mov cx,100
xxx:push cx            ;保护寄存器
   call acw  
   call delay      ;延时子程序
   pop cx          ;这里是30行
   inc ax                  
   loop xxx
;*************************************************以上是转换ASCII码并显示***************************************************
   
   
   mov bp,0             ;指向数据
   mov cx,100
            
   mov bx,0                 ;指向显存     
y1:mov dx,es:[bp]     ;取出数据
  
   mov ah,ds:[bx]
   mov al,ds:[bx+2]   ;取出显存
   
   cmp ax,dx           ;比较
   je yy
   mov byte ptr ds:[bx],0         ;不等,则删除显存,跳过显存
   mov byte ptr ds:[bx+2],0
   add bx,6
   jmp short aet
yy:add bx,6         ;相等则跳过数据与显存
   add bp,2
 

aet:call delay
   loop y1   
 
   mov byte ptr ds:[bx-2],0    ;删除一百那个0
 

;**************************************************以上是在显存显示并删除多余************************************************
  mov bx,0
  mov bp,160*7                    ;显存偏移指向第七行

  mov byte ptr ds:[bp],40           ;括号(
  add bp,2
  mov cx,25
e:mov ax,es:[bx]                ;取素数
  mov ds:[bp],ah
  mov ds:[bp+2],al              ;将素数放入显存
  mov byte ptr ds:[bp+4],43     ;将+号放入显存
  add bp,6
  add bx,2                       ;80行
  call delay
  loop e  
  
  mov byte ptr ds:[bp-2],41           ;括号)
  mov byte ptr ds:[bp],47        ;除以号"/"
  add bp,2
  mov byte ptr ds:[bp],32h          ;数值2
  add bp,2
  mov byte ptr ds:[bp],35h           ;数值5
  add bp,2
  mov byte ptr ds:[bp],61               ;等于号"="
  add bp,2                           
 

  mov cx,10
is:call delay
   loop is                         ;调用延时
   
   call jsq          ;调用子程序,得出总和,和在SI中
   mov dx,0
   mov bx,0
   mov ax,si
   mov bl,25
   div bl           ;得出平均值
  
   mov ah,0
   mov bl,10
   div bl
   add ah,30h   ;余加30H
   add al,30h   ;懒的判断来判断去,直接弄把,反正知道结果
   mov ds:[bp],al
   mov byte ptr ds:[bp+1],4h   ;红色。。
   mov ds:[bp+2],ah
   mov byte ptr ds:[bp+3],4h
  
  mov cx,20
pq:call delay
   loop pq
   mov ax,4c00h
   int 21h
 
;**************************************************以下是子程序的区域*******************************************************
acw:
    push ax          ;保护寄存器
    mov di,0         ;di用于记录循环多少次
 h1:mov cx,0
    mov dx,0
    mov dl,10
    div dl
    add ah,30h        ;得出ASCII码
    mov cl,ah         
    push cx           ;将ascii码放入栈         
    inc di            ;di发挥
   
    mov ah,0
    mov cl,al         ;刚才除法的商放入CX
    jcxz h2           ;如果商为0就跳到标号h2处
    jmp far ptr h1      ;如果不为0就跳回去继续执行
 h2:mov cx,di
    cmp di,1
    jne h3
    mov byte ptr [bx],30h
    add bx,2

 h3:mov dx,0
    pop dx             ;刚才放入栈的ASCII码拿出来
    mov [bx],dl     ;ASCII码放入显存
    add bx,2
    loop h3            
   
    mov byte ptr [bx],0
    add bx,2
    pop ax              ;ax还原
    ret
;******************************************************以上是转换ASCII码子程序***********************************************
delay:push ax
      push dx
      mov dx,1000h
      mov ax,0
  s11:sub ax,1
      sbb dx,0
      cmp ax,0
      jne s11
      cmp dx,0
      jne s11
      pop dx
      pop ax
      ret
;***************************************************以上是延时子程序*********************************************************
jsq:push dx
    push ax
    push bx
  
   mov bx,0
   mov di,0
  
   mov cx,25
  
qs:mov ax,es:[di]     ;取素数
   mov dx,0
   sub al,30h
   mov bl,al           ;数字放入BL
   
   mov al,ah
   mov ah,0
   sub al,30h
   mov dl,10
   mul dl              ;还原数字
   add bl,al           ;得回数字
   add si,bx           ;数值相加
   add di,2
   loop qs
   pop bx
   pop ax
   pop dx  
   ret
 
 
 
 
 
code ends
end ks
搜索更多相关主题的帖子: 平均值 十进制 子程序 动态 网上 
2013-07-01 21:08
快速回复:【汇编算法】小白求助~~~关于用汇编求100以内素数
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.020579 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved