日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

标记寄存器---汇编学习笔记

發(fā)布時間:2025/3/15 编程问答 15 豆豆
生活随笔 收集整理的這篇文章主要介紹了 标记寄存器---汇编学习笔记 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

標(biāo)記寄存器

CPU內(nèi)部的寄存器中,有一種特殊的寄存器(對于不同的處理機,個數(shù)和結(jié)構(gòu)都可能不同)具有以下3種作用

(1)用來存儲相關(guān)指令的某些執(zhí)行結(jié)果。
(2)用來為CPU執(zhí)行相關(guān)指令提供行為依據(jù)。
(3)用來控制CPU的相關(guān)工作方式。

這種特殊的寄存器在8086CPU中,被稱為標(biāo)志寄存器(flag)。如圖:


11.1 ZF標(biāo)志

flag的第6位是ZF,零標(biāo)志位。它記錄相關(guān)指令執(zhí)行后,其結(jié)果是否為0。如果結(jié)果為0那么zf=1;如果不為0,那么zf=0。

運算指令的執(zhí)行對標(biāo)志寄存器會產(chǎn)生影響,而傳送指令對標(biāo)志寄存器不會產(chǎn)生影響。

比如:

mov ax,1 ;不對標(biāo)志寄存器產(chǎn)生影響 sub ab,1 ;對標(biāo)志寄存器產(chǎn)生影響,并且zf=1

11.2 PF標(biāo)志

flag的第2位是PF,奇偶標(biāo)志位。它記錄相關(guān)指令執(zhí)行后,其結(jié)果的所有bit位中1的個數(shù)是否為偶數(shù)。如果1的個數(shù)為偶數(shù),pf=1,如果為奇數(shù),那么pf=0。

比如:

mov al,1 ;不影響標(biāo)志寄存器 add al,10 ;影響標(biāo)志寄存器,并且1的個數(shù)為奇數(shù),pf=0

11.3 SF標(biāo)志

flag的第7位是SF,符號標(biāo)志位。它記錄相關(guān)指令執(zhí)行后,其結(jié)果是否為負(fù)。如果結(jié)果為負(fù),sf=1;如果非負(fù),sf=0。

檢測點 11.1
寫出下面指令執(zhí)行后,ZF、PF、SF等標(biāo)志位的值。

指令ZFPFSF
sub al,al110
mov al,1000
push ax——————
pop bx——————
add al,bl000
add al,10010
mul al011


11.4 CF標(biāo)志

flag的第0位是CF,進位標(biāo)志位。一般情況下,在進行無符號數(shù)運算的時候,它記錄了運算結(jié)果的最高有效位向更高位的進位值,或從更高位的借位值。如圖(加法器的Ci進位,i=7):

加法減法都會產(chǎn)生借位:
(1)加法比如:

mov al,98H add al,al ;執(zhí)行后:(al)=30H,CF=1,CF記錄了從更高有效位向更高的進位值

(2)減法比如:

mov al,97H sub al,98H ;執(zhí)行后:(al)=FFH,CF=1,CF記錄了向更高位進行借位值

11.5 OF標(biāo)志

flag的第11位是OF,溢出標(biāo)志位。一般情況下,OF記錄了有符號數(shù)運算的結(jié)果是否發(fā)生了溢出。如果發(fā)生溢出,OF=1;如果沒有,OF=0。

注意CF和OF的區(qū)別:CF是對無符號位數(shù)運算有意義的標(biāo)志位,而OF是對有符號數(shù)運算有意義的標(biāo)志位。

比如:

mov al,0f0h ;有符號為-10,無符號為240 add al,78h ;有無符號都為120 ;進行無符號運算則發(fā)生溢出,進行有符號運算將不溢出 ;則cf=1,of=0

檢測點 11.2
寫出下面每條指令執(zhí)行后,ZF、PF、SF、CF、OF等標(biāo)志位的值。

