汇编求100以内的素数
assume cs:code,ss:sty,es:datadata 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 endssty segment db 16 dup (0)sty endscode segmentks:mov ax,0b800h mov ds,ax mov bx,0 ;显存基址跟偏移 mov ax,sty ...全部
assume cs:code,ss:sty,es:datadata 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 endssty segment db 16 dup (0)sty endscode segmentks: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,100xxx: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,25e: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,10is: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,20pq: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 endsend ks。收起