彙編基礎學習17

2021-05-02 03:42:36 字數 1433 閱讀 3975

文章** 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是什麼意思。如果學過程式的人都應該知道這個就是...