彙編學習(2)x86彙編的幾種寄存器

菜鳥一枚,剛學彙編總結下

八個通用寄存器(沒有段寄存器)
EAX,EBX,ECX,EDX,EBP,ESP,EDI,ESI

ESP 指向棧頂 PUSH一個值進棧,是存放在ESP上面那個地方,push後ESP值減少,再次指向棧頂。POP是將ESP指向的值 POP出去,POP後ESP的值增加,再次指向棧頂。
例如

      AAAAAAAA   ←ESP
      則PUSH eax後,變爲
      (eax)      ←ESP
      AAAAAAAA。

EBP 指向棧底 即棧的最下面那個元素。

EDI 是目的變址寄存器(默認在 ES裏),ESI 是源串變址寄存器(默認在DS裏),因爲ESI是原串變址寄存器,是原先存在的,所以在DS中。
ES存放當前程序中一個輔助數據段的段地址

EFLAGS,縮寫是EFL(標誌寄存器)32位,可以細分。
mov 指令不會改變標誌寄存器的值。

EFL 的 0位是CF(carry flag,carry有進位的意思)
用於 無符號數的向最高位進位(或者借位)。
運算過程中最高位進位(或者借位)標誌,如果進位是 1,沒有就是0。是最高位進位,不同寬度的最高位不同。例如 ax 最高位是16位,al最高位是8位, mov al,0xFF
add al,0x1。 運行後最高位進位,則CF 變爲1.

EFL 的 2 位是 PF (parity flag,parity有奇偶性的意思)
反應運算結果(轉化爲二進制後)中低八位數中 “1的個數的(轉化爲二進制後)”奇偶性,如果運算的結果中有 偶數個 1,則 PF 的值爲1,如果 結果有 奇數個1,則PF的值爲0;

AF
輔助進位標誌。運算結果,如果數據是8位,第4位進位了 AF變爲1,沒進位就是0,如果數據寬度是16位,第8位進位了 AF就變爲1.

SF (sign flag)
運算結果轉化爲二進制後,最高位的標誌,如果最高位是1,SF就是1,如果是0,SF 就是0;

ZF(zero flag)
運算結果如果是0,則ZF變爲1,如果不是0,則ZF爲0;

OF(overflow flag)
用於有符號數的溢出。
運算結果如果溢出,則OF 變爲1,沒有則是0.
正數加正數結果爲 負,則溢出了,負數加負數結果爲正,則溢出了
看OF 和CF 標誌的關鍵是,你所認定的數據存儲形式(計算機並不知道他存儲的是那種形式,有符號無符號都是編程的人所定的),如果你認爲
數據形式的有符號的就看OF。是無符號數就看CF。

DF (direction flag)
用於指向方向, 控制 esi 和edi 的增加和減少,如果DF值爲0,則爲增加,DF爲1則爲減少。(根據傳送數據的字節數減少或者增加)
配合 CLD (clear DF) ,將DF爲清零。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章