彙編學習(六)8086彙編拾遺 5

2021-07-12 04:23:21 字數 3464 閱讀 9356

8086 標誌暫存器

8086 的最後乙個比較重要的暫存器 標誌暫存器

狀態暫存器的三種作用:

@用來儲存相關指令的某些執行結果

@用來為cpu執行相關指令提供行為依據

@用來控制cpu的相關工作方式

zf標誌:

記錄相關指令執行後,其結果是否為0,結果為0,zf = 1,不為0 ,zf = 0.

pf標誌:

奇偶效驗暫存器,記錄相關指令執行後,其中所有位中1 的個數是否為偶數,如果1是偶數,pf = 1,如果為奇數pf = 0.

sf標誌:

記錄相關指令執行後,其結果是否為負,如果為負,sf = 1,否則 sf = 0.在計算機看來,是不分數字的正負的,完全就是靠標誌暫存器的sf 的標誌的,決定正負數的運算。

cf標誌:

進製標誌:一般情況下,再進行無符號運算的時候,它記錄了,運算結果的最高有效位,向更高有效位的進製或者借位。

of標誌:

溢位指令,再進行有符號數運算的時候,如果超過了機器所能表示的範圍稱為溢位。

adc 指令:

adc是帶進製加法指令,它利用了cf位上記錄的進製值。

指令格式:adc 操作物件1,操作物件2

實現功能:(ax) = (ax) + (bx) +cf

這條指令其實就是為了大數相而確定的,例如1ef000h + 201000h,結果高16位ax,低16位bx 中。

mov ax,001eh mov bx,f000h add bx,1000h adc ax,0020h
128位數字加法:

add128:

push ax

push cx

push si

push di

sub ax,ax

mov cx,8

s:mov ax,[si]

adc ax.[di]

mov [si],ax

inc si

inc si

inc di

inc di

loop s

pop di

pop si

pop cx

pop ax

ret

sbb 指令 帶借位減法指令,它利用了cf位上記錄的借位值 指令格式: sbb   操作物件1,操作物件2 實現功能:(ax) = (ax) - (bx) -cf   cmp 比較指令 比較指令,其實採用的是減法原理比較的。 首先無符號比較: 很簡單,參考是否借位就能比較了。 cmp ax,bx zf = 1,ax = bx zf = 0,ax != bx cf = 1,ax < bx cf = 0,ax >= bx cf = 0 and zf = 0,ax > bx cf = 1 or zf = 1 ax <= bx 對於有符號數的比較: cmp ah,bh sf = 1 而 of = 0    ah  < bh sf = 1 而 of = 1  ah > bh sf = 0 而  of = 1  ah < bh sf = 0 而 of = 0  ah > bh 檢測比較結果的條件轉移指令 轉移指令根據無符號的比較結果進行轉移的條件轉移指令 je   等與則轉移   zf == 1 jne  不等與則轉移   zf = 0 jb    低於則轉移     cf = 0 jnb   不低於則轉移 cf = 0 ja     高與則轉移     cf = 0 zf = 0 jna    不高於則轉移   cf = 1 或 zf = 1 df 標誌 向量標誌位:在串指令中,控制每次操作後si,di的增減。 df = 0 每次操作後 si di 遞增 df = 1 每次操作後si  di 遞減   movsb  movsw 指令相當於以下的幾步操作: movsb : ((es)*16 + (di)) = ((ds)*16 + (si)) if(df == 0) (si) = (si) +1 (di) = (di)+1 if(df == 1) (si) = (si)-1 (di) = (di)-1 rep  :迴圈指令 ,一般和movsb  movsw 連用 如何決定df 的值,8086又有兩個新的專門指令 cld : 設定df = 0 std:  設定df = 1 兩個小例子: 將data段中的第乙個字串複製到它後面的空間中

mov ax,data

mov ds,ax

mov si,0

mov es,ax

mov di,16

mov cx,16

cld

rep movsb

使用傳送指令,將f000h段中的最後16個字元複製到data 段中。

mov ax,0f000h

mov ds,ax

mov si,0ffffh

mov ax,data

mov es,ax

mov di,15

mov cx,16

stdrep movsb

終於最後兩個指令了,好累 pushf 和 popf 著兩個命令是將標誌暫存器壓棧,彈棧送入暫存器標誌中的命令。只有這兩種放方法我們能訪問暫存器。 debug 中暫存器的標誌位: 標誌                   1                       0 of                 ov                    nf df                 dn                     up sf                  ng                    pl zf                  zr                     nz pf                  pe                     po cf                  cy                    nc 編寫乙個程式將以0結尾的字串小寫變大寫

assume cs:code

data segment

db "bejing tian an men",0

data ends

code segment

start:

mov ax,data

mov ds,ax

mov si,0

call letterc

mov ax,4c00h

int 21h

letterc:

push ax

push bx

push cx

push dx

s:mov ax,ds:[si]

cmp ax,0

je f

inc si

cmp al,'a'

jb s

cmp al.'z'

ja s

add al,'a'-'a'

mov ds:[si-1],al

jmp s

f:pop dx

pop cx

pop bx

pop ax

code ends

end start

彙編學習(八)8086彙編拾遺 7

int 中斷指令 使用方式 int n.n 為中斷型別碼,它的功能是引發中斷,n 為引發的中斷號。先寫乙個中斷程式的例子吧,安裝中斷7ch 中斷例程,計算乙個字型數的平方。assume cs code code segment start mov ax,cs mov ds,ax mov si,off...

C 拾遺(六) 複製控制

年前忙了幾天,到現在才算是有空休息下來。先祝大家新年快樂,心想事成 我也會發笑臉o.o 這篇博文主要介紹定義乙個型別的物件時的複製控制方式,這部分內容之前有一定的了解但又淺嘗輒止,始終感覺沒能找到要點。年前又拿起書細細品讀,算是有了一點新的了解。幾天前就想動筆了,一直沒時間,拖到現在。每種型別定義了...

C 程式設計學習筆記 複習 拾遺 5

封裝性 物件的狀態資訊隱藏在物件內部,不允許外部程式直接訪問物件內部資訊,而是通過該類所提供的方法來實現對內部資訊的操作與訪問。類外如何訪問被封裝的成員 private 和 protected成員 通過物件名.公有成員函式 良好的封裝性,考慮角度 將物件的成員變數與實現細節隱藏起來,不允許外部訪問。...