IBM-PC匯編語(yǔ)言程序設(shè)計(jì)課件_第1頁(yè)
IBM-PC匯編語(yǔ)言程序設(shè)計(jì)課件_第2頁(yè)
IBM-PC匯編語(yǔ)言程序設(shè)計(jì)課件_第3頁(yè)
IBM-PC匯編語(yǔ)言程序設(shè)計(jì)課件_第4頁(yè)
IBM-PC匯編語(yǔ)言程序設(shè)計(jì)課件_第5頁(yè)
已閱讀5頁(yè),還剩297頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

IBM—PC匯編語(yǔ)言程序設(shè)計(jì)

計(jì)算機(jī)語(yǔ)言的發(fā)展機(jī)器語(yǔ)言FORTRANBASICCOBOLPASCALC/C++JAVA...匯編語(yǔ)言高級(jí)語(yǔ)言匯編語(yǔ)言的特點(diǎn)

面向機(jī)器的低級(jí)語(yǔ)言,通常是為特定的計(jì)算機(jī)或計(jì)算機(jī)系列專(zhuān)門(mén)設(shè)計(jì)的。保持了機(jī)器語(yǔ)言的優(yōu)點(diǎn),具有直接和簡(jiǎn)捷的特點(diǎn)??捎行У卦L(fǎng)問(wèn)、控制計(jì)算機(jī)的各種硬件設(shè)備,

如磁盤(pán)、存儲(chǔ)器、CPU、I/O端口等。目標(biāo)代碼簡(jiǎn)短,占用內(nèi)存少,執(zhí)行速度快,是高效的程序設(shè)計(jì)語(yǔ)言。

經(jīng)常與高級(jí)語(yǔ)言配合使用,應(yīng)用十分廣泛。

#include"stdafx.h"#include"stdio.h"intmain(intargc,char*argv[]){inta,b,c;a=1; b=2; c=a+b; printf(“c=%d\n",c); return0;}

編程實(shí)現(xiàn)c=a+b,并在屏幕上顯示出結(jié)果。

例1編譯后的目標(biāo)文件達(dá)到3.59KBdatasegmentadb?bdb?cdb?stringdb'c=$'dataendscodesegmentmainprocfarassumecs:code,ds:data,es:datastart:

pushdssubax,axpushax

movax,datamovds,axmoves,ax

mova,1movb,2moval,aaddal,bmovc,al

leadx,stringmovah,09int21h

addc,30hmovdl,cmovah,2int21hmovdl,0ahint21hmovdl,0dhint21hretmainendpcodeendsendstart例2.C=a+b匯編后的目標(biāo)文件只有208字節(jié)匯編語(yǔ)言的應(yīng)用系統(tǒng)程序、效率代碼、I/O驅(qū)動(dòng)程序

70%以上的系統(tǒng)軟件是用匯編語(yǔ)言編寫(xiě)的。某些快速處理、位處理、訪(fǎng)問(wèn)硬件設(shè)備等高效程序是用匯編語(yǔ)言編寫(xiě)的。高級(jí)繪圖程序、視頻游戲程序一般是用匯編語(yǔ)言編寫(xiě)的。教師建議目標(biāo):●了解匯編語(yǔ)言的特性及其編程技術(shù),●建立起“機(jī)器”和“程序”、“空間”和“時(shí)間”的概念。建議:●充分注意“匯編”課實(shí)踐性強(qiáng)的特點(diǎn),●多讀程序,多寫(xiě)程序,多上機(jī)調(diào)試程序,●熟悉PC機(jī)的編程結(jié)構(gòu),●掌握匯編語(yǔ)言及其程序設(shè)計(jì)的基本概念、方法和技巧。參考資料1.80X86匯編語(yǔ)言程序設(shè)計(jì) 沈美明溫冬嬋清華大學(xué)出版社2.IBMPC匯編語(yǔ)言與程序設(shè)計(jì)

PETERABEL編著 第4版清華大學(xué)出版社.PRENTICEHALL

第5版人民郵電出版社3.IBMPC匯編語(yǔ)言與程序設(shè)計(jì)例題習(xí)題集溫冬嬋沈美明清華大學(xué)出版社教學(xué)日歷:具體見(jiàn)《2007教學(xué)日歷》一緒論

數(shù)制

數(shù)制之間的轉(zhuǎn)換

數(shù)和字符的表示

運(yùn)算二計(jì)算機(jī)組織

CPU存儲(chǔ)器

外部設(shè)備

尋址方式三指令系統(tǒng)(1)四指令系統(tǒng)(2)

BIOS和DOS調(diào)用

