| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 931 人关注过本帖
标题:【汇编算法】小白求助~~~关于用汇编求100以内素数
只看楼主 加入收藏
花刺smile
Rank: 1
等 级:新手上路
帖 子:1
专家分:0
注 册:2013-7-1
结帖率:0
收藏
已结贴  问题点数:20 回复次数:2 
【汇编算法】小白求助~~~关于用汇编求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
有容就大
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:东土大唐
等 级:版主
威 望:74
帖 子:9048
专家分:14309
注 册:2011-11-11
收藏
得分:20 
网上这么几段就想解决问题了么?

梅尚程荀
马谭杨奚







                                                       
2013-07-08 21:44
有容就大
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:东土大唐
等 级:版主
威 望:74
帖 子:9048
专家分:14309
注 册:2011-11-11
收藏
得分:0 
晕 汇编忘的差不多了
先搞句话出来。
程序代码:
assume   cs:code, ds:data, ss:stack

stack    segment
         db    128    dup(?)
stack    ends

data    segment   
        PromptStr    db    'The number between 1 and 100 is: ', 13, 10, '$'
data    ends    

code    segment
start:   
       mov    ax,    stack
       mov    ss,    ax
       mov    sp,    128
   
       mov    ax,     data
       mov    ds,    ax
   
       lea    dx,    PromptStr
       mov    ah,     09h
       int    21h
      
       mov    ah,    01h
       int    21h
       mov    ah,    4ch
       int    21h    
code    ends

end    start



[ 本帖最后由 有容就大 于 2013-7-8 22:30 编辑 ]

梅尚程荀
马谭杨奚







                                                       
2013-07-08 22:29
快速回复:【汇编算法】小白求助~~~关于用汇编求100以内素数
数据加载中...
 
   



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

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