IBM-PC匯編語言程序設計課件_第1頁
IBM-PC匯編語言程序設計課件_第2頁
IBM-PC匯編語言程序設計課件_第3頁
IBM-PC匯編語言程序設計課件_第4頁
IBM-PC匯編語言程序設計課件_第5頁
已閱讀5頁,還剩297頁未讀 繼續免費閱讀

VIP免費下載

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

IBM—PC匯編語言程序設計

計算機語言的發展機器語言FORTRANBASICCOBOLPASCALC/C++JAVA...匯編語言高級語言匯編語言的特點

面向機器的低級語言,通常是為特定的計算機或計算機系列專門設計的。保持了機器語言的優點,具有直接和簡捷的特點。可有效地訪問、控制計算機的各種硬件設備,

如磁盤、存儲器、CPU、I/O端口等。目標代碼簡短,占用內存少,執行速度快,是高效的程序設計語言。

經常與高級語言配合使用,應用十分廣泛。

#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;}

編程實現c=a+b,并在屏幕上顯示出結果。

例1編譯后的目標文件達到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匯編后的目標文件只有208字節匯編語言的應用系統程序、效率代碼、I/O驅動程序

70%以上的系統軟件是用匯編語言編寫的。某些快速處理、位處理、訪問硬件設備等高效程序是用匯編語言編寫的。高級繪圖程序、視頻游戲程序一般是用匯編語言編寫的。教師建議目標:●了解匯編語言的特性及其編程技術,●建立起“機器”和“程序”、“空間”和“時間”的概念。建議:●充分注意“匯編”課實踐性強的特點,●多讀程序,多寫程序,多上機調試程序,●熟悉PC機的編程結構,●掌握匯編語言及其程序設計的基本概念、方法和技巧。參考資料1.80X86匯編語言程序設計 沈美明溫冬嬋清華大學出版社2.IBMPC匯編語言與程序設計

PETERABEL編著 第4版清華大學出版社.PRENTICEHALL

第5版人民郵電出版社3.IBMPC匯編語言與程序設計例題習題集溫冬嬋沈美明清華大學出版社教學日歷:具體見《2007教學日歷》一緒論

數制

數制之間的轉換

數和字符的表示

運算二計算機組織

CPU存儲器

外部設備

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

BIOS和DOS調用

五上機過程

完整段定義和簡化段定義格式

偽操作六循環與分支程序設計

子程序結構

七高級匯編語言技術

I/O程序設計

八中斷程序設計

復習第1章基礎知識

數制

數制之間的轉換

運算

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

(Mega)1G=1024M=230(Giga)1個二進制位:bit(比特)8個二進制位:Byte(字節)1Byte=8bit2個字節:Word(字)

1Word=2Byte=16bit1.數制

數制基數數碼

二進制Binary20,1

八進制Octal80,1,2,3,4,5,6,7

十進制Decimal100,1,2,3,4,5,6,7,8,9

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

11012=1×23+1×22+1×20=1310十六進制:基數為16,逢十六進一

1001,0001,1000,01119187=9×163+1×162+8×161+7×1602.數制之間的轉換

二進制十六進制十進制二進制十進制十六進制降冪法除法

二進制十六進制

0011010110111111

35BF∴

0011,0101,1011,1111B=35BFH

A19C

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

1011B=23+21+20=11D

降冪法除法

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

∴27D=11011B

二進制十進制

十六進制十進制

BF3CH=11163+15162+3161+12160

=48956D

降冪法除法

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

18F

∴399D=18FH

算術運算

二進制數:逢二進一借一為二加法規則乘法規則

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

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

ABA

BABA

B

000000010011100101111111“非”運算(NOT)

“異或”運算(XOR)

A

A

ABA

B0100010

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

Y=?X=0000000011111111B

Y=0101010101010101B

Z=0101010110101010B

Z=55AAH4.數和字符的表示

計算機中正負數的表示

76543210符號位

數值位假設機器字長為16位:符號位=0正數

數值位

=