五上機(jī)過(guò)程

完整段定義和簡(jiǎn)化段定義格式

偽操作六循環(huán)與分支程序設(shè)計(jì)

子程序結(jié)構(gòu)

七高級(jí)匯編語(yǔ)言技術(shù)

I/O程序設(shè)計(jì)

八中斷程序設(shè)計(jì)

復(fù)習(xí)第1章基礎(chǔ)知識(shí)

數(shù)制

數(shù)制之間的轉(zhuǎn)換

運(yùn)算

數(shù)和字符的表示預(yù)備知識(shí)存儲(chǔ)容量1K=1024=210(Kilo)1M=1024K=220

(Mega)1G=1024M=230(Giga)1個(gè)二進(jìn)制位:bit(比特)8個(gè)二進(jìn)制位:Byte(字節(jié))1Byte=8bit2個(gè)字節(jié):Word(字)

1Word=2Byte=16bit1.數(shù)制

數(shù)制基數(shù)數(shù)碼

二進(jìn)制Binary20,1

八進(jìn)制Octal80,1,2,3,4,5,6,7

十進(jìn)制Decimal100,1,2,3,4,5,6,7,8,9

十六進(jìn)制Hexadecimal160,1,2,3,4,5,6,7,8,9,A,B,C,D,E,F二進(jìn)制:基數(shù)為2,逢二進(jìn)一

11012=1×23+1×22+1×20=1310十六進(jìn)制:基數(shù)為16,逢十六進(jìn)一

1001,0001,1000,01119187=9×163+1×162+8×161+7×1602.數(shù)制之間的轉(zhuǎn)換

二進(jìn)制十六進(jìn)制十進(jìn)制二進(jìn)制十進(jìn)制十六進(jìn)制降冪法除法

二進(jìn)制十六進(jìn)制

0011010110111111

35BF∴

0011,0101,1011,1111B=35BFH

A19C

1010000110011100∴A19CH=1010,0001,1001,1100B

1011B=23+21+20=11D

降冪法除法

例:27D=?B2711331----2n16842111011

∴27D=11011B

二進(jìn)制十進(jìn)制

十六進(jìn)制十進(jìn)制

BF3CH=11163+15162+3161+12160

=48956D

降冪法除法

例:399D=?H39914315399/16→24/16→1/16→0---↓↓↓16n256161F81

18F

∴399D=18FH

算術(shù)運(yùn)算

二進(jìn)制數(shù):逢二進(jìn)一借一為二加法規(guī)則乘法規(guī)則

0+0=000=00+1=101=01+0=110=01+1=0(進(jìn)位1)11=13.運(yùn)算(算術(shù)運(yùn)算和邏輯運(yùn)算)05C3H3D25H42E8H+3D25H05C3H3762H-1-1十六進(jìn)制數(shù):逢十六進(jìn)一借一為十六

邏輯運(yùn)算(按位操作)“與”運(yùn)算(AND)“或”運(yùn)算(OR)

ABA

BABA

B

000000010011100101111111“非”運(yùn)算(NOT)

“異或”運(yùn)算(XOR)

A

A

ABA

B0100010

011101110例:X=00FFHY=5555H,求Z=X

Y=?X=0000000011111111B

Y=0101010101010101B

Z=0101010110101010B

Z=55AAH4.數(shù)和字符的表示

計(jì)算機(jī)中正負(fù)數(shù)的表示

76543210符號(hào)位

數(shù)值位假設(shè)機(jī)器字長(zhǎng)為16位:符號(hào)位=0正數(shù)

數(shù)值位

=

1負(fù)數(shù)1514131211109876543210假設(shè)機(jī)器字長(zhǎng)為8位:H.O.ByteL.O.ByteH.O.NibbleL.O.Nibble數(shù)的常用表示法

——

原碼反碼補(bǔ)碼原碼表示法:符號(hào)+絕對(duì)值例:n=8bit[+3]原碼

=0000,0011=03H[-3]原碼

=1000,0011=83H[+0]原碼

=0000,0000=00H[-0]原碼

=1000,0000=80H0的表示不惟一反碼表示法:正數(shù)的反碼同原碼,負(fù)數(shù)的反碼數(shù)值位與原碼相反例:n=8bit[+5]反碼

=0000,0101=05H[-5]反碼

=1111,1010=FAH[+0]反碼

=0000,0000=00H[-0]反碼

=1111,1111=FFH0的表示不惟一例:機(jī)器字長(zhǎng)8位,[-46]補(bǔ)碼=?[46]補(bǔ)碼=001011101101000111010010=D2H

機(jī)器字長(zhǎng)16位,[-46]補(bǔ)碼=FFD2H

