組合語言第三版(王爽)第十一章檢測點答案及解析

2021-08-27 13:44:11 字數 3935 閱讀 4116

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標誌 結果是否為負,僅...