chinese直男口爆体育生外卖, 99久久er热在这里只有精品99, 又色又爽又黄18禁美女裸身无遮挡, gogogo高清免费观看日本电视,私密按摩师高清版在线,人妻视频毛茸茸,91论坛 兴趣闲谈,欧美 亚洲 精品 8区,国产精品久久久久精品免费

您好,歡迎來電子發(fā)燒友網(wǎng)! ,新用戶?[免費注冊]

您的位置:電子發(fā)燒友網(wǎng)>電子百科>主機配件>cpu>

標志寄存器的概念

2019年07月22日 10:00 lq 作者: 用戶評論(0

  首先說一下標志寄存器的概念。在8086cpu中標志寄存器都是16位的,而其中存儲的信息被稱為程序狀態(tài)字(一段包含系統(tǒng)狀態(tài)的內(nèi)存或者是硬件區(qū)域)。標志寄存器既然是寄存器,那么它也是用來存儲信息的,只是它存儲信息的方式與其他的寄存器不同而已。其他的寄存器是一個寄存器包含一個信息,而標志寄存器則可以包含多個信息。而標志寄存器之所以可以存儲多個信息,是因為它的存儲方式。在標志寄存器中,信息是被存儲在位中的。標志寄存器中的每一個位都可以代表特定的信息。

  

標志寄存器的概念

  這是我在網(wǎng)上找的一個標志寄存器的示意圖。通過這張圖片我們可以知道在標志寄存器中,哪些是用到的,哪些是沒用到的。我就不在贅述了。接下來我們看一下這些位的具體含義。

  CF(carry flag):進位標志位。這個位是在進行無符號數(shù)運算的時候用到的。一般情況下,這個位記錄了進行無符號運算的時候,運算結(jié)果的最高有效位向更高位的進位值,或從更高位的借位值。注意的是,這里的進位與借位,都是相對于二進制而言的。下面我們再找一張圖來加深下理解。

  

標志寄存器的概念

  PF(parity flag):奇偶標志位。這個位的判斷需要我們將結(jié)果轉(zhuǎn)為二進制來看,如果結(jié)果的低8位中有偶數(shù)個1,就將PF的值置1;如果是奇數(shù)個1,就置0。要注意的是一定是結(jié)果的低8位。

  PF,奇偶標志位,flag的第2位記錄相關指令執(zhí)行后,其結(jié)果所有bit位中1的個數(shù)是否為偶數(shù),若為偶數(shù),則PF=1;若為奇數(shù),PF=0.

  執(zhí)行

  mov al,00000000b

  add al,00000111b

  mov al,00000000b

  add al,00000011b

  驗證:

 

標志寄存器的概念

  AF(auxiliary flag):輔助進位標志位。這個位用的不多,所以書上也沒有講,我就簡單的查了一下資料。這個位表示加減法做到一半時有沒有形成進位/借位,如果有則AF=1。這么說誰都聽不懂,所以我們舉個例子來說下。例如 MOV AL,00001110 MOV BL,00001000 ADD AL,BL 最后結(jié)果為AL=00010110這就是低四位向高四位進位。反之在減法中第三位不夠減向第四位借位(注意數(shù)位是從第0位開始數(shù)的)叫低四位向高四位借位!像前面的AL中前四位為高四位,后四位為低四位。例如,當兩個字節(jié)相加時,如果從低4位向高4位有進位時,則AF=1。

  ZF(zero flag):零標志位。這個位就很簡單了,判斷結(jié)果是不是0。如果結(jié)果為0,就置1;不為0,就置0。

  執(zhí)行

  mov ax,1

  sub ax,1

  mov ax,2

  sub ax,1

  

標志寄存器的概念

  可以看到 當計算ax結(jié)果為0時,ZF是ZR=1;結(jié)果為1(不為0)時,ZF是NZ=0.

  SF(sign flag):符號標志位。既然是符號標志位,就是對有符號數(shù)據(jù)來說的。如果結(jié)果為負,就置1;結(jié)果為正,就置0。

  SF,符號標志位,flag的第7位,記錄相關指令執(zhí)行后,其結(jié)果是否為負,若為負,則SF=1;若為非負,SF=0.

  執(zhí)行:

  mov al,10000001b

  add al,1

  mov al,10000000b

  add al,01111111b

  驗證:

 

標志寄存器的概念

  當SF=1即為NG,表示:若指令進行有符號數(shù)運算,則結(jié)果為負

  當SF=0即為PL,表示: 若指令進行有符號數(shù)運算,則結(jié)果為非負

  TFtimer overblow flag):定時器溢出標志。這個位主要是用來在debug中進行-t指令時使用的。當cpu在執(zhí)行完一條指令后,如果檢測到TF位的值為1,則產(chǎn)生單步中斷,引發(fā)中斷過程。通過這個位,我們就可以在debug中對程序進行單步跟蹤。

  IF(interrupt flag):中斷允許標志位。當IF=1時,cpu在執(zhí)行完當前指令后響應中斷,引發(fā)中斷過程;當IF=0時,則不響應可屏蔽中斷。

  DF(direction flag):方向標志位。在串處理指令中,控制每次操作后,si(指向原始偏移地址)、di(指向目標偏移地址)的增減。當DF=0時,每次操作后,si、di遞增;DF=1時,每次操作后,si、di遞減。我們可以使用cld指令將DF的值置為0,使用std指令將DF的值置為1。DF需要與rep、movsb等指令配合使用。

  OF(overflow flag):溢出標志位。這個位是用來判斷有沒有溢出的。注意溢出這個概念只對于有符號數(shù)據(jù)而言,就如同進位只對于無符號數(shù)據(jù)而言。當OF=0時,說明沒有溢出;當OF=1時,說明溢出了。

  OF,溢出標志位,flag的第11位,超出機器所能表示的范圍稱為溢出若發(fā)生了溢出OF=1,若沒有則OF=0

  比如對于8位有符號數(shù)據(jù),機器能表示范圍是 -128~127;對于16位有符號數(shù)據(jù),范圍是 -32768~32767

  執(zhí)行:

  mov al,64

  add al,64

  mov al,63

  add al,64

  驗證:

  