[+0]補(bǔ)碼=000000001111111100000000=[-0]補(bǔ)碼0的表示惟一按位求反末位加一按位求反末位加一補(bǔ)碼(Two’sComplement)表示法:正數(shù)的補(bǔ)碼:同原碼負(fù)數(shù)的補(bǔ)碼:(1)寫(xiě)出與該負(fù)數(shù)相對(duì)應(yīng)的正數(shù)的補(bǔ)碼

(2)按位求反

(3)末位加一

十進(jìn)制二進(jìn)制十六進(jìn)制十進(jìn)制十六進(jìn)制

n=8n=16+127011111117F+327677FFF+126011111107E+327667FFE......……...+20000001002+20002+10000000101+100010000000000000000-111111111FF-1FFFF-211111110FE-2FFFE......……...-1261000001082-327668002-1271000000181-327678001-1281000000080-327688000n位二進(jìn)制補(bǔ)碼的表數(shù)范圍:

-2n-1≤N≤2n-1-1無(wú)符號(hào)整數(shù)的表數(shù)范圍:

0≤N≤2n-1補(bǔ)碼的加法和減法:求補(bǔ)運(yùn)算

:對(duì)一個(gè)二進(jìn)制數(shù)按位求反、末位加一

[X]補(bǔ)碼

[-X]補(bǔ)碼

[X]補(bǔ)碼加法規(guī)則:[X+Y]補(bǔ)碼

=[X]補(bǔ)碼

+[Y]補(bǔ)碼減法規(guī)則:[X-Y]補(bǔ)碼

=[X]補(bǔ)碼

+[-Y]補(bǔ)碼

補(bǔ)碼減法可轉(zhuǎn)換為補(bǔ)碼加法64(-46)18+010000001101001000010010+例:進(jìn)位和溢出進(jìn)位:由于運(yùn)算結(jié)果超出了位數(shù),最高有效位向前的進(jìn)位,這一位自然丟失,一般不表示結(jié)果的對(duì)錯(cuò)。溢出:表示結(jié)果超出了字長(zhǎng)允許表示的范圍,一般會(huì)造成結(jié)果出錯(cuò)。例:(-64)1100000012701111111

+6401000000+1000000010100000000128

10000000

進(jìn)位溢出1.計(jì)算機(jī)系統(tǒng)硬件:中央處理機(jī)

CPU總線(xiàn)控制邏輯接口接口存儲(chǔ)器大容量存儲(chǔ)器I/O設(shè)備I/O子系統(tǒng)系統(tǒng)總線(xiàn)......軟件:系統(tǒng)軟件用戶(hù)軟件2.存儲(chǔ)器存儲(chǔ)單元的地址和內(nèi)容:

存儲(chǔ)器以字節(jié)(8bit)為編程單位

每個(gè)字節(jié)單元都有唯一的地址編碼

地址用無(wú)符號(hào)整數(shù)來(lái)表示(編程用十六進(jìn)制表示)

一個(gè)字要占用相繼的兩個(gè)字節(jié)

低位字節(jié)存入低地址,高位字節(jié)存入高地址

字單元地址用它的低地址來(lái)表示

機(jī)器以偶地址訪(fǎng)問(wèn)(讀/寫(xiě))存儲(chǔ)器存儲(chǔ)器的邏輯地址與物理地址100111110010011001001000邏輯地址段地址:偏移地址1000:0000H1000:0001H1000:0002H1000:0003H1000:0004H1000:0005H

物理地址10000H10001H10002H10003H10004H10005H100000110101110010100010字節(jié)內(nèi)容(10000H)=9FH;(10001H)=26H字內(nèi)容(10000H)=269FH;(10001H)=4826H訪(fǎng)問(wèn)兩次內(nèi)存存儲(chǔ)器的分段:20根地址線(xiàn):地址范圍

00000H~FFFFFH(1MB)機(jī)器字長(zhǎng)16位:僅能表示地址范圍0000H~FFFFH (64KB)小段:每16個(gè)字節(jié)為一小段,共有64K個(gè)小段

小段的首地址

00000H~0000FH00010H~0001FH00020H~0002FH…FFFF0H~FFFFFH

段起始地址:小段首地址段的大?。?4K范圍內(nèi)的任意字節(jié)存儲(chǔ)器的邏輯分段:

存儲(chǔ)器64KB代碼01500H42000H1CD00H0150H4200H1CD0H段寄存器CSDSSSES64KB堆棧64KB數(shù)據(jù)64KB附加數(shù)據(jù)B0000HB000H

