8086汇编复习3 - 标志寄存器 - 使用emu8086
1 認識標志寄存器
?
標志寄存器
? ? CPU內部有一種寄存器,具有三種作用:
? ? 1)存儲相關指令的某些執行結果;
? ? 2)用來為CPU執行相關指令提供行為依據;
? ? 3) 用來控制CPU的相關工作方式;
? ? 這種寄存器在8086中稱為標志寄存器;標志寄存器簡稱flag;
? ? 8086標志寄存器有16位,其中存儲的信息稱為程序狀態字(PSW);
? ? flag是按位起作用;
? ? flag的1、3、5、12、13、14、15位在8086CPU中沒有使用;
進入emu8086;
按emulate按鈕,彈出emulator窗口;
按flags按鈕,彈出flags窗口,即標志寄存器;各位初始值如圖;
按analyse按鈕,彈出 lexical flag analyser窗口;表示出flags當前各位的值所表示的意義;
? ? 例如ZF是零標志位;
?
2 零標志,奇偶標志
?
ZF標志
? ? 零標志位;flag第6位;
? ? 記錄相關指令執行后,結果是否為0;
? ? 結果為0,zf=1;否則,zf=0;
?
mov ax,1
sub ?ax,1
執行后結果為0;zf=1;
mov ax,1
and ax, 0
執行后,結果為0,zf=1;
有的指令是影響標志寄存器的,大都是運算指令;
有的指令不影響標志寄存器,大都是傳送指令;
PF標志
? ? flag第二位;奇偶標志位;
? ? 記錄指令執行后,結果的所有bit位中1的個數是否為偶數;
? ? 1的個數為偶數,pf=1;否則=0;
mov al, 1
add al, 10
執行后,結果為00001011B,3個1,則pf=0;
mov al, 1
or al, 2
執行后,結果為00000011B,2個1,pf=1;
?
?
3 符號標志
?
SF標志
? ? flag的第7位;符號標志;
? ? 記錄指令執行后,結果是否為負;如果為負,sf=1;否則=0;
? ? 計算機中通常用補碼表示有符號數據;
? ? 計算機中的一個數據可以看作有符號數,也可以看作無符號數;對于同一個二進制數據,計算機可以將它當作無符號數據來運算,也可以當作有符號數據來運算;
? ? CPU在執行add等指令的時候,就已經包含了兩種含義,也將得到用同一種信息來記錄的兩種結果;
? ? SF標志,就是CPU對有符號數運算結果的一種記錄,它記錄數據的正負;
mov al, 10000001B
add al, 1
? ? 執行后,結果為 10000010B,sf=1,表示:如果指令進行的是有符號數運算,那么結果為負;
mov al, 10000001B
add al, 01111111B
? ? 執行后,結果為0,sf=0;表示:如果指令進行的是有符號數運算,那么結果為非負;
? ? 某些指令影響flag的多個標記位;
? ? 指令sub al, al執行后,ZF、PF、SF受影響,分別為:1,1,0;
?
4 進位標志
?
CF標志
? ? flag第0位;進位標志;
? ? 一般情況下,在進行無符號數運算的時候,它記錄了運算結果的最高有效位向更高位的進位值,或從更高位的借位值;
? ? 兩個8位數據:98H+98H;將產生進位;進位在8位數中無法保存;CPU把進位記錄在CF;
mov al, 98H
add al, al ?; ?執行后,al內容為30H,CF=1;
add al, al ?; 執行后,al內容為60H, CF=0;
? ? 兩個數據做減法,可能向更高位借位;
? ? 97H-98H,將產生借位,借位后,相當于計算197H-98H;CF也可以記錄這個借位;
mov al, 97H
sub al, 98H ?; ?執行后,al內容為FFH,CF=1,CF記錄了向更高位的借位;
sub al, al ; ? ? 執行后,al內容為0,CF=0;
?
5 溢出標志
?
OF標志
? ? 在進行有符號數運算時,如結果超過了機器所能表示的范圍稱為溢出;
? ? 8位有符號數,機器所能表示的范圍是-128 - 127;16位有符號數,機器所能表示的范圍是-32768-32767;
? ??
mov al, 98
add al, 99
? ? 執行后將產生溢出;98+99=197;
mov al, 0F0H;F0H,有符號數-16的補碼;
add al, 088H ; ?88H,有符號數-120的補碼;
? ? 執行后將產生溢出;(-16) + (-120) = -136;
如果在進行有符號數運算時發生溢出,那么運算的結果將不正確;
flag的第11位是OF,溢出標志;發生溢出,OF=1;否則OF=0;
CF和OF的區別:
? ? CF是對無符號數運算有意義,OF是對有符號數運算有意義;
總結
以上是生活随笔為你收集整理的8086汇编复习3 - 标志寄存器 - 使用emu8086的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Win10下使用Debug
- 下一篇: 8086汇编复习4 - int指令 -