1負數1514131211109876543210假設機器字長為8位:H.O.ByteL.O.ByteH.O.NibbleL.O.Nibble數的常用表示法

——

原碼反碼補碼原碼表示法:符號+絕對值例:n=8bit[+3]原碼

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

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

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

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

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

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

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

=1111,1111=FFH0的表示不惟一例:機器字長8位,[-46]補碼=?[46]補碼=001011101101000111010010=D2H

機器字長16位,[-46]補碼=FFD2H

[+0]補碼=000000001111111100000000=[-0]補碼0的表示惟一按位求反末位加一按位求反末位加一補碼(Two’sComplement)表示法:正數的補碼:同原碼負數的補碼:(1)寫出與該負數相對應的正數的補碼

(2)按位求反

(3)末位加一

十進制二進制十六進制十進制十六進制

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

-2n-1≤N≤2n-1-1無符號整數的表數范圍:

0≤N≤2n-1補碼的加法和減法:求補運算

:對一個二進制數按位求反、末位加一

[X]補碼

[-X]補碼

[X]補碼加法規則:[X+Y]補碼

=[X]補碼

+[Y]補碼減法規則:[X-Y]補碼

=[X]補碼

+[-Y]補碼

補碼減法可轉換為補碼加法64(-46)18+010000001101001000010010+例:進位和溢出進位:由于運算結果超出了位數,最高有效位向前的進位,這一位自然丟失,一般不表示結果的對錯。溢出:表示結果超出了字長允許表示的范圍,一般會造成結果出錯。例:(-64)1100000012701111111

+6401000000+1000000010100000000128

10000000

進位溢出1.計算機系統硬件:中央處理機

CPU總線控制邏輯接口接口存儲器大容量存儲器I/O設備I/O子系統系統總線......軟件:系統軟件用戶軟件2.存儲器存儲單元的地址和內容:

存儲器以字節(8bit)為編程單位

每個字節單元都有唯一的地址編碼

地址用無符號整數來表示(編程用十六進制表示)

一個字要占用相繼的兩個字節

低位字節存入低地址,高位字節存入高地址

字單元地址用它的低地址來表示

機器以偶地址訪問(讀/寫)存儲器存儲器的邏輯地址與物理地址100111110010011001001000邏輯地址段地址:偏移地址1000:0000H1000:0001H1000:0002H1000:0003H1000:0004H1000:0005H

物理地址10000H10001H10002H10003H10004H10005H100000110101110010100010字節內容(10000H)=9FH;(10001H)=26H字內容(10000H)=269FH;(10001H)=4826H訪問兩次內存存儲器的分段:20根地址線:地址范圍

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

小段的首地址

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

段起始地址:小段首地址段的大小:64K范圍內的任意字節存儲器的邏輯分段:

存儲器64KB代碼01500H42000H1CD00H0150H4200H1CD0H段寄存器CSDSSSES64KB堆棧64KB數據64KB附加數據B0000HB000H

存儲器8KB代碼2KB數據256堆棧02000H04800H04000H0200H0400H0480HCSDSSS優點:允許程序在存儲器內重定位;允許實模式程序在保護模式下運行;有利于程序和數據的分離。物理地址=16

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

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

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

寄存器與存儲器的比較:寄存器存儲器

在CPU內部在CPU外部訪問速度快訪問速度慢容量小,成本高容量大,成本低用名字表示用地址表示沒有地址地址可用各種方式形成4.外部設備

外部設備與主機(CPU和存儲器)的通信是通過外設接口(Interface)進行的,每個接口包括一組寄存器。數據寄存器:存放外設和主機間傳送的數據狀態寄存器:保存外設或接口的狀態信息命令寄存器:保存CPU發給外設或接口的控制命令外設中每個寄存器有一個端口(Port)地址,構成一個獨立于內存的I/O地址空間:0000H~FFFFH80x86的寄存器結構80x86的程序可見寄存器組通用寄存器專用寄存器段寄存器

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的標志寄存器