存儲(chǔ)器8KB代碼2KB數(shù)據(jù)256堆棧02000H04800H04000H0200H0400H0480HCSDSSS優(yōu)點(diǎn):允許程序在存儲(chǔ)器內(nèi)重定位;允許實(shí)模式程序在保護(hù)模式下運(yùn)行;有利于程序和數(shù)據(jù)的分離。物理地址=16

段地址+偏移地址16位段地址16位偏移地址0000+20位物理地址例:(DS)=2100H,(BX)=0500H(PA)=21000H+0500H=21500H3.中央處理器8086/8088寄存器組:數(shù)據(jù)寄存器:指針及變址寄存器:SP、BP、SI、DI段寄存器:CS、DS、SS、ES控制寄存器:IP、FLAGSCPU組成:算術(shù)邏輯部件ALU、控制器、寄存器AXBXCXDXAHALBHBLCHCLDHDL

高8位低8位標(biāo)志寄存器(FLAGS/PSW)1514131211109876543210

條件碼標(biāo)志:控制標(biāo)志:OF溢出標(biāo)志DF方向標(biāo)志SF符號(hào)標(biāo)志IF中斷標(biāo)志ZF零標(biāo)志TF陷阱標(biāo)志CF進(jìn)位標(biāo)志AF輔助進(jìn)位標(biāo)志PF奇偶標(biāo)志OFDFIFTFSFZFAFPFCF例:ADDAX,BXJO/JCERROR?

寄存器與存儲(chǔ)器的比較:寄存器存儲(chǔ)器

在CPU內(nèi)部在CPU外部訪(fǎng)問(wèn)速度快訪(fǎng)問(wèn)速度慢容量小,成本高容量大,成本低用名字表示用地址表示沒(méi)有地址地址可用各種方式形成4.外部設(shè)備

外部設(shè)備與主機(jī)(CPU和存儲(chǔ)器)的通信是通過(guò)外設(shè)接口(Interface)進(jìn)行的,每個(gè)接口包括一組寄存器。數(shù)據(jù)寄存器:存放外設(shè)和主機(jī)間傳送的數(shù)據(jù)狀態(tài)寄存器:保存外設(shè)或接口的狀態(tài)信息命令寄存器:保存CPU發(fā)給外設(shè)或接口的控制命令外設(shè)中每個(gè)寄存器有一個(gè)端口(Port)地址,構(gòu)成一個(gè)獨(dú)立于內(nèi)存的I/O地址空間:0000H~FFFFH80x86的寄存器結(jié)構(gòu)80x86的程序可見(jiàn)寄存器組通用寄存器專(zhuān)用寄存器段寄存器

AHAXALBHBXBLCHCXCLDHDXDLSPBP

SIDI

IPFLAGSCSDSSSES8086/8088/80286

寄存器EAXEBXECXEDXESPEBPESIEDIEIPEFLAGS

FSGS311615870OFDFIFTFSFZF

AF

PF

CF

8086/8088OFDFIFTFSFZF

AF

PF

CF

IOPLNT80286

RF

OFDFIFTFSFZF

AF

PF

CF

IOPLNTVM80386

RF

OFDFIFTFSFZF

AF

PF

CF

IOPLNTVMAC80486

RF

OFDFIFTFSFZF

AF

PF

CF

IOPLNTVMACIDVIPVIF313029282726252423222120191817161514131211109876543210Pentium80x86的標(biāo)志寄存器

(P.23)IOPL:I/O特權(quán)級(jí)VIP:虛擬中斷未決標(biāo)志

NT:嵌套任務(wù)標(biāo)志

VIF:虛擬中斷標(biāo)志

RF:重新啟動(dòng)標(biāo)志VM:虛擬8086模式位

AC:對(duì)準(zhǔn)檢查方式位

ID:標(biāo)識(shí)標(biāo)志

支持多任務(wù)處理功能支持虛擬存儲(chǔ)器特性

保護(hù)模式下的80x86保護(hù)模式下的存儲(chǔ)器尋址

所選存儲(chǔ)單元

描述符64描述符表所選段存儲(chǔ)器段基地址32選擇器16偏移地址32邏輯地址第2章作業(yè)Page332.1~2.52.1在8086微機(jī)的輸入/輸出指令中,I/O端口號(hào)通常是由DX寄存器提供的,但有時(shí)也可以在指令中直接指定00~FFH的端口號(hào)。試問(wèn)可直接由指令指定的I/O端口數(shù)。