指令CFOFSFZFPF
sub al,al00011
mov al,10h——————————
add al,90h00101
mov al,80h——————————
add al,80h11011
mov al,0fch——————————
add al,05h10000
mov al,7dh——————————
add al,0bh11000


11.6 adc指令

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

指令格式:adc 操作對象1,操作對象2
功能:操作對象1=操作對象1+操作對象2+CF

例子:
編程,計算1EF000H+201000H,結(jié)果放在ax(高16位)和bx(低16位)中。

mov ax,001eh mov bx,0f000h add bx,1000h ;標(biāo)志寄存器cf置1 adc ax,0020h ;(ax)=(ax)+0020h+cf

編寫一個子程序,對兩個128位數(shù)據(jù)進行相加。
名稱: add128
功能:兩個128位數(shù)據(jù)進行相加。
參數(shù):
*參數(shù)1:*ds:si指向存儲第一個數(shù)的內(nèi)存空間,因數(shù)據(jù)為128位,所以需要8個字單元,由低地址單元到高地址單元一次存放128位數(shù)據(jù)由低到高的各個字。運算結(jié)果存儲在第一個數(shù)的存儲空間中。
*參數(shù)2:*ds:di指向存儲的第二個數(shù)的內(nèi)存空間。

程序如下:

add128:push axpush cxpush sipush disub ax,ax ;將cf置0mov cx,8 s:mov ax,[si]adc ax,[di]mov [si],axadd si,2add di,2loop spop dipop sipop cxpop axret

11.7 sbb指令

sbb是帶借位減法指令,它利用了CF位上記錄的借位值。

指令格式:sbb 操作對象1,操作對象2
功能:操作對象1 = 操作對象1-操作對象2-CF

與adc具有相同的思想設(shè)計。


11.8 cmp指令

cmp是比較指令,cmp的功能相當(dāng)于減法指令,只是不保存結(jié)果。cmp指令執(zhí)行后,將對標(biāo)志寄存器產(chǎn)生影響。

cmp指令格式:cmp 操作對象1,操作對象2
功能:計算操作對象1-操作對象2但并不保存結(jié)果,僅僅根據(jù)計算結(jié)果對標(biāo)志寄存器進行設(shè)置

比如:cmp ax,ax指令執(zhí)行后:zf=1,pf=1,sf=0,cf=0,of=0。

