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

分享

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

 壞壞 2006-12-09

高級(jí)語言支持,條件字節(jié)設(shè)置指令
  AA.高級(jí)語言支持指令,開始于80186,主要是用來簡(jiǎn)化高級(jí)語言的某些特征,總共有3條指令:ENTER,LEAVE,BOUND
  a.ENTER,LEAVE,建立與釋放堆??蚣苊?。在C語言中,棧不僅用來向函數(shù)傳遞入口參數(shù),而且在函數(shù)內(nèi)部的局部變量也存放在棧中。為了準(zhǔn)確地存取這些這些局變量和準(zhǔn)確地獲得入口參數(shù),就需要建立堆??蚣?,先看一個(gè)小程序:
  //C Programming-Language
  int sum(int x,int y)
  {
    int sum;
    sum=x+y;
    return sum;
  }
  //The corresponding ASM codes lists below
  _sum proc near;注意C語言中函數(shù)參數(shù)的入棧方式是從右向左,即先是參數(shù)y入棧,再是x入棧,再是函數(shù)的返回地址入棧
    push bp
    mov bp,sp;建立堆??蚣?br>    sub sp,2
 
    mov ax,word ptr [bp+4];取參數(shù)x
    add ax,word ptr [bp+6];加參數(shù)y
    mov word ptr [bp-2],ax
    mov ax,word ptr [bp-2]
    mov sp,bp;釋放??蚣?br>    pop bp
    ret
  _sum endp
 此時(shí)棧頂?shù)氖疽鈭D是:
 |----------------------|
 |         BP           |<====SP
 |----------------------|    
 |     函數(shù)返回地址     |<====BP+2
 |----------------------|
 |        參數(shù)x         |<====BP+4
 |----------------------|
 |        參數(shù)y         |<====BP+6
 |----------------------|
 |       ......         |<====BP+8
 |----------------------|
 |       ........       |<====BP+n,n是一能被2整除的數(shù)
 |----------------------|
 如果用建立和釋放堆棧框架指令,那么對(duì)應(yīng)的匯編程序應(yīng)該是:
 _sum proc near
    enter 2,0;建立??蚣?br>    mov ax,word ptr [bp+4];取參數(shù)x
    add ax,word ptr [bp+6];加參數(shù)y
    mov word ptr [bp-2],ax
    mov ax,word ptr [bp-2]
    leave;釋放棧框架
    ret
 _sum endp
 b.建立??蚣苤噶頔NTER,格式如下:ENTER  CNT1,CNT2。其中CNT1表示框架的大小,即子程序中需要放在棧中局部變量的字節(jié)數(shù);CNT2是立即數(shù),表示子程序嵌套級(jí)別,即從調(diào)用框架復(fù)制到當(dāng)前框架的指針數(shù)。在立即數(shù)CNT2為0時(shí),ENTER指令的實(shí)過程是:
 PUSH BP
 SP=>BP
 SP<=SP-CNT1
 c.釋放??蚣苤噶頛EAVE,其具體實(shí)現(xiàn)過程:
 8086:
 BP=>SP
 POP BP
 80386:
 EBP=>ESP
 POP EBP
 d.ENTER和LEAVE指令均不影響標(biāo)志寄存器中的各標(biāo)志位,同時(shí)LEAVE指令只負(fù)責(zé)釋放??蚣?,并不負(fù)責(zé)函數(shù)返回。因此,要在LEAVE指令后安排一條返回指令。

 BB.條件字節(jié)設(shè)置指令
 這是80386新增的一組指令集,將會(huì)在后面全部列表出來。條件字節(jié)設(shè)置指令的格式:
 SETxx OPRD
 xx是助記符的一部分,OPRD只能是8位的寄存器或存儲(chǔ)單元。
 eg:
 SETO AL;表示當(dāng)溢出標(biāo)志位為1時(shí),即OF=1,將AL置1,否則AL清0
 SETNC CH;表示當(dāng)CF=0時(shí),將CH置1,否則將CH清0
 SETNA BYTE PTR [100];表示當(dāng)AF=0,將DS:[100]這一個(gè)字置1,否則將它清0
 a.SETZ OPRD;等于0時(shí)(ZF=1),置OPRD為1,否則清0
 b.SETE OPRD;同a
 c.SETNZ OPRD;不等于0時(shí)(ZF=0),置OPRD為1,否則清0
 d.SETNE OPRD;同c
 e.SETS  OPRD;為負(fù)數(shù)時(shí)(SF=1)置OPRD為1,否則清0
 f.SETNS OPRD;同e正好相反(SF=0)
 g.SETO  OPRD;OF=1,置OPRD為1,否則清0
 h.SETNO OPRD;同g正好相反
 i.SETP  OPRD;偶(PF=1)置1
 j.SETPE OPRD;同i
 k.SETNP OPRD;奇(PF=0)置1
 l.SETPO OPRD;同k
 m.SETB OPRD;低于置OPRD為1,否則清0,這是針對(duì)無符號(hào)數(shù)的
 n.SETNAE OPRD;不高于即低于或等于時(shí)置OPRD為1,否則清0,這是針對(duì)無符號(hào)數(shù)的
 o.SETC OPRD;CF=1,置OPRD為1,否則清0
 p.SETNB OPRD;高于或等于時(shí),置OPRD為1,否則清0,這是針對(duì)無符號(hào)數(shù)的
 q.SETAE OPRD;高于時(shí)置OPRD為1,否則清0,這是針對(duì)無符號(hào)數(shù)的
 r.SETNC OPRD;CF=0時(shí),置OPRD為1,否則清0,這是針對(duì)無符號(hào)數(shù)的
 s.SETBE OPRD;低于或等于時(shí),置OPRD為1,否則清0,這是針對(duì)無符號(hào)數(shù)的,CF|ZF=1
 t.SETNA OPRD;同s,這是針對(duì)無符號(hào)數(shù)的,CF|ZF=1
 u.SETNBE OPRD;高于時(shí)置OPRD為1,否則清0,這是針對(duì)無符號(hào)數(shù)的,CF OR ZF=0
 v.SETA OPRD;同u,這是針對(duì)無符號(hào)數(shù)的,CF OR ZF=0
 w.SETL OPRD;小于時(shí),置OPRD為1,否則清0,這是針對(duì)有符號(hào)數(shù)的
 x.SETNGE OPRD;同w,這是針對(duì)有符號(hào)數(shù)的
 y.SETNL OPRD;大于或等于時(shí),置OPR為1,否則清0,這是針對(duì)有符號(hào)數(shù)的
 z.SETGE OPRD;同y,這是針對(duì)有符號(hào)數(shù)的
 a1.SETLE OPRD;小于或等于時(shí),置OPRD為1,否則清0,這是針對(duì)有符號(hào)數(shù)的
 a2.SETNG OPRD;同a1,這是針對(duì)有符號(hào)數(shù)的
 a3.SETNLE;大于時(shí),置OPRD為1,否則清0,這是針對(duì)有符號(hào)數(shù)的
 a4.SETG;同a3,這是針對(duì)有符號(hào)數(shù)的

    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購(gòu)買等信息,謹(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)論公約

    類似文章 更多