這是我們第一節彙編上機的實驗題目,
問題描述:在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 植樹節那天每...