素數檢測(組合語言編寫)

2021-08-19 19:40:32 字數 1679 閱讀 4891

兩種方法

方法一:

include io32.inc

.data

ts byte "please input a number",13,10,0

sc1 byte "this is a sushu",13,10,0

sc2 byte "this is not a sushu",13,10,0

temp byte 2

.code

start:

mov eax,offset ts

call dispmsg

call readuiw;輸入數字

cmp ax,3;看是否小於等於3

jbe success

mov bx,ax;把值儲存起來

div temp;看是否是偶數

cmp ah,0

jz err

mov ax,bx;恢復儲存的值

add temp,1;除數從奇數3開始

movzx ecx,ax;傳遞歸圈次數

sub ecx,3;總的迴圈次數

again:

mov bx,ax;把值儲存起來

div temp;除以以3開始的每個奇數

cmp ah,0

jz err

mov ax,bx;恢復儲存的值

add temp,2;除數奇數增大2

sub ecx,2;由於除數temp每次都是增加2,所以這裡的迴圈次數也跟著多減少1次

jnz again

success:mov eax,offset sc1

call dispmsg

jmp done

err:

mov eax,offset sc2

call dispmsg

done:

exit 0

end start

方法2:

include io32.inc

.data

ts byte "please input a number",13,10,0

sc1 byte "this is a sushu",13,10,0

sc2 byte "this is not a sushu",13,10,0

temp byte 2

.code

start:

mov eax,offset ts

call dispmsg

call readuiw;輸入數字

cmp ax,3;判斷是否小於3

jbe success

movzx ecx,ax;傳遞歸圈次數

sub ecx,2

again:

mov bx,ax;儲存數值

div temp;除以從2開始的除數

cmp ah,0;判斷是否整除

jz err

mov ax,bx;恢復數值

inc temp;除數加1

loop again

success:mov eax,offset sc1

call dispmsg

jmp done

err:

mov eax,offset sc2

call dispmsg

done:

exit 0

end start

組合語言素數判斷程式

題目 編寫乙個程式,提示使用者輸入乙個數字,然後顯示資訊說明該數字是否是素數。素數 prime 是只能被自身和1整除的自然數。1 採用直接簡單的演算法 假設輸入n,將其逐個除以2 n 1,只要能整除 餘數為0 說明不是素數,只有都不能整除才是素數。2 採用只對奇數整除的演算法 1 2和3是素數,所有...

組合語言編寫的Hello World

linux 下用組合語言編寫的 具有兩種不同的形式。第一種是完全的彙編 指的是整個程式全部用組合語言編寫。儘管是完全的彙編 linux 平台下的彙編工具也吸收了 c 語言的長處,使得程式設計師可以使用 include ifdef 等預處理指令,並能夠通過巨集定義來簡化 第二種是內嵌的彙編 指的是可以...

組合語言檢測點10 4

建議先自己思考問題的答案,不懂則返回看書 這兒用到了bp,除了之前這樣用過bp外 bx bp 還會在棧中用到。比如說,堆疊中壓入了很多資料或者位址,你肯定想通過sp來訪問這些資料或者位址,但sp是要指向棧頂的,是不能隨便亂改的,這時候你就需要使用bp,把sp的值傳遞給bp,通過bp來尋找堆疊裡資料或...