80x86 組合語言程式設計 判定資料序列的奇偶個數

2021-07-09 15:03:00 字數 2304 閱讀 9902

在 adr 開始的連續單元,存放三個16位無符號數 a,b,c。

資料定義:

adr   dw  3257h, 5891h, 0b24h

flag  db  ?

要求:若a、b、c同時為偶數,將 flag 單元設定為1;

若同時為奇數,將 flag 單元置0;

否則flag單元置全1。

編制匯程式設計序完成上述操作。

---------------------------

分析:題目的要求,可以寫成下面的形式。

--全為偶,flag置1

--全為奇,flag置0

--奇偶皆有則flag單元置全1

如果這個序列都是奇數,就必須全部資料都檢測一遍,才能確定它們全部都是奇數;

如果這個序列都是偶數,也是必須把全部資料都檢測一遍。

但是,判斷序列中,是不是也有奇數、也有偶數,這可就簡單了。

比如,把第乙個數,判斷出來了,它是奇數,判斷第二個數時,如果發現它是偶數,

那麼,奇偶都存在的結論,這就已經出來了。還有必要繼續判斷嗎?

這就是說,判斷

奇、偶

都存在,就很簡單

,很有可能

提前結

束程式。不需要把全部資料都檢測一遍。

做而論道就是按照這個思路,編寫了如下的程式。

datas   segment

;    adr   dw   3257h, 5891h, 0b24h   

adr   dw   325ch, 5890h, 0b24h   

flag  db   ?

datas   ends

codes   segment

assume   cs:codes, ds:datas

start:

mov   ax, datas

mov   ds, ax        

mov   flag, 0ffh  ;先假設奇偶皆有

test  word ptr [adr], 1

jne   qi1

;-----------------------------

ou1:

test  word ptr [adr + 2], 1

je    ou2

jmp   exit

ou2:

test  word ptr [adr + 4], 1

je    ou3

jmp   exit

;-----------------------------

qi1:

test  word ptr [adr + 2], 1

jne   qi2

jmp   exit

qi2:

test  word ptr [adr + 4], 1

jne   qi3

jmp   exit

;-----------------------------

ou3:

inc   flag

qi3:

inc   flag

exit:

mov   ah, 4ch

int   21h

codes   ends

end   start

程式中,首先判斷第乙個數字的奇偶性,為奇則轉移,轉移到 qi1 後,再繼續檢測後面的資料。

一旦發現檢測到了偶數,就立即跳到結束程式的位置。

如果第乙個數字是偶數,那麼後面就連續檢測資料都是否為奇數,為奇數則轉到結束。

如果都是奇數(或都是偶數),那就乙個乙個檢測吧,把全部資料都檢測一遍,全奇(全偶)的結論也就出來了。

當得出結論後,對 flag 賦值時,做而論道寫的也相當的簡單,用了兩條加一的指令,就代替了傳送資料再轉移的寫法。

-----------------------------

做而論道的程式設計思路雖然比較好,但是提問者並沒有理解。

他選擇了乙個「全部檢測」的程式。

這個程式,確實,也是正確的。

它可以檢測資料的奇偶個數的特點,也可以給 flag 正確的賦值。

但是,它把資料全部檢測了一遍,把其中的偶數個數得出來了。

然後,再把這個偶數的個數和總數比較,如果相同,那就是說:全都是偶數。

否則,再判斷這個偶數的個數,是 0 嗎?如果是,那就是說:全都是奇數。

再否則,就是奇偶都有。

-----------------------------

80x86組合語言 分類統計

組合語言的程式設計題!急 有100個學生成績,存放在以data為首址的位元組儲存單元中。試統計其中90 含90 以上的人數,60 90 含60 之間的人數,60以下的人數,分別存入max,middle,min三個變數中。15 分鐘前 做而論道 十七級 最快回答 assume ds qq,cs cc ...

組合語言 80x86定址方式

1 立即定址方式 立即定址方式中指令的運算元是8位或16位立即數,並直接出現在指令中。例如 mov al,10h 源運算元為立即定址 執行後al 10h mov ax,0a48h 源運算元為立即定址 執行後ax 0a48h 立即定址只能用於源運算元,不能用於目的運算元。2 暫存器定址方式 暫存器定址...

80x86組合語言程式設計P50

386 stack segment use32 db 200 dup 0 stack ends con equ 500 data segment use16 a dw m buf db ab 0dh,0ah b dw 0ffaah d dd buf m db 2 dup 1 2 dup 2,b 12...