在小模式下(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...