在16進(jìn)制中FF為255。而0到255有256個(gè)數(shù)。在80X86中端口號(hào)在256內(nèi)的就是不通過(guò)DX寄存器。所以可直接由指令指定的I/O端口數(shù)為256。2.2有兩個(gè)16位字1EE5H和2A3CH分別存放在8086微機(jī)的存儲(chǔ)器的000B0H和000B3H單元中,請(qǐng)用圖表示出它們?cè)诖鎯?chǔ)器里的存放情況。

2.38086微機(jī)的存儲(chǔ)器中存放信息如下圖所示。試讀出30022H和30024H字節(jié)單元的內(nèi)容,以及30021H和30022H字單元的內(nèi)容。字節(jié)單元:(30022H)=ABH,(30024H)=EFH

字單元:(30021H)=AB34H,(30022H)=CDABH。

2.4在實(shí)模式下,段地址和偏移地址為3017:000A的存儲(chǔ)單元的物理地址是什么?如果段地址和偏移地址是3015:002A和3010:007A呢?

3017:000A的存儲(chǔ)單元的物理地址是3017AH,

3015:002A的存儲(chǔ)單元的物理地址是3017AH,

3010:007A的存儲(chǔ)單元的物理地址是3017AH。

1.8086的尋址方式

與數(shù)據(jù)有關(guān)的尋址方式:以MOV

指令為例立即尋址MOVAX,3069H寄存器尋址MOVAL,BH直接尋址MOVAX,[2000H]寄存器間接尋址MOVAX,[BX]

寄存器相對(duì)尋址MOVAX,COUNT[SI]

基址變址尋址MOVAX,[BP][DI]相對(duì)基址變址尋址MOVAX,MASK[BX][SI]存儲(chǔ)器尋址(1)立即尋址方式*——操作數(shù)在指令中給出指令格式:MOVAL,5MOVAX,3064HMOVAL,‘A’*

只能用于

SRC字段

MOV40H,AL

*SRC和DST的字長(zhǎng)一致

MOVAH,3064H

(2)寄存器尋址方式*—操作數(shù)在指定的寄存器中

MOVAX,BXMOVAL,BHMOVAX,3064H*

字節(jié)寄存器只有

AHALBHBLCHCLDHDL*SRC和DST的字長(zhǎng)一致

MOVAH,BX

*

CS不能用

MOV指令改變

MOVCS,AX

(3)直接尋址方式*—有效地址EA由指令直接給出

例:MOVAX,[2000H]

EA=2000H,假設(shè)(DS)=3000H,那么PA=32000H*

隱含的段為數(shù)據(jù)段DS*

可使用段跨越前綴

MOVAX,ES:[2000H]*

操作數(shù)地址可由變量(符號(hào)地址)表示,但要注意VALUEDB10變量的屬性MOVAH,VALUE

MOVAX,VALUE

MOVAX,WORDPTRVALUE

(WORDPTR是字操作符,以后詳細(xì)講)5030

32000AHAL3050(AX)=3050H寄存器間接尋址*—EA在基址寄存器(BX/BP)

或變址寄存器(SI/DI)中

MOVAX,[BX]PA=16d(DS)+(BX)MOVAX,ES:[BX]PA=16d(ES)+(BX)MOVAX,[BP]PA=16d(SS)+(BP)*不允許使用AX、CX、DX存放EAMOVAX,[CX]

*

SRC和DST的字長(zhǎng)一致

MOVDL,[BX];[BX]指示一個(gè)字節(jié)單元

MOVDX,[BX];[BX]指示一個(gè)字單元

*

適于數(shù)組、字符串、表格的處理

有效地址=(BX)(BP)8位(SI)16位(DI)+位移量(5)寄存器相對(duì)尋址方式*

指令格式:MOVAX,COUNT[SI]或

MOVAX,[COUNT+SI]

假設(shè)(DS)=3000H,(SI)=2000H,COUNT=3000H,

則:PA=35000H

假設(shè)(35000H)=1234H,那么(AX)=1234H*適于數(shù)組、字符串、表格的處理(6)基址變址尋址方式*指令格式:

MOVAX,[BX][DI]MOVAX,[BX+DI]MOVAX,ES:[BX][SI]*適于數(shù)組、字符串、表格的處理*必須是一個(gè)基址寄存器和一個(gè)變址寄存器的組合

MOVAX,[BX][BP]

MOVAX,[SI][DI]

有效地址=(BX)(SI)(BP)(DI)+(7)相對(duì)基址變址尋址方式

MOVAX,MASK[BX][SI]

MOVAX,MASK[BX+SI]

或MOVAX,[MASK+BX+SI]

有效地址=(BX)(SI)8位(BP)(DI)16位++位移量訪(fǎng)問(wèn)存儲(chǔ)器的方式