標志寄存器的概念

  下面有幾個串傳送指令

  格式:movsb

  功能:執(zhí)行movsb指令相當于進行下面幾步操作。

  1) ((es)*16+(di)) = ((ds)*16+(si))

  2) 如果df=0 則 (si)=(si)+1 (di)=(di)+1

  如果df=1則: (si)=(si)-1 (di)=(di)-1

  當然也可以傳送一個字

  格式:movsw

  功能:將ds:si指向的內(nèi)存單元中的字送入es:di中,然后根據(jù)標志寄存器df位的值,將si和di遞增2或遞減2.

  movsb和movsw進行的是串傳送操作中的一個步驟,一般來說,movsb和movsw都和rep配合使用,格式如下:

  rep movsb

  rep功能:根據(jù)cx的值,重復執(zhí)行后面的串傳送指令。由于每執(zhí)行一次movsb指令si和di都會遞增或遞減指向后一個單元或前一個單元,則rep movsb就可以循環(huán)實現(xiàn)(cx)個字符的傳送。

  8086CPU提供下面兩條指令對df位進行設置。

  cld指令: 將標志寄存器的df位置0

  std指令: 將標志寄存器的df位置1

  1)編程,用串傳送指令,將data段中的第一個字符串復制到它后面的空間中。

  data segment

  db ‘welcome to masm!’

  db 16 dup (0)

  data ends

  code segment

  mov ax,data

  mov ds,ax

  mov si, 0

  mov es,ax

  mov di,16

  mov cx,16

  cld

  rep movsb

  code ends

  end

  2)編程,用串傳送指令,將F000段中的最后16個字符復制到data段中。

  data segment

  db 16 dup (0)

  data ends

  code segment

  mov ax,0f000h

  mov ds,ax

  mov si, 0ffffh

  mov ax,data

  mov es,ax

  mov di, 15

  mov cx, 16

  std

  rep movsb

  code ends

  end

非常好我支持^.^

(1) 100%

不好我反對

(0) 0%

( 發(fā)表人:李倩 )

      發(fā)表評論

      用戶評論
      評價:好評中評差評

      發(fā)表評論,獲取積分! 請遵守相關規(guī)定!

      ?