日韩黑丝制服一区视频播放|日韩欧美人妻丝袜视频在线观看|九九影院一级蜜桃|亚洲中文在线导航|青草草视频在线观看|婷婷五月色伊人网站|日本一区二区在线|国产AV一二三四区毛片|正在播放久草视频|亚洲色图精品一区

分享

80386ASM程序設(shè)計(jì)基礎(chǔ)(一)

 壞壞 2006-12-09
   本期將連續(xù)推出若干篇有關(guān)80386ASM程序設(shè)計(jì)的基礎(chǔ),主要介紹80386ASM指令的詳細(xì)用法及如何在80386實(shí)模式下,保護(hù)模式下及虛擬8086模式編程以及80386下的段頁管理機(jī)制。   
   80386處理器是Intel公司80x86發(fā)展史上的里程碑,它不但兼容先前的8086/8088,80186,80286處理器,而且也為后來的486,Pentium(586),Pentium Pro(686)的發(fā)展打下了堅(jiān)實(shí)的基礎(chǔ),對(duì)于我們程序員來講更重要的是:我們關(guān)心80386在指令上到底有哪些擴(kuò)展呢?80386有哪些尋址方式呢?毫無疑問,它不但兼容了8086的所有指令,而且還對(duì)它們進(jìn)行增強(qiáng).
   有很多人問CPU已經(jīng)發(fā)展到PentiumIIII,沒有必要學(xué)習(xí)80386的匯編。其實(shí)不然,80386處理器中的保護(hù)模式,虛擬8086模式以及地址的段頁管理機(jī)制,虛擬內(nèi)存這些都是以后處理器的核心。所以說80386是后續(xù)發(fā)展處理器的基礎(chǔ),比如說80486實(shí)質(zhì)上80386+80387協(xié)處理,這塊協(xié)處理器主要用于處理浮點(diǎn)運(yùn)算,Pentium處理器在80386指令的基礎(chǔ)上增加了57條指令,8個(gè)數(shù)據(jù)類型,8個(gè)64位的寄存器來處理多媒體。從這一點(diǎn)來看,完全有必要了解80386ASM,這就好像學(xué)習(xí)80386,必須先要熟練掌握8086。
    1.80386的的寄存器:
    80386的寄存器可以分為8組:通用寄存器,段寄存器,指令指針寄存器,標(biāo)志寄存器,系統(tǒng)地址寄存器,控制寄存器,調(diào)試寄存器,測試寄存器,它們的寬度都是32位的。本篇主要介紹80386的寄存器。
    A1.General Register(通用寄存器)
    EAX,EBX,ECX,EDX,ESI,EDI,ESP,EBP,它們的低16位就是8086的AX,BX,CX,DX,SI,DI,SP,BP,它們的含義如下:
    EAX:累加器
    EBX:基址寄存器
    ECX:計(jì)數(shù)器
    EDX:數(shù)據(jù)寄存器
    ESI:源地址指針寄存器
    EDI:目的地址指針寄存器
    EBP:基址指針寄存器
    ESP:堆棧指針寄存器
    這些寄存器可以將低16位單獨(dú)存取,也就是8086的AX,BX,CX,DX,SI,DI,SP,BP,在存取這些寄存器的低16位(AX,BX,CX,DX,SI,DI,SP,BP),它
們的高16位不受影響,同時(shí)和8086一樣對(duì)于AX,BX,CX,DX這四個(gè)寄存器來講,可以單獨(dú)存取它們的高8位和低8位(AH,AL,BH,BL,CH,CL,DH,DL)
   
    A2:Segment Register(段寄存器)
    除了8086的4個(gè)段外(CS,DS,ES,SS),80386還增加了兩個(gè)段FS,GS,這些段寄存器都是16位的,它們的含義如下:
    CS:代碼段(Code Segment)
    DS:數(shù)據(jù)段(Data Segment)
    ES:附加數(shù)據(jù)段(Extra Segment)
    SS:堆棧段(Stack Segment)
    FS:附加段
    GS  附加段
   
    A3:Instruction Pointer(指令指針寄存器)
    EIP,它的低16位就是8086的IP,它存儲(chǔ)的是下一條要執(zhí)行指令的地址。
   
    A4:Flag Register(標(biāo)志寄存器)
    EFLAGS,和8086的16位標(biāo)志寄存器相比,增加了4個(gè)控制位,不過這4個(gè)控制位它們?cè)趯?shí)模下不起作,這四個(gè)控制位分別是:
    a.IOPL(I/O Privilege Level),I/O特權(quán)級(jí)字段,它的寬度為2bit,它指定了I/O指令的特權(quán)級(jí)。如果當(dāng)前的特權(quán)級(jí)別在數(shù)值上小于或等于IOPL,那么I/O指令可執(zhí)行。否則,將發(fā)生一個(gè)保護(hù)性異常。   
    b.NT(Nested Task):控制中斷返回指令I(lǐng)RET,它寬度為1位。NT=0,用堆棧中保存的值恢復(fù)EFLAGS,CS和EIP從而實(shí)現(xiàn)中斷返回;NT=1,則通過任務(wù)切換實(shí)現(xiàn)中斷返回。
    c.RF(Restart Flag):重啟標(biāo)志,它的寬度是1位。它主要控制是否接受調(diào)試故障。RF=0接受,RF=1忽略。如果你的程序每一條指令都被成功執(zhí)行,那么RF會(huì)被清0。而當(dāng)接受到一個(gè)非調(diào)試故障時(shí),處理器置RF=1。
    d.VM(Virtual Machine):虛擬8086模式(用軟件來模擬8086的模式,所以也稱虛擬機(jī))。VM=0,處理器工作在一般的保護(hù)模式下;VM=1,工作在V8086模式下。
    其它16個(gè)標(biāo)志位的含義和8086一樣,在這里也重溫一遍:
    e.CF(Carry Flag):進(jìn)位標(biāo)志位,由CLC,STC兩標(biāo)志位來控制
    f.PF(Parity Flag):奇偶標(biāo)志位
    g.AF(Assistant Flag):輔助進(jìn)位標(biāo)志位
    h.ZF(Zero Flag):零標(biāo)志位
    i.SF(Singal Flag):符號(hào)標(biāo)志位
    j.IF(Interrupt Flag):中斷允許標(biāo)志位,由CLI,STI兩條指令來控制
    k.DF(Direction Flag):向量標(biāo)志位,由CLD,STD兩條指令來控制
    l.OF(Overflow Flag):溢出標(biāo)志位。
    控制寄存器,系統(tǒng)地址的寄存器,調(diào)試寄存器,測試寄存器將在介紹完80386分段,分頁管理機(jī)制后介紹,請(qǐng)繼續(xù)關(guān)注第二篇“80386存儲(chǔ)器的尋址方式”。

    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶 評(píng)論公約

    類似文章 更多