默認(rèn)的段寄存器可跨越的段寄存器偏移地址取指令

CS無(wú)IP堆棧操作

SS無(wú)SP一般數(shù)據(jù)訪(fǎng)問(wèn)

DSCSESSS有效地址EABP作為基址的尋址

SSCSDSESBP串操作的源操作數(shù)

DSCSESSSSI串操作的目的操作數(shù)

ES無(wú)DI段寄存器的使用規(guī)定例:編寫(xiě)一段顯示字符串STRING的程序

DATASEGMENTSTRINGDB‘HAPPYNEWYEAR!’,0DH,0AH,‘$’COUNTDW17DATAENDS(1)直接尋址

movdl,stringmovah,2int21h;顯示字符‘H’movdl,string+1movah,2int21h;顯示字符‘A’::(2)寄存器間接尋址

movcx,count;movcx,17

movbx,offsetstring;string的偏址bxNext:movdl,[bx]movah,2int21h;顯示一個(gè)字符

incbxloopnext;循環(huán)指令(3)寄存器相對(duì)尋址

movcx,count;movcx,17

movsi,0Next:movdl,string[si];movdl,[string+si]

movah,2int21h;顯示一個(gè)字符

incsiloopnext;循環(huán)指令(4)基址變址尋址

movcx,count;movcx,17

movbx,offsetstring;string的偏址bxmovsi,0Next:movdl,[bx][si];movdl,[bx+si]

movah,2int21h;顯示一個(gè)字符

incsiloopnext;循環(huán)指令(5)DOS顯示字符串功能

movdx,offsetstring;string的偏址dx

;leadx,stringmovah,9int21h;顯示一串字符80x86新增的尋址方式EA=(基址寄存器)+(變址寄存器)

比例因子+位移量(1)比例變址尋址方式

例:MOVEAX,COUNT[ESI

4]注意E它是后加的一個(gè)標(biāo)志(2)基址比例變址尋址方式

例:MOVECX,[EAX][EDI

4]

(3)相對(duì)基址比例變址尋址方式

例:MOVEAX,TABLE[EBP][EDI

4]▲16位和32位尋址的差異地址成分16位尋址32位尋址基址寄存器BX、BP任何32位通用寄存器變址寄存器SI、DI除ESP外的任何32位通用寄存器比例因子11、2、4、8與轉(zhuǎn)移地址有關(guān)的尋址方式:

段內(nèi)尋址段內(nèi)直接尋址JMPNEARPTRNEXT

段內(nèi)間接尋址JMPTABLE[BX]

段間尋址

段間直接尋址JMPFARPTRNEXT

段間間接尋址JMPDWORDPTR[BX]用來(lái)確定轉(zhuǎn)移指令及轉(zhuǎn)子指令的轉(zhuǎn)向地址。(1)段內(nèi)直接尋址轉(zhuǎn)向的有效地址=當(dāng)前(IP)+位移量(8bit/16bit)

例:JMPNEARPTRNEXT近轉(zhuǎn)移-32768~+32767

JMPSHORTNEXT

短轉(zhuǎn)移-128~+127

(2)段內(nèi)間接尋址

轉(zhuǎn)向的有效地址是一個(gè)寄存器或存儲(chǔ)單元的內(nèi)容。(可用除立即數(shù)以外的任何一種數(shù)據(jù)尋址方式得到)例:TABLE=20A2H(BX)=1256H(SI)=528EH(DS)=2000H(232F8H)=3280H(264E4H)=2450H

JMPBX;(IP)=1256H

JMPTABLE[BX]JMPWORDPTRTABLE[BX];(IP)=3280H

JMP[BX][SI]JMPWORDPTR[BX][SI];(IP)=2450Hcode1segment

……jmpfarptrnext

……code1endscode2segment

……next:…...

……code2ends(3)段間直接尋址

用指令中提供的轉(zhuǎn)向段地址和偏移地址取代CS和IP

例:(4)段間間接尋址

用存儲(chǔ)器中的兩個(gè)相繼字的內(nèi)容取代CS和IP

(存儲(chǔ)單元的地址可用存儲(chǔ)器尋址方式得到)

例:

JMPDWORDPTR[INTERS+BX]

PA=(DS)×24+(BX)+INTERS(PA+1,PA)→IP(PA+3,PA+2)→CS第3章練習(xí)Page107

3.13.33.53.73.113.133.1設(shè)(BX)=637DH,(SI)=2A9BH,位移量D=7237H,試確定在以下各種尋址方式下的有效地址是什么?

(1)立即尋址。

直接將數(shù)送到指定的內(nèi)存單元或者是寄存器