執(zhí)行cmp ax,bx后:

  • 如果(ax)=(bx) 則(ax)-(bx)=0,所以:zf=1
  • 如果(ax)!=(bx) 則(ax)-(bx)!=0,所以:zf=0
  • 如果(ax)<(bx) 則(ax)-(bx)將產(chǎn)生借位,所以:cf=1
  • 如果(ax)>=(bx) 則(ax)-(bx)不必借位,所以:cf=0
  • 如果(ax)>(bx) 則(ax)-(bx)即不必借位,結(jié)果又不為0,所以:cf=0并且zf=0
  • 如果(ax)<=(bx) 則(ax)-(bx)既可能借位,結(jié)果可能為0,所以:cf=1或zf=1
  • 顯然,除了上面那樣還不夠!

    還需要sf和of一起作用(記住,of=1溢出導(dǎo)致實際結(jié)果與邏輯結(jié)果相反):


    11.9 檢測比較結(jié)果的條件轉(zhuǎn)移指令

    “轉(zhuǎn)移”指的是它能夠修改IP,而“條件”指的是它可以根據(jù)某種條件,決定是否修改IP。

    指令含義檢測的相關(guān)標(biāo)志位
    je等于則轉(zhuǎn)移zf=1
    jne不等于則轉(zhuǎn)移zf=0
    jb低于則轉(zhuǎn)移cf=1
    jnb不低于則轉(zhuǎn)移cf=0
    ja高于則轉(zhuǎn)移cf=0且zf=0
    jna不高于則轉(zhuǎn)移cf=1或zf=1

    e:表示equal
    ne:表示not equal
    b:表示below
    nb:表示not below
    a:表示above
    na:表示not above

    檢測點 11.3
    (1)補全下面的程序,統(tǒng)計F000:0處32個字節(jié)中,大小在[32,128]的數(shù)據(jù)的個數(shù)。

    assume cs:codecode segmentstart:mov ax,0f000hmov ds,axmov bx,0mov dx,0mov cx,32s: mov al,[bx]cmp al,32;低于32jb s0cmp al,128;高于128ja s0;如果在范圍內(nèi),則+1inc dxs0:;如果不在范圍內(nèi),則+1inc bxloop s code ends end start

    (2)補全下面的程序,統(tǒng)計F000:0處32個字節(jié)中,大小在(32,128)的數(shù)據(jù)個數(shù)。

    assume cs:codecode segmentstart:mov ax,0f000hmov ds,axmov bx,0mov dx,0mov cx,32s: mov al,[bx]cmp al,32;不高于是<=jna s0cmp al,128;不低于是>=jnb s0;如果在范圍內(nèi),則+1inc dxs0:;如果不在范圍內(nèi),則+1inc bxloop s code ends end start

    11.10 DF標(biāo)志和串傳送指令

    flag的第10位是DF,方向標(biāo)志位。在串處理指令中,控制每次操作后si、di的增減。

    格式:movsb
    功能:執(zhí)行movsb指令相當(dāng)于進行下面幾步操作。
    (1)((es)?16+(di))=((ds)?16+(si))((es)?16+(di))=((ds)?16+(si))
    (2)如果df=0則:(si)=(si)+1,(di)=(di)+1(si)=(si)+1,(di)=(di)+1
    (3)如果df=1則:(si)=(si)?1,(di)=(di)?1(si)=(si)?1,(di)=(di)?1

    格式:movsw
    功能:將ds:si指向的內(nèi)存單元中的字送入es:di中,然后根據(jù)標(biāo)志寄存器df位的值,將si和di遞增2或遞減2。
    (1)如果df=0則:add si,2 and add di,2
    (2)如果df=1則:sub si,2 and sub si,2

    格式:rep movsb
    功能:根據(jù)cx來決定循環(huán)次數(shù),n次就是復(fù)制n個字節(jié)的內(nèi)容

    s: movsbloop s

    同理:擁有格式rep movsw
    功能:根據(jù)cx來決定循環(huán)次數(shù),n次就是復(fù)制n個字的內(nèi)容

    改變方向的2個指令:
    (1)cld指令:將標(biāo)志寄存器的df置0
    (2)std指令:將標(biāo)志寄存器的df置1

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

    mov ax,data mov ds,ax mov si,0 mov es,ax mov di,16 mov cx,16 cld rep movsb

    11.11 pushf和popf

    pushf的功能是將標(biāo)志寄存器的值壓入棧中,而popf是從棧中彈出數(shù)據(jù),送入標(biāo)志寄存器中。pushf和popf,為直接訪問標(biāo)志寄存器提供了一種方法。

    檢測點 11.4
    下面的程序執(zhí)行后:(ax)=?(ax)=?

    mov ax,0 ;ax=0 push ax ;ax=0,stack=[top>0>bottom] popf ;ax=0,stack=[top>bottom] mov ax,0fff0h ;ax=fff0h add ax,0010h ;ax=0h pushf ;ax=0,stack=[top>1000111B>bottom] pop ax ;ax=47h(0100 0111B),stack=[top>bottom] and al,11000101B;ax=45h(0100 0101B) and ah,00001000B;ax=45h

    11.12 標(biāo)志寄存器在Debug中的表示

    在Debug中,標(biāo)志寄存器是按照有意義的各個標(biāo)志位單獨表示的。在Debug中,我們可以看到下面的信息。

    實驗11 編寫子程序


    應(yīng)用舉例:

    assume cs:codesgdatasg segmentdb "Beginner's All-purpose Symbolic Instruction Code.",0 datasg endscodesg segmentbegin:mov ax,datasgmov ds,axmov si,0call lettercmov ax,4c00hint 21hletterc:;比較是'a'<=ds:[si]<='z';如果是,則變?yōu)榇髮?否則,啥也不干;循環(huán)到0位置push axchange:mov al,ds:[si];ax<'a'則什么也不做cmp al,97jb next;ax>'z'則什么也不做cmp al,122ja next;ax=0,則返回cmp al,0je returnand al,11011111Bmov ds:[si],alnext:inc siloop changereturn:pop axretcodesg ends end begin

    總結(jié)

    以上是生活随笔為你收集整理的标记寄存器---汇编学习笔记的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。

    主站蜘蛛池模板: 天堂在线视频免费 | 综合色影院 | 最新黄色av | 99久久久国产精品无码网爆 | 丁香六月欧美 | 在线免费观看 | 999一区二区三区 | 涩涩在线看 | 亚洲av综合色区无码一区爱av | 成人一区二区三区四区 | 日本综合在线 | 久久不卡日韩美女 | 97人妻人人澡人人爽人人精品 | 国产日韩欧美自拍 | 丁香激情视频 | 中文在线a天堂 | 欧美日本一区二区三区 | 亚洲精品国产av | yy1111111| 自拍亚洲一区 | eeuss国产一区二区三区 | 免费精品| 亚洲欧美www | 欧美激情一区二区 | 天堂在线中文资源 | 日本中文字幕网站 | 成人黄色在线视频 | 欧美手机在线观看 | 欧美日韩激情视频在线观看 | 国产精品入口麻豆 | 国产一区黄色 | 91成年视频| 中日韩免费视频 | 天天色天天色天天色 | www.激情网 | 久久久久激情 | 亚洲av综合色区无码一区爱av | 亚洲AV无码精品一区二区三区 | 日本中文字幕在线观看视频 | 激情五月婷婷小说 | 久久精品成人av | 日韩黄色免费视频 | 久久国产精品波多野结衣 | 久久艹伊人 | 欧美人体视频一区二区三区 | 97精品人人a片免费看 | 一本一道久久综合狠狠老精东影业 | 国产一区二区三区视频在线播放 | 日本三级黄色录像 | 性开放耄耋老妇hd | 亚洲第一色网站 | 欧美三级视频在线播放 | 超碰狠狠操 | 夜间福利在线 | 专干老肥女人88av | 成人性视频sm. | 精品国产不卡 | 88av在线视频 | 亚洲成人自拍网 | 一线毛片| 中文在线а√天堂官网 | 亚洲欧美激情在线 | 老头老太做爰xxx视频 | 亚洲一区成人在线 | 手机在线看永久av片免费 | 一级黄色视 | 苏晴忘穿内裤坐公交车被揉到视频 | 天堂精品 | 污污视频在线观看网站 | 少妇精品久久久一区二区三区 | 日韩久久久久久久久久 | 苍井空浴缸大战猛男120分钟 | 99精品欧美一区二区三区 | 天天看夜夜 | 九草网 | 久久综合激情网 | 无码人妻一区二区三区在线视频 | 伊人成人在线视频 | 男人的天堂在线 | 国产日韩av一区二区 | 国产精品一区三区 | 男人的天堂99 | 亚洲黄色激情视频 | 永久精品 | 日韩少妇内射免费播放 | 亚洲深夜福利视频 | 国产jizz18女人高潮 | 波多野结衣在线视频免费观看 | 调教丰满的已婚少妇在线观看 | 奇米777视频| 国产精品视频大全 | 奇米四色在线视频 | 在线免费毛片 | 国模私拍一区二区 | 最近中文在线观看 | 在线欧美日韩国产 | 欧美精品小视频 | 男男gay动漫 | 中文字幕日韩在线播放 |