版權(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年太陽(yáng)能光伏發(fā)電項(xiàng)目承包合同含設(shè)備供應(yīng)與電站運(yùn)維4篇
- 2025年度金融投資合作出資方合同模板3篇
- 智能家居中的嵌入式網(wǎng)絡(luò)通信技術(shù)
- 2025年度太陽(yáng)能光伏板維修保養(yǎng)及發(fā)電系統(tǒng)維護(hù)合同3篇
- 家庭式臥床病人個(gè)性化運(yùn)動(dòng)方案制定
- 2025版創(chuàng)新型校車(chē)租賃及智能監(jiān)控系統(tǒng)合同3篇
- 個(gè)人之間房地產(chǎn)買(mǎi)賣(mài)合同(2024版)3篇
- 二零二五年度食品代理銷(xiāo)售授權(quán)合同范本2篇
- 2025年度能源監(jiān)測(cè)設(shè)備采購(gòu)與數(shù)據(jù)分析合同3篇
- 2025年度數(shù)字化文檔儲(chǔ)藏室租賃與保密服務(wù)合同4篇
- 2024年供應(yīng)鏈安全培訓(xùn):深入剖析與應(yīng)用
- 飛鼠養(yǎng)殖技術(shù)指導(dǎo)
- 壞死性筋膜炎
- 整式的加減單元測(cè)試題6套
- 股權(quán)架構(gòu)完整
- 山東省泰安市2022年初中學(xué)業(yè)水平考試生物試題
- 注塑部質(zhì)量控制標(biāo)準(zhǔn)全套
- 銀行網(wǎng)點(diǎn)服務(wù)禮儀標(biāo)準(zhǔn)培訓(xùn)課件
- 二年級(jí)下冊(cè)數(shù)學(xué)教案 -《數(shù)一數(shù)(二)》 北師大版
- 晶體三極管資料
- 石群邱關(guān)源電路(第1至7單元)白底課件
評(píng)論
0/150
提交評(píng)論