(2)直接尋址。

d

(3)使用BX的寄存器尋址。

通用寄存器bx的編碼地址

(4)使用BX的間接尋址。

地址是(bx),

(5)使用BX的寄存器相對(duì)尋址。

地址是(bx)+d

(6)基址變址尋址。

(bx)+(si)

(7)相對(duì)基址變址尋址。

(bx)+(si)+d

(1)立即尋址。

沒(méi)有有效地址

(2)直接尋址。

D

7237H

(3)使用BX的寄存器尋址。

bx中存放的是操作數(shù)沒(méi)有效地址

(4)使用BX的間接尋址。

BX

637DH

(5)使用BX的寄存器相對(duì)尋址。

bx+d

D5B4H

(6)基址變址尋址。

bX+si

8E18H

(7)相對(duì)基址變址尋址。

bx+si+d

004FH(有溢出)

不用知道DS

,需要求物理地址時(shí)才要。題目是求有效地址。

3.3寫(xiě)出首地址為BLOCK的字?jǐn)?shù)組的第六個(gè)字送到DX寄存器的指令,要求使用以下幾種尋址方式:

(1)寄存器間接尋址

(2)寄存器相對(duì)尋址

(3)基址變址尋址

(1)寄存器間接尋址

MOV

BX,OFFSET

BLOCK ADD

BX,OAH

MOV

DX

,[BX](2)寄存器相對(duì)尋址

MOV

BX,0AH

MOV

DX,BLOCK[BX](3)基址變址尋址

MOV

BX

,

OFFSET

BLOCK

MOV

SI,OAH MOV

DX,[BX][SI]3.5設(shè)(IP)=2BC0H,(CS)=0200H,位移量=5119H,(BX)=1200H,(DS)=212AH,(263B9)=089AH(275B9)=098AH試確定轉(zhuǎn)移指令(JMP)轉(zhuǎn)移的偏移地址(即CS=?,IP=?)(1)段內(nèi)直接尋址方式;(2)使用BX及寄存器間接尋址方式的段內(nèi)間接尋址;(3)使用BX及寄存器相對(duì)尋址方式的段內(nèi)間接尋址;

段內(nèi)直接尋址方式:

jmp

[5119]

CS=0200,IP=089A

使用BX及寄存器間接尋址方式的段內(nèi)間接尋址:

jmp

word

ptr

bx

CS=0200,IP=1200

使用BX及寄存器相對(duì)尋址方式的段內(nèi)間接尋址:

jmp

word

ptr

5119[bx]

CS=0200,IP=098A

注意:轉(zhuǎn)向的有效地址是一個(gè)寄存器或存儲(chǔ)單元的內(nèi)容。3.7在0624H單元內(nèi)有一條二字節(jié)JMPSHORTOBJ指令,如其中位移量為

(1)27H

(2)6BH

(3)0C6H

試問(wèn)轉(zhuǎn)向地址OBJ的值是多少?

(1)

064DH

(2)

0691H

(3)

06ECH

0624H加上JMP指令的長(zhǎng)度2作為跳轉(zhuǎn)基址,然后再加上位移量。

3.11執(zhí)行下列指令后,AX寄存器中的內(nèi)容是什么?TABLEDW10,20,30,40,50ENTRYDW3MOVBX,OFFSETTABLEADDBX,ENTRYMOVAX,[BX](AX)=403.13已知SS=0FFA0H,SP=00B0H,先執(zhí)行兩條把8057H和0F79H分別進(jìn)棧的PUSH指令,再執(zhí)行一條POP指令,試畫(huà)出堆棧區(qū)和SP內(nèi)容變化的過(guò)程示意圖。(標(biāo)出存儲(chǔ)單元的地址)

數(shù)據(jù)傳送指令

算術(shù)指令

邏輯指令

串處理指令

控制轉(zhuǎn)移指令

處理機(jī)控制與雜項(xiàng)操作指令2.8086的指令系統(tǒng)重點(diǎn)關(guān)注:指令的匯編格式指令的基本功能指令支持的尋址方式指令的執(zhí)行對(duì)標(biāo)志位的影響指令的特殊要求

數(shù)據(jù)傳送指令:

通用數(shù)據(jù)傳送指令

MOV、PUSH、POP、XCHG

累加器專(zhuān)用傳送指令

IN、OUT、XLAT

地址傳送指令

LEA、LDS、LES

標(biāo)志寄存器傳送指令

LAHF、SAHF、PUSHF、POPF

類(lèi)型轉(zhuǎn)換指令

