文章** http://www.mcany.cn/article/292.htm
博主 沒落的殘陽
這節講來下test指令。和相應的跳轉指令所依據的標誌位。
首先我們來學習test指令。
test指令在每對運算元的對應資料位之間進行隱含的「與」操作,並設定標誌位,但不修改目的運算元。這點和cmp指令有點相似。 test指令與and指令的運算元格式相同。
格式:
test 暫存器,暫存器
test 暫存器,記憶體單元
test 暫存器,立即數
test 記憶體單元,暫存器
test 記憶體單元,立即數
test指令我們並不常用,一般用來檢測相關的數值位。 例如我們判斷乙個字元是大寫還是小寫。。 因為我們記憶體中字元是以ascii碼的形式存放的,所以顯示的時候也是以ascii碼的規則解碼並顯示。 那麼我們舉例
a的ascii碼是41h。
a的ascii碼是61h。
我們如何判斷乙個字母是大寫還是小寫。因為我們通過判斷它是否大於40h 小於61h就可以知道它是大寫了。 小寫的我們判斷是否大於61h 小於 7ah。
但是我們還有一種方式判斷,那就是檢測相應的二進位制位。 我們可以自己將 41h和61h轉換成相應的二進位制位。
41h = 01000001b
61h = 01100001b
可以看到它們除了第5位不同,其餘位都是相同的。 其餘的大小寫字母同樣是,不信大家可以自己去試試。
那麼我們只要檢測到第五位到底是否為1就知道它是否是小寫了。(如果是大寫,第五位為0) 我們看下面的**,因為是乙個位元組,我就用低8位暫存器al來標示。。看**
mov al, 'a'
test al, 00100000b
jnz msg
msg:
invoke messagebox, null, '是小寫', '提示', mb_ok ;大家知道是彈出訊息框的意思就行了
由於我們對它做的是與運算,因為我們只有第5位為1,其餘位都為0。所以如果第5位是0的話,則結果還是0,如果是1的話,則結果不為0.(與運算是兩個都為1,則結果為1)
jnz依據的是標誌位,如果zf = 0,則跳。 因為zf = 0,則標示結果不為0,說明是小寫。 所以跳轉到標號執行訊息框,"是小寫"。
好接下來我給大家看下相關指令依據的標誌位。
檢測標誌位
je 等於轉移 zf = 1
jne 不等於轉移 zf = 0
jb 低於轉移 cf = 1
jnb 不低於轉移 cf = 0
ja 高於轉移 cf = 0 且 zf = 0
jna 不高於則轉移 cf = 1 或 zf = 1
很簡單。
Qt基礎學習1 7
qt布局管理1.設定widget的在父窗體中的座標和大小 widget move x,y widget resize width,height widget setgeometry qrect x,y,width,height 什麼時候用 不想被布局約束,對這種控制項可控制時 缺點 在遇到很多個部件...
彙編基礎學習5
文章 http www.mcany.cn article 280.htm 博主 沒落的殘陽 今天我給大家來講解下我們記憶體中資料的儲存以及訪問。這節課的基礎也是非常重要的。因為80386的資料位址線是32根,所以它一次可以傳送資料是4個位元組。所以我們記憶體單元是按照4個位元組來對齊的。用高階語言的...
彙編基礎學習7
博主 沒落的殘陽 這節來講解一下棧的延伸,堆疊 算是把昨天的整個理論基礎概念,給大家講解下。執行時棧 runtime stack 我們通常稱為 堆疊 這是由我們cpu硬體直接支援的,也是實現過程的呼叫和過程返回機制的基本組成部分。不知道大家是否知道rtl是什麼意思。如果學過程式的人都應該知道這個就是...