一道簡單題目的複雜演算法

2021-04-12 15:00:00 字數 1081 閱讀 6526

這是我們第一節彙編上機的實驗題目, 

問題描述:在debug下實現,記憶體區2100h處有乙個位元組帶符號數(用e命令存入),要求程式設計將其取出1、若此數為正,則3000h單元置01h,2、若此數為0,3000h單元置0h,3、若此數為負,3000h單元置ffh。

題目很簡單,應該說簡單得讓人做著無聊,於是呢一切的想法就在無聊中給悶出來了。

我很討厭判斷語句,於是就想,能不能不用比較和跳轉的語句將問題解決掉呢?答案當然是肯定的,於是就有了我這個複雜化的答案了。

方法如下:如果這個數是負數,那麼它的最高位為1,那麼,使用shl  opt,1就可以將它的最高位移至cf標誌位,然後用adc  dst,0就可以將cf中的資料取出來反映到dst裡面,據此可以判斷它是不是負數。

至於0和正數,將原資料加ffh,只有當原資料為0時才可以產生進製,然後再用上面的方法取出進製標誌。

在debug下輸入如下:

a 100                              

mov dl,0                            ;dl中存放比較結果,先清零

mov bl,[2100]                   ;取資料

shl bl,1                              ;左移

mov cl,0

adc cl,0                             ;將cf的值反映到cl裡

mov al,ff

mul cl

add dl,al                           ;給dl賦值,整個過程中最多有一次有效

inc al

mov cl,al                           ;建立負數標誌,bl為負則cl為0,否則cl為1

mov bl,[2100]                  ;進行下一次運算

add bl,ff

mov al,0

adc al,0

mul cl

mov cl,1

mul cl

add dl,al

mov [3000],dl

int 20

一道演算法題目的解法

有這樣一道演算法題目 144張牌放到若干的盒子中,每個盒子中放10到 40張,問有多少種放法?不考慮順序 由144 10 14.4 144 40 3.6 可得,盒子的數量最少為4,最多為14.假設有n個盒子 4 n 14 每個盒子中分別放 a1,a2,an 張牌,由於不考慮順序,不妨設a1 a2 a...

一道ACM題目的反思

大三本科,成績還算不錯 很不自謙的說 所有程式設計實驗做的津津有味,亦常為同學捉刀,最近的圖形學實驗寫了4600行c 自命程式設計能力還是不錯的。可自大一來嘗試acm便屢屢受挫,鬱鬱不得志,中途因課業緊張未能堅持 壓根沒正兒八經的做過幾道題 也自覺智商平平,無甚希望。最近在考研與工作間猶豫不決,無聊...

一道簡單的題目

這是校賽的一道題,當時覺得挺難,後來就覺得簡單,知道思路後就很好做了。題目是這樣子的 1008 植樹節b time limit 1 sec memory limit 128 mb submit 4 solved 4 submit status web board description 植樹節那天每...