CBW、CWD傳送指令:MOVDST,SRC執(zhí)行操作:(DST)(SRC)注意:*DST、SRC不能同時(shí)為段寄存器

MOVDS,ES

*立即數(shù)不能直接送段寄存器

MOVDS,2000H

*DST不能是立即數(shù)和CS*DST、SRC不能同時(shí)為存儲(chǔ)器尋址*不影響標(biāo)志位

通用數(shù)據(jù)傳送指令MOVAX,DSEGMOVDS,AX

進(jìn)棧指令:PUSHSRC

執(zhí)行操作:(SP)

(SP)–2((SP)+1,(SP))

(SRC)

出棧指令:POPDST

執(zhí)行操作:(DST)

((SP)+1,(SP)) (SP)

(SP)+2堆棧:‘先進(jìn)后出’的存儲(chǔ)區(qū),段地址存放在SS中,

SP在任何時(shí)候都指向棧頂,進(jìn)出棧后自動(dòng)修改SP。

注意:

*堆棧操作必須以字為單位。

*

不影響標(biāo)志位

*

不能用立即尋址方式

PUSH1234H

*DST不能是CSPOPCS

例:假設(shè)(AX)=2107H,執(zhí)行

PUSHAX********(SP)

PUSHAX執(zhí)行前(SP)

********07H21H低地址

高地址PUSHAX執(zhí)行后進(jìn)棧方向(SP)

********07H21HPOPBX執(zhí)行前(SP)

********07H21H低地址

高地址POPBX執(zhí)行后

(BX)=2107H例:POPBX出棧方向例:PUSHDSSUBAX,AXPUSHAX…………RET例:PUSHAXPUSHBXPUSHCX……;其間用到AX、BX、CXPOPCX;后進(jìn)先出

POPBXPOPAX

交換指令:XCHGOPR1,OPR2

執(zhí)行操作:(OPR1)

(OPR2)注意:

*不影響標(biāo)志位

*不允許使用段寄存器例:XCHGBX,[BP+SI]XCHGAL,BH

累加器專(zhuān)用傳送指令(只限使用AX或AL)

輸入指令I(lǐng)N(I/O

CPU)

長(zhǎng)格式:INAL,PORT(字節(jié))

INAX,PORT(字)執(zhí)行操作:(AL)

(PORT)(字節(jié))

(AX)

(PORT+1,PORT)(字)短格式:INAL,DX(字節(jié))

INAX,DX(字)執(zhí)行操作:(AL)((DX))(字節(jié))

(AX)((DX)+1,(DX))(字)

輸出指令OUT(CPU

I/O)長(zhǎng)格式:OUTPORT,AL(字節(jié))

OUTPORT,AX(字)執(zhí)行操作:(PORT)

(AL)(字節(jié))

(PORT+1,PORT)

(AX)(字)短格式:OUTDX,AL(字節(jié))

OUTDX,AX(字)執(zhí)行操作:((DX))

(AL)(字節(jié))

((DX)+1,(DX))

(AX)(字)注意:*

不影響標(biāo)志位*

前256個(gè)端口號(hào)00H~FFH可直接在指令中指定(長(zhǎng)格式)*

如果端口號(hào)

256,端口號(hào)

DX(短格式)例:INAX,28H MOVDATA_WORD,AX例:MOVDX,3FCHINAX,DX例:OUT5,AL例:測(cè)試某狀態(tài)寄存器(端口號(hào)27H)的第2位是否為1INAL,27HTESTAL,00000100BJNZERROR;若第2位為1,轉(zhuǎn)ERROR處理例:Sound程序

movdx,100inal,61handal,11111100bsound:xoral,2;101out61h,al;ONOFFONmovcx,140h;脈寬Wait1:loopwait1decdxjnesound設(shè)備控制寄存器端口61H1/00

控制其它外部設(shè)備與門(mén)放大器2號(hào)定時(shí)器門(mén)控10(BX)

30HF004031HF0041(AL)=332HF004233HF0043TABLE(DS)=F000H換碼指令:XLAT或XLATOPR執(zhí)行操作:(AL)

((BX)+(AL))例:MOVBX,OFFSETTABLE;(BX)=0040HMOVAL,3XLATTABLE

指令執(zhí)行后(AL)=33H注意:

*不影響標(biāo)志位*字節(jié)表格(長(zhǎng)度不超過(guò)256)

首地址

(BX)*需轉(zhuǎn)換的代碼位移量(AL)

地址傳送指令

有效地址送寄存器指令:LEAREG,SRC

執(zhí)行操作:(REG)

SRC

指針?biāo)图拇嫫骱虳S指令:LDSREG,SRC

執(zhí)行操作:

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論