組合語言輸出10000以內的素數(小模式下)

2021-08-15 03:13:28 字數 1577 閱讀 2820

在小模式下(masm for window 2015版)輸出10000以內的素數,兩個重點,一是找到10000以內的素數,二是將這些數輸出。

其中判斷素數,因為用彙編不方便直接求該數的平方根,從2到本身的判斷又太浪費時間,因此用的是100這個數,當判斷的數較大時可以有效減少所需要的時間,當數小於100時,判斷的條件就是從2到本身,因此需要增加乙個判斷條件看是否等於本身,即**第10行。另乙個重點就是關於較大數的輸出。

.model small

.code

main proc far 

mov ax,2

next:

mov cx,ax;cx記錄ax的值

mov bx,2

again:

mov ax,cx

cmp bx,ax;只能除1和本身,即為素數

jz l2

mov dx,0

div bx;dx是餘數,ax是商

cmp dx,0

jz l1   ;整除bx,不是素數

inc bx

;除到100還沒有跳出去,是素數

cmp bx,101 

jz l2

jmp again

l1:mov ax,cx

cmp ax,10000

jz  l7

inc  ax

jmp next  

l2: ;輸出素數

mov ax,cx

cmp ax,1000

jnb l3   ;ax>=1000

cmp ax,100;1000>al>=100

jnb l4

cmp ax,10   ;10==1000

mov dx,0

mov bx,1000

div bx

mov bx,dx   

mov dl,al

add dl,30h

mov ah,2h

int 21h;輸出千位數

mov ax,bx;傳到下乙個

l4:mov bl,100

div bl

mov bl,ah

mov dl,al;al是商

add dl,30h

mov ah,2h

int 21h;輸出百位數

mov al,bl;傳到下乙個

mov ah,0

l5:mov bl,10

div bl;ah是餘數,al是商

mov bl,ah

mov dl,al

add dl,30h

mov ah,2h

int 21h;輸出十位數

mov al,bl;傳到下乙個

mov ah,0 

l6:mov dl,al

add dl,30h

mov ah,2h

int 21h;輸出個位數

mov dl,20h

mov ah,2h

int 21h;輸出空格

jmp l1;返回迴圈

l7: 

mov ax,4c00h

int 21h

main endp

end

利用Python輸出100 200以內的素數

from math import sqrt defmain for i in range 100 201 flag 1 k int sqrt i for j in range 2 k 1 if i j 0 flag 0break if flag 1 print i,end 1個空格,輸出的每個數之間...

組合語言實現Hello World的輸出

16位的組合語言實現 hello world!的難度在於 1.了解int 21h 的9號中斷呼叫 lea dx,字串的開頭或mov dx,offset 字串的開頭 mov ah,09h int 21h 2.在定義字串的時候要在末尾加上 作為字串的結束標誌。3.源 data segment 定義資料段...

組合語言 輸出10 10000的所有回文數

編寫程式,求10到10000之間所有回文數並輸出。要求每行輸出10個數 此時得到的是n的各個位的逆序序列。將這個逆序序列再組合 成乙個新的整數m,若m n,則n是回文數 include vcio.inc data frmstr byte d 0 frmstr2 byte 0ah,0 code mai...