11.1寫出下面每條指令執行後,zf、pf、sf等標誌位的值
sub al ,al zf=______ pf=_______ sf=________
mov al ,1 zf=______ pf=_______ sf=________
push ax zf=______ pf=_______ sf=________
pop bx zf=______ pf=_______ sf=________
add al,bl zf=______ pf=_______ sf=________
add al,10 zf=______ pf=_______ sf=________
mul al zf=______ pf=_______ sf=________
解析:sub al,al 執行後,結果為0,故zf=1,pf=1,sf=0.
mov al,1.mov,push,pop等傳送指令對標誌暫存器是沒有影響的故zf=1,pf=1,sf=0.
push ax zf=1,pf=1,sf=0.
pop bx zf=1,pf=1,sf=0.
add al ,bl al=2 結果為0010故:zf=0,pf=0,sf=0
add al ,10 al=12=8+4=1100故:zf=0,pf=1,sf=0
mul al al*al ,144=128+16=10010000 ,故zf=0,pf=1,sf=0
檢測點11.2
寫出下面每條指令執行後,zf、pf、sf、cf、of等標誌位的值
sub al,al cf=___ of=____ sf=____ zf=____ pf=____
mov al,10h cf=___ of=____ sf=____ zf=____ pf=____
add al,90h cf=___ of=____ sf=____ zf=____ pf=____
mov al,80h cf=___ of=____ sf=____ zf=____ pf=____
add al,80h cf=___ of=____ sf=____ zf=____ pf=____
mov al,0fch cf=___ of=____ sf=____ zf=____ pf=____
add al,05h cf=___ of=____ sf=____ zf=____ pf=____
mov al,7dh cf=___ of=____ sf=____ zf=____ pf=____
add al,0bh cf=___ of=____ sf=____ zf=____ pf=____
解析:我先敲了一遍**,看了下資料,確保我的邏輯正確。
sub al,al cf=0 of=0 sf=0 zf=1 pf=1
結果為0000b 沒發生進製,沒有溢位,顯然是個非負數。1的個數為偶數個,為0.所以和debug中是一樣的
mov al,10h cf=0 of=0 sf=0 zf=1 pf=1
mov指令,不會改變
add al,90h cf=0 of=0 sf=1 zf=0 pf=1
al=a0h 沒有產生進製和溢位,符號怎麼看呢?要判斷sf的值,就要轉換為有符號數的運算1010000b,可以看作有符號數-92,既然是負數,那麼sf=1,由於1的個數是偶數,所以pf=1,明顯不是0,故zf=0
mov al,80h 同上
add al,80h cf=1 of=1 sf=0 zf=1 pf=1
結果是100h,顯然是溢位了,並且也進製了,此時al=00,故zf=1,pf=1,sf=0
mov al,0fch mov不改變,同上
add al,05h cf=1 of=0 sf=0 zf=0 pf=0
al=101h,故產生了進製,al=01h,所以cf=1.換成有符號數的運算,fch的原碼=-4,5h的原碼=-3,加起來為-7,沒有溢位。所以of=0.al=00000001,最高為是0,所以sf=0
mov al,7dh 不變
add al,0bh cf=0 of=1 sf=1 zf=0 pf=1
當無符號數時,al=88h,沒有進製,於是cf=0.88h的二進位制是10001000,它的最高為是1,所以sf=1。1的個數為偶數個,pf=1,顯然不為0,zf=0。有符號數計算,因為7dh=1111101,顯然是個正數,所以他的原碼是125,0bh也是乙個正數,為11,他們相加為136,超過128,所以of=1
檢測點11.3
(1)補全下面的程式,統計f000:0處32個位元組中,大小在[32,128]的資料的個數
mov ax,0f000h
mov ds,ax
mov bx,0
mov dx,0
mov cx,32
s:mov al,[bx]
cmp al,32
__________ -------->這裡應該填jb s0。小於32,就重新進行迴圈,並開始比較下乙個位元組
cmp al,128
__________ --------->這裡應該填ja s0.超過128,就重新進行迴圈,並開始比較下乙個位元組
inc dx --------->在32到128之間的,才能被計數
s0:inc bx
loop s
(2)補全下面的程式,統計f000:0處32個位元組中,大小在(32,128)的資料的個數
mov ax,0f000h
mov ds,ax
mov bx,0
mov dx,0
mov cx,32
s:mov al,[bx]
cmp al,32
_________ ----------->這裡應該是,不高於32,就進入下乙個迴圈。jna s0
cmp al,128
_________ -------------->這裡應該是,不低於128,進入下乙個迴圈。jnb s0
inc dx
s0:inc bx
loop s
11.4
下面的程式執行後:(ax)=?
mov ax,0 ------>ax=0
push ax ------>將ax入棧
popf ------>把棧裡面的東西給標誌暫存器,也就是說flag暫存器標誌位置為0
mov ax,0ffff0h
add ax,0010h ----->ax=0000,因為進製了,所以cf=1,作為有符號數,沒有溢位,of=0,zf=1,sf=0,pf=1
pushf ----->把00000***010x0101放入堆疊
pop ax ------>把上面的一坨,彈給ax
and al,11000101b ------>低8位010x0101and11000101 結果為01000101b=45h
and ah,00001000b ------->高8位00000***and 00001000 結果為00000000=00h
王爽《組合語言》第三版 第十一章 標誌暫存器
引言 8086cpu的標誌暫存器有16位,其中儲存的資訊通常被稱為程式狀態字 psw 我們己經使用過8086cpu的ax bx cx dx si di bp sp ip cs ss ds es等13個暫存器了。本章中的標誌暫存器 以下簡稱為flag 是我們要學習的最後乙個暫存器。flag暫存器是按位...
組合語言(王爽第三版)檢測點13
1 在上面內容中,我們用7ch中斷例程實現loop功能,則上面的7ch中斷例程所能進行的最大轉移位移是多少?答案 題目描述個人感覺有二義性,因此從loop實現角度和位移值bx變數兩方面來討論 如果從loop的指令角度上看,loop是段內短轉移,它的範圍是 128 127,也就是說最大轉移位移是128...
王爽《組合語言(第三版)》檢測點11 1
寫出下面每條指令執行後,zf pf sf等標誌位的值。指令sub al,al mov al,1 push ax pop bx add al,bl add al,10 mul al zf 0 pf 偶 sf 負 zf標誌 是否為0 pf標誌 結果中是否有偶數個為1的bit位。sf標誌 結果是否為負,僅...