(P.23)IOPL:I/O特權級VIP:虛擬中斷未決標志

NT:嵌套任務標志

VIF:虛擬中斷標志

RF:重新啟動標志VM:虛擬8086模式位

AC:對準檢查方式位

ID:標識標志

支持多任務處理功能支持虛擬存儲器特性

保護模式下的80x86保護模式下的存儲器尋址

所選存儲單元

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

在16進制中FF為255。而0到255有256個數。在80X86中端口號在256內的就是不通過DX寄存器。所以可直接由指令指定的I/O端口數為256。2.2有兩個16位字1EE5H和2A3CH分別存放在8086微機的存儲器的000B0H和000B3H單元中,請用圖表示出它們在存儲器里的存放情況。

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

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

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

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

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

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

1.8086的尋址方式

與數據有關的尋址方式:以MOV

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

寄存器相對尋址MOVAX,COUNT[SI]

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

只能用于

SRC字段

MOV40H,AL

*SRC和DST的字長一致

MOVAH,3064H

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

MOVAX,BXMOVAL,BHMOVAX,3064H*

字節寄存器只有

AHALBHBLCHCLDHDL*SRC和DST的字長一致

MOVAH,BX

*

CS不能用

MOV指令改變

MOVCS,AX

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

例:MOVAX,[2000H]

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

隱含的段為數據段DS*

可使用段跨越前綴

MOVAX,ES:[2000H]*

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

MOVAX,VALUE

MOVAX,WORDPTRVALUE

(WORDPTR是字操作符,以后詳細講)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的字長一致

MOVDL,[BX];[BX]指示一個字節單元

MOVDX,[BX];[BX]指示一個字單元

*

適于數組、字符串、表格的處理

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

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

MOVAX,[COUNT+SI]

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

則:PA=35000H

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

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

MOVAX,[BX][BP]

MOVAX,[SI][DI]

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

MOVAX,MASK[BX][SI]

MOVAX,MASK[BX+SI]

或MOVAX,[MASK+BX+SI]

有效地址=(BX)(SI)8位(BP)(DI)16位++位移量訪問存儲器的方式

默認的段寄存器可跨越的段寄存器偏移地址取指令

CS無IP堆棧操作

SS無SP一般數據訪問

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

SSCSDSESBP串操作的源操作數

DSCSESSSSI串操作的目的操作數

ES無DI段寄存器的使用規定例:編寫一段顯示字符串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;顯示一個字符

incbxloopnext;循環指令(3)寄存器相對尋址

movcx,count;movcx,17

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

movah,2int21h;顯示一個字符

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

movcx,count;movcx,17

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

movah,2int21h;顯示一個字符

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

movdx,offsetstring;string的偏址dx

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

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

例:MOVEAX,COUNT[ESI

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

例:MOVECX,[EAX][EDI

4]

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

例:MOVEAX,TABLE[EBP][EDI

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

段內尋址段內直接尋址JMPNEARPTRNEXT

段內間接尋址JMPTABLE[BX]

段間尋址

段間直接尋址JMPFARPTRNEXT

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

例:JMPNEARPTRNEXT近轉移-32768~+32767

JMPSHORTNEXT

短轉移-128~+127

(2)段內間接尋址

轉向的有效地址是一個寄存器或存儲單元的內容。(可用除立即數以外的任何一種數據尋址方式得到)例: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)段間直接尋址

用指令中提供的轉向段地址和偏移地址取代CS和IP

例:(4)段間間接尋址

用存儲器中的兩個相繼字的內容取代CS和IP

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

例:

JMPDWORDPTR[INTERS+BX]

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

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

(1)立即尋址。

直接將數送到指定的內存單元或者是寄存器

(2)直接尋址。

d

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

通用寄存器bx的編碼地址

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

地址是(bx),

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

地址是(bx)+d

(6)基址變址尋址。

(bx)+(si)

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

(bx)+(si)+d

(1)立即尋址。

沒有有效地址

(2)直接尋址。

D

7237H

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

bx中存放的是操作數沒有效地址

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

BX

637DH

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

bx+d

D5B4H

(6)基址變址尋址。

bX+si

8E18H

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

bx+si+d

004FH(有溢出)

不用知道DS

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

3.3寫出首地址為BLOCK的字數組的第六個字送到DX寄存器的指令,要求使用以下幾種尋址方式:

(1)寄存器間接尋址

(2)寄存器相對尋址

(3)基址變址尋址

(1)寄存器間接尋址

MOV

BX,OFFSET

BLOCK ADD

BX,OAH

MOV

DX

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

MOV

BX,0AH

MOV

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

MOV

BX

,

OFFSET

BLOCK

MOV

SI,OAH MOV

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

段內直接尋址方式:

jmp

[5119]

CS=0200,IP=089A

使用BX及寄存器間接尋址方式的段內間接尋址:

jmp

word

ptr

bx

CS=0200,IP=1200

使用BX及寄存器相對尋址方式的段內間接尋址:

jmp

word

ptr

5119[bx]

CS=0200,IP=098A

注意:轉向的有效地址是一個寄存器或存儲單元的內容。3.7在0624H單元內有一條二字節JMPSHORTOBJ指令,如其中位移量為

(1)27H

(2)6BH

(3)0C6H

試問轉向地址OBJ的值是多少?

(1)

064DH

(2)

0691H

(3)

06ECH

0624H加上JMP指令的長度2作為跳轉基址,然后再加上位移量。

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

數據傳送指令

算術指令

邏輯指令

串處理指令

控制轉移指令

處理機控制與雜項操作指令2.8086的指令系統重點關注:指令的匯編格式指令的基本功能指令支持的尋址方式指令的執行對標志位的影響指令的特殊要求

數據傳送指令:

通用數據傳送指令

MOV、PUSH、POP、XCHG

累加器專用傳送指令

IN、OUT、XLAT

地址傳送指令

LEA、LDS、LES

標志寄存器傳送指令

LAHF、SAHF、PUSHF、POPF

類型轉換指令

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

MOVDS,ES

*立即數不能直接送段寄存器

MOVDS,2000H

*DST不能是立即數和CS*DST、SRC不能同時為存儲器尋址*不影響標志位

通用數據傳送指令MOVAX,DSEGMOVDS,AX

進棧指令:PUSHSRC

執行操作:(SP)

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

(SRC)

出棧指令:POPDST

執行操作:(DST)

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

(SP)+2堆棧:‘先進后出’的存儲區,段地址存放在SS中,

SP在任何時候都指向棧頂,進出棧后自動修改SP。

注意:

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

*

不影響標志位

*

不能用立即尋址方式

PUSH1234H

*DST不能是CSPOPCS

例:假設(AX)=2107H,執行

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

PUSHAX執行前(SP)

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

高地址PUSHAX執行后進棧方向(SP)

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

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

高地址POPBX執行后

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

POPBXPOPAX

交換指令:XCHGOPR1,OPR2

執行操作:(OPR1)

(OPR2)注意:

*不影響標志位

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

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

輸入指令IN(I/O

CPU)

長格式:INAL,PORT(字節)

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

(PORT)(字節)

(AX)

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

INAX,DX(字)執行操作:(AL)((DX))(字節)

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

輸出指令OUT(CPU

I/O)長格式:OUTPORT,AL(字節)

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

(AL)(字節)

(PORT+1,PORT)

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

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

(AL)(字節)

((DX)+1,(DX))

(AX)(字)注意:*

不影響標志位*

前256個端口號00H~FFH可直接在指令中指定(長格式)*

如果端口號

256,端口號

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

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

控制其它外部設備與門放大器2號定時器門控10(BX)

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

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

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

*不影響標志位*字節表格(長度不超過256)

首地址

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

地址傳送指令

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

執行操作:(REG)

SRC

指針送寄存器和DS指令:LDSREG,SRC

執行操作:

溫馨提示

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

評論

0/150

提交評論