第1章 匯編語言基礎知識_第1頁
第1章 匯編語言基礎知識_第2頁
第1章 匯編語言基礎知識_第3頁
第1章 匯編語言基礎知識_第4頁
第1章 匯編語言基礎知識_第5頁
已閱讀5頁,還剩114頁未讀 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

教學重點

第1章是用匯編語言進行程序設

計所需要了解的基本知識。在課

堂上,我們重點掌握幾個內(nèi)容:

/PC機軟硬件系統(tǒng)

/認識匯編語言

,基礎是熟悉寄存器組

,難點是各種尋址方式

non

第1工.?1.1計算機系統(tǒng)概述

硬件(Hardware)

■中央處理單元CPU

■控制器、運算器、寄存器

■存儲器

■主存儲器:RAM和ROM

■輔助存儲器:磁盤、光盤、U盤

■外部設備

■輸入設備和輸出設備

A軟件(Software)

■系統(tǒng)軟件

■應用軟件

第1章微型計算機的系統(tǒng)組成

系統(tǒng)總線

CPU

運算器…;

控制需;

‘寄存器:

第1章匯編語言程序員看到的硬件

手■J

■?中央處理單元CPU(Intel80x86)

對匯編語言程序員,最關心其中的寄存器

A存儲器(主存儲器)

呈現(xiàn)給匯編語言程序員的,是存儲器地址

A外部設備(接口電路)

匯編語言程序員看到的是端口(I/O地址)

第1匕■■寄存器(Register)

??寄存器是CPU內(nèi)部的高速存儲單元

>它們?yōu)樘幚砥魈峁└鞣N操作所需要的數(shù)據(jù)或

地址等信息

>匯編語言程序采用它們各自的符號名

■16位Intel8086/80286CPU中有

AXBXCXDX

SIDIBPSP

■32位80386/80486/Pentium系歹UCPU中有

EAXEBXECXEDX

ESIEDIEBPESP

第1匕.?存儲器地址(Address)

?存儲器是由大量存儲單元組成,需要用編號

區(qū)別每個單元:編號=地址

>存儲器地址是存儲器中存儲單元的編號

>每個存儲單元存放一個字節(jié)量的數(shù)據(jù)

■一個字節(jié)B(Byte)=8個二進制位b(bit)

>采用十六進制數(shù)來表達地址

■Intel8086具有1兆字節(jié)(1MB)存儲器容量

■存儲器地址表示為:00000H?FFFFFH

■其中大寫H(或小寫h)表示是十六進制數(shù)

第1工■■端口(Port)

l?l/o接口電路由接口寄存器組成,需要用編

號區(qū)別各個寄存器:編號=地址

>I/O地址是接口電路中寄存器的編號

A端口是I/O地址的通俗說法

>系統(tǒng)通過這些端口與外設進行通信

A采用十六進制數(shù)來表達端口

■Intel8086支持64K個8位端口

■I/O地址可以表示為:0000H?FFFFH

第1章計算機的程序設計語言

手■J

■?機器語言(MachineLanguage)

B86400050001

A匯編語言(AssemblyLanguage)

movaxJOO

;取得一個數(shù)據(jù)100(MOV是傳送指令)

addax,256

;實現(xiàn)100+256(ADD是加法指令)

A高級語言(High-levelLanguage)

100+256

E第I"以上匕:符形式表什示么計是匯算編機語指言令‘

■助記符(mnemonic)是便于人們記憶、并能

描述指令功能和指令操作數(shù)的符號

■助記符是表明指令功能的英語單詞或其縮寫

A匯編格式指令以及使用它們編寫程序的規(guī)則

就形成匯編語言(AssemblyLanguage)

A匯編語言程序:用匯編語言書寫的程序

A匯編程序:將匯編語言程序“匯編”成機器

代碼目標模塊的程序

行匯編語言程序與匯編程序是兩個概念

第匯編語言和高級語言的比較-1

A匯編語言與處理器密切相關

X匯編語言程序的通用性、可移植性較差

>高級語言與具體計算機無關

/高級語言程序是標準化語言,可在多種

計算機上編譯后執(zhí)行

匯編語言:XIWJ級語言:N

士??匯編語言和高級語言的比較-2

A匯編語言功能有限、涉及硬件細節(jié)

\程序編寫比較繁瑣,調(diào)試比較困難

?高級語言提供了強大的功能,不必

關心瑣碎問題

/類似自然語言的語法,易于掌握和應

匯編語言:XIWJ級語言:7

第1工上匯編語言和高級語言的比較-3

■7匯編語言本質(zhì)上就是機器語言

/可以直接、有效地控制計算機硬件

/易于產(chǎn)生速度快、容量小的高效率目標

程序

>高級語言不針對具體計算機系統(tǒng)

\不易直接控制計算機的各種操作

'目標程序比較龐大、運行速度較慢

匯編語言:N高級語言:x

第1匕.?匯編語言的特點

■7匯編語言的優(yōu)點:

■直接控制計算機硬件部件

■編寫“時間”和“空間”兩方面最有效程

A匯編語言的缺點:

■與處理器密切有關

■需要熟悉計算機硬件系統(tǒng)、考慮許多細節(jié)

■編寫繁瑣調(diào)試、維擰、交流和移植困難

匯編語言:?高級語言:?

乙戛小匯編語言和高級語言的混合編程

r匯曝語言的優(yōu)點使得它在程贏計中占有重

要的位置,不可被取代

?匯編語言的缺點使得人們主要采用高級語言

進行程序開發(fā)工作

?有時需要采用高級語言和匯編語言混合編程,

互相取長補短,更好地解決實際問題

混合編程取長補短

第1匕上匯編語言的應用場合

程序要具有較快的執(zhí)行時間,或者只能占用

較小的存儲容量

?程序與計算機硬件密切相關,程序要直接、

有效地控制硬件

A*9匯編語言的作用實在不?。。?/p>

A城有合適的高級語言、或只能米用匯編語言

的時候

?分析具體系統(tǒng)尤其是該系統(tǒng)的低層軟件、加

密解密軟件、分析和防治計算機病毒等等

第1匕.?1.2數(shù)據(jù)表示

跳過

>1.2.1數(shù)缶I]

■二進制數(shù)、十六進制數(shù)

■它們與十進制數(shù)的相互轉(zhuǎn)換

>1.2.2編碼

■BCD碼和ASCH碼的規(guī)律

>1.2.3有符號數(shù)的表示法

■有符號整數(shù)的補碼表示

>1.2.4二進制運算

■二進制的算術運算和邏輯運算

■十進制的加減運算

第1章二進制數(shù)

>便于計算機存儲及物理實現(xiàn)

?特點:逢二進一,由0和1兩個數(shù)碼組成,基

數(shù)為2,各個位權以2k表示

A二進制數(shù):

???a1a0?b2???bm

n

anX2+an_1X2n」+…+a[X21+a()X2°

12m

+b1X2-+b2X2-+...+bmX2'

其中如與非0即1

第十六進制數(shù)

—h—

用于表達二進制數(shù),相互轉(zhuǎn)換簡單

A基數(shù)16,逢16進位,位權為16與16個數(shù)碼:

0,1,2,3,4,5,6,7,8,9

A,B,C,D,E,F

?十六進制數(shù):

?n?n-1■■。2,?,bm—

anXl6n+an.iXl6ni+.??+aiXl6i+a0xi60

+b1Xl6-i+b2X16-2+.BB+bmXl6-m

其中5,bj是。?F中的一個數(shù)碼

新匕■■十進制整數(shù)轉(zhuǎn)換為二或十六進制數(shù)

演示

整數(shù)部分轉(zhuǎn)換:用除法

■十進制數(shù)整數(shù)部分不斷除以基數(shù)2或16,并記下

余數(shù),直到商為0為止

■由最后一個余數(shù)起逆向取各個余數(shù),則為轉(zhuǎn)換

成的二進制和十六進制數(shù)

126=01111110B

126=7EH

第十進制小數(shù)轉(zhuǎn)換為二或十六進制數(shù)

K小數(shù)部分轉(zhuǎn)換:用乘法演示

■分別乘以各自的基數(shù),記錄整數(shù)部分,直到小

數(shù)部分為o為止

0.8125=0.1101

0.8125=0.DH

>小數(shù)轉(zhuǎn)換會發(fā)生總是無法乘到為0的情況

■可選取一定位數(shù)(精度)

■將產(chǎn)生無法避免的轉(zhuǎn)換誤差

第I工十二或十六進制數(shù)轉(zhuǎn)換為十進制數(shù)

方法:按權展開

?二進制數(shù)轉(zhuǎn)換為十進制數(shù)

0011.1010B二進制數(shù)用后綴字母B

=1X21+1X2°+1X2-1+0X2-2+1X2-3

=3.625

>十六進制數(shù)轉(zhuǎn)換為十進制數(shù)

1.2H|十六進制綴字母H

=1X16°+2X16-1

=1.125

BCD石馬(BinaryCodedDecimal)

?二進制編碼的十進制數(shù)

■一個十進制數(shù)位。?9用4位二進制編碼來表示

■常用8421BCD碼:低10個4位二進制編碼表示

■壓縮BCD碼:一個字節(jié)表達兩位BCD碼

■非壓縮BCD碼:一個字節(jié)表達一位BCD碼(低

4位表達數(shù)值,高4位常設置為0)

ABCD碼彳艮直觀

BCD碼:0100100101111000.000101001001

十進制真值:4978.149

CD碼便于輸入輸出,表達數(shù)值準確

第1章ASCII碼(美國標準信息交換碼)

上二進制編碼,有儂個

A不可顯示的控制字符

前32個和最后一個編碼

回車CR:ODH換行LF:OAH響鈴BEL:07H

A可顯示和打印的字符:20H后的94個編碼

■數(shù)碼0?9:30H?39H

■大寫字母A?乙41H?5AH

■小寫字母a?z:61H?7AH

■空格:20H

A擴展ASCH碼:最高D7位為1,表達制表符

第1章真值和機器數(shù)

?真值:現(xiàn)實中真實的數(shù)值

A機器數(shù):計算機中用0和1數(shù)碼組合表達的數(shù)值

?無符號數(shù):只表達0和正整數(shù)的定點整數(shù)

A有符號數(shù):表達負整數(shù)、0和正整數(shù)的定點整數(shù)

■符號位需要占用一個位

■常用機器數(shù)的最高位

■0表示正數(shù)、1表示負數(shù)

?定點數(shù):固定小數(shù)點的位置表達數(shù)值的機器數(shù)

■定點整數(shù):將小數(shù)點固定在機器數(shù)的最右側(cè)表達的整數(shù)

■定點小數(shù):將小數(shù)點固定在機器數(shù)的最左側(cè)表達的小數(shù)

A浮點數(shù):小數(shù)點浮動表達的實數(shù)

第1章」A補碼

演示

>有符號整數(shù)在計算機中默認采用補碼

■最高位表示符號:正數(shù)用0,負數(shù)用1

■正數(shù)補碼:直接表示數(shù)值大?。ㄍ瑹o符號數(shù))

■負數(shù)補碼:將對應正數(shù)補碼取反加1

[105]補碼=01101001B

為什么是補碼:

[」05]補碼=[01101001B]取反+1/.....????...X\

£1\/\

7

=10010110B+1=10010111\/

A8位二進制補碼表示的數(shù)值范圍:?128?+127

A16位二進制補碼表示的數(shù)值范圍:?215?+2但1

A32位二進制補碼表示的數(shù)值范圍:?231?+231-1

上??負數(shù)求補演示

W'=

?A負數(shù)真值“取反加1”得機器數(shù)補碼

A負數(shù)補碼“取反加1”得到負數(shù)真值

補碼:11100000B

真值:-([11100000]求反+1)=-(00011111+1)

=-00100000=-25=-32

A負數(shù)求補運算,等效于用帶借位的0作減法

真值:?8,補碼:卜8]補碼=00H?08H=F8H

補碼:11111000,真值:-(00H-F8H)=-08H=-8

用十六進制表達和運算,方便!

第1十六進制數(shù)的加減運算

P二::和十六;;數(shù)之間具有對應關系

■整數(shù)從左向右

■小數(shù)從右向左

■每4個二進制位對應一個十六進制位

00111010B=3AH,F2H=11110010B

>十六進制數(shù)的加減運算類似十進制

■逢16進位1,借1當16

23D9H+94BEH=B897H

A59FH-62H=42E7H

第1匕.?1.3Intel80x86系列微處理器

4004

第i匕一8086

A16位結構的微處理器:數(shù)據(jù)總線為16位

A主存容量1MB:地址總線為20位

>時鐘頻率5MHz(IBMPC使用4.77MHz)

A準16位微處理器8088:外部數(shù)據(jù)總線為8位

>IBMPC和PC/XT機使用Intel8088CPU

>8086的16位指令系統(tǒng):Intel80x86基本指令集

>80186/80188的核心是8086/8088,配以支持電路

A80186/80188指令系統(tǒng)比8086指令系統(tǒng)新增了若

干條實用的指令

■涉及堆棧操作、移位指令、輸入輸出指令、過程指令和

邊界檢測及乘法指令

第1匕.?80286

■?16位數(shù)據(jù)總線,24位地址總線(16MB主存)

A實方式(RealMode)

■與8086工作方式一樣

?保護方式(ProtectedMode)

■存儲管理、保護機制和多任務管理的硬件支持

>IBMPC/AT機使用Intel80286CPU

>80286指令系統(tǒng)新增15條保護方式指令

16位Intel80x86CPU:8086/80186/80286

32位Intel80x86CPU(IA-32微處理器):

80386,80486,Pentium系列

英特爾32位結構:IA?32(IntelArchitecture-32)

第1章80386

>32位結構

■數(shù)據(jù)總線32位,地址總線32位,尋址4GB主存

A虛擬8086方式(Virtual8086Mode)

■保護方式下的8086工作方式

>系統(tǒng)管理方式(SystemManagementMode)

■低功耗節(jié)能狀態(tài)

>80386指令系統(tǒng)全面升級為32位

■兼容原來16位指令系統(tǒng)

■新增有關位操作、條件設置指令以及對控制、

調(diào)試和測試寄存器的傳送指令等

第80486

>80486=80386+80387+8KBCache

>浮點處理單元FPU

■8086/8088:8087

■80286:80287

■80386:80387

>高速緩沖存儲器Cache

>復雜指令集計算機CISC融合精簡指令集計算機

RISC的技術特點

>80486指令系統(tǒng)新增用于多處理器和內(nèi)部Cache操

作的6條指令

第1章Pentium

亡俗工的80586微處理器,奔騰微處理器

A32位結構,連接主存的數(shù)據(jù)總線是64位

?超標量(Superscalar)技術

>Pentium指令系統(tǒng)新增

■一條8字節(jié)比較交換指令

■一條處理器識別指令

■4條系統(tǒng)專用指令

PentiumPro

A原稱P6,中文名稱為“高能奔騰”

A兩個芯片組成

A擴展的超標量技術

A動態(tài)執(zhí)行技術

>PentiumPro新增3條指令

p"■PentiumII

?A多媒體擴展指令(MMX指令)

■MMX(MutliMediaextension)

■整數(shù)運算多媒體指令

■優(yōu)化圖像、音頻、視頻和通信方面的程序進行

■提升微機對多媒體的處理能力

>PentiumMMX(多能奔騰):MMX指令應

用于Pentium處理器

>PentiumII:MMX指令應用于PentiumPro

■PentiumIII

士數(shù):流SIMD擴展指令(SSE指令)

■SSE(StreamingSIMDExtensions)pentlum#-

■浮點單精度多媒體運算指令

■提高浮點3D數(shù)據(jù)的處理能力。

■SSE指令類似于AMD公司發(fā)布的3DNow!指令

>PentiumIII:SSE指令應用于PentiumII

A單指令多數(shù)據(jù)SIMD

■SingleInstructionMultipleData

■表示一條指令具有同時處理多組數(shù)據(jù)的能力

第1章Pentium4

>NetBurst的微結構(Microarchitecture)

■進一步發(fā)掘指令之間可以同時執(zhí)行的能力

A超線程HT(HyperThreading)

■發(fā)掘程序中的并行性

■一個物理處理器形成兩個邏輯處理器

ASSE2指令

■增強浮點雙精度多媒體運算能力

ASSE3指令

■增強和完善MMX,SSE和SSE2指令

第i匕AIntel80x86微處理器

>Celeron(賽揚)微處理器

■面向低端(低價位)PC機

>Xeon(至強)微處理器

■面向高端服務器、工作站

>AMD微處理器

■AMD公司生產(chǎn)的IA-32微處理器兼容芯片

■Intel公司最主要的競爭對手

>雙核微處理器

■單芯片多處理器SMP技術

■Intel的PentiumD:單芯片雙Pentium4核心

>64位微處理器

■AMD的K8核心:兼容IA?32的64位微處理器

■Intel的EM64T(擴展64位技術):IA?32的64位擴展

,第?匕本匕上:采用16位1.或43P2C位微個型人計計算算機機

A16位PC機

■8088CPU的IBMPC和IBMPC/XT

■80286CPU的IBMPC/AT

■16位80x86CPU的PC兼容機

A32位PC機

■采用32位80x86CPU而形成的微機

■基本結構仍然源于PC/AT機

>人們?nèi)粘U務摰腜C機或微機是上述微型計

算機系統(tǒng)的統(tǒng)稱

主存空間的分配

FFFFFFFFH復制ROMH

^擴

1

?展

3

2

()位

00100000HHMA64KB

-UP

系統(tǒng)ROMMC

000E0000H128KBA機

P主

擴展ROM>GC

8存

4/

128KBX(

000C0000HKT4

B喜G

顯示RAM)B

)

128KB「

000A0000H(

I

常)

系統(tǒng)RAM>規(guī)

1主

640KB存

00000000H

第1匕.?PC機最低1MB主存

口「1

IA系統(tǒng)RAM區(qū)

■地址最低端的640KB空間

■由DOS進行管理

>顯示RAM區(qū)

■128KB主存空間保留給顯示緩沖存儲區(qū)

■顯示RAM區(qū)并沒有被完全使用

A擴展ROM區(qū)

■I/O接口電路卡上的ROM

A系統(tǒng)ROM區(qū)

■ROM-BIOS程序

口第1匕h.?微機的軟件

I》系統(tǒng)軟件:DOS平臺

■MS-DOS6.22實地址方式

■Windows的MS-DOS模擬環(huán)境

?應用軟件:開發(fā)匯編語言程序涉及

■文本編輯器

■匯編程序

■連接程序[?本教材提供一

■調(diào)試程序;DOS?MASM615.EXE

■集成化開發(fā)環(huán)境

第?工上文本編輯器(Editor)

■政文本編輯器用于編輯無任何格式的文檔

>程序設計要采用文本編輯器編寫源程序

A常見的文本編輯軟件有很多,如

■MS-DOS的EDIT全屏幕編輯器

■Windows的Notepad計事本

■程序開發(fā)系統(tǒng)中的程序編輯器

■TurboC

■VisualStudio

■MASM的PWB

比立■■匯編程序(Assembler)

?匯編程序?qū)R編語言源程序翻譯(稱為“匯

編”)成機器代碼目標模塊

A本課程采用微軟的MASM6.15

■MASM的最后一個獨立版本MASM6,11

■可免費升級為MASM6.14(支持SSE)

■VisualC++中有MASM6.15(支持SSE2)

■VisualC++.NET2003有MASM7.10

■VisualC++-NET2005的MASM支持Penium4

的SSE3指令系統(tǒng),同時有ML64EXE程序用于

支持64位指令系統(tǒng)

第1工.?連接程序(Linker)

勻I■」

■口連接程序?qū)R編后的目標模塊轉(zhuǎn)換為可執(zhí)行

程序

>每個程序開發(fā)環(huán)境都有連接程序

?連接程序的文件名通常是:LINK.EXE

A32位Windows連接程序不同于16位DOS連

接程序

源程序—目標模塊可執(zhí)行文件

.???.::

??????

文本編輯器匯編程序連接程序調(diào)試程序

調(diào)試程序(Debugger)

金調(diào)W程序進行程序排錯、分析等

>本課程采用MASM的CodeView

ADOS的DEBUG程序

A還有TurboDebugger等

潺程序丁目標模塊k可執(zhí)行京牛

文本編輯器匯編程序連接程序調(diào)試程序

第I匕上集成化開發(fā)環(huán)境

??進行程序設計使用的各種軟件的有機集合,

有文本編輯器,有語言翻譯程序,有連接程

序,還組合有調(diào)試程序等

>大型的程序設計項目往往要借助這種集成開

發(fā)環(huán)境,也就是軟件開發(fā)工具(包)

AMASM提供程序員工作平臺PWB

?微軟的VisualStudio開發(fā)系統(tǒng)

第i"■MASM編程環(huán)境的使用

口「1

■l.進入模擬DOS環(huán)境

2.將MASM目錄作為當前目錄

3.開發(fā)匯編語言程序

mlZFIfilename.asm

4.運行可執(zhí)行程序

5.調(diào)試可執(zhí)行程序

與定制進入MASM快捷方式ML615、

V創(chuàng)建快速開發(fā)文件MLLBAT

第1匕A1,58086微處理器

?微處理器是微機的硬件核心,主要包含指令

執(zhí)行的運算和控制部件,還有多種寄存器

?對程序員來說,微處理器抽象為以名稱存取

的寄存器

A8086內(nèi)部結構有兩個功能模塊,完成一條

指令的取指和執(zhí)行功能

?:?總線接口單元BIU:負責讀取指令和操作數(shù)

?:?執(zhí)行單元EU:負責指令譯碼和執(zhí)行

8086的內(nèi)部結構

通用寄存器

輸入/輸出一

控制電路

16位線

執(zhí)行部分

控制電路123456

指令隊列緩沖器

標志寄存器

執(zhí)行

執(zhí)行部件(EU)總線接口部件(BIU)

8086的寄存器組

r數(shù)懶存器

通用寄存器

變址寄存器

15

指針寄存器

CS代眄段寄存器

麟段寄存器

SS段寄存器

DS轆段寄存器

ES附加段寄存器

第1章8086的通用寄存器

A8086的16位通用寄存器是:

AXXCXDX

SIDIPSP

?其中前4個數(shù)據(jù)寄存器都還可以分成高8位和

低8位兩個獨立的寄存器

A8086的8位通用寄存器是:

AHHCHDH

ALLCLDL

?對其中某8位的操作,并不影響另外對應8位

的數(shù)據(jù)

第I匕1數(shù)據(jù)寄存器

尹「

數(shù)據(jù)寄存器用來存放計算的結果和操作數(shù),

也可以存放地址

>每個寄存器又有它們各自的專用目的

■AX——累加器,使用頻度最高,用于算術、邏

輯運算以及與外設傳送信息等;

■BX——基址寄存器,常用做存放存儲器地址;

■CX——計數(shù)器,作為循環(huán)和串操作等指令中的

隱含計數(shù)器;

■DX——數(shù)據(jù)寄存器,常用來存放雙字長數(shù)據(jù)的

高16位,或存放外設端口地址。

第■變址及指針寄存器

|>變址寄存器常用于存儲器尋址時提供地址

■SI是源變址寄存器

■DI是目的變址寄存器

>指針寄存器用于尋址內(nèi)存堆棧內(nèi)的數(shù)據(jù)

■SP為堆棧指針寄存器,指示棧頂?shù)钠频刂罚?/p>

不能再用于其他目的,具有專用目的

■BP為基址指針寄存器,表示數(shù)據(jù)在堆棧段中的

基地址

>SI和DI在串操作指令有特殊用法

>SP和BP寄存器與SS段寄存器聯(lián)合使用確定堆棧段

中的存儲單元地址

二匕堆棧(Stack)

r堆屋是主存中一個特殊的區(qū)丁

》它采用先進后出FILO(FirstInLastOut)

或后進先出LIFO(LastInFirstOut)的

原則進行存取操作,而不是隨機存取操作

方式

>堆棧通常由處理器自動維持

A在8086中,由堆棧段寄存器SS和堆棧指針

寄存器SP共同指示

工工.■指令指針I(yè)P

》指;指針寄存器IP,指示代碼段中指令的偏

移地址

A它與代碼段寄存器CS聯(lián)用,確定下一條指

令的物理地址

?計算機通過CS:IP寄存器來控制指令序列

的執(zhí)行流程

>IP寄存器是一個專用寄存器

第I七1標志寄存器

標志(Flag)用于反映指令執(zhí)行結果或控制指令

執(zhí)行形式,形成16位標志寄存器FLAGS(程序狀

態(tài)字PSW寄存器)

?狀態(tài)標志一一用來記錄程序運行結果的狀態(tài)信息,

許多指令的執(zhí)行都將相應地設置它

CFZFSFPFOFAF

A控制標志一一可由程序根據(jù)需要用指令設置,用

于控制處理器執(zhí)行指令的方式

DFIFTF

151211109876543210

OFIDFIIFITFISFIZFIAFPFPcF

進位標志CF(CarryFlag)

A當運算結果的最高有效位有進位(加法)或

借位(減法)時,進位標志置1,即CF=1;

否則CF=O。

3AH+7cH=B6H,沒有進位:CF=0

AAH+7cH=(1)26H,有進位:CF=1

第1章零標志ZF(ZeroFlag)

A若運算結果為0,貝!JZF=1;

否則ZF=0

?,注意:ZF為1表示的結果是0

3AH+7cH=B6H,結果不是零:ZF=0

84H+7CH=(1)00H,結果是零:ZF=1

捫4.■符號標志SF(SignFlag)

口h,

萬運算結果最高位為1,貝[JSF=1;否則

SF=O

-

4T:工/丁7三,:':產(chǎn)=,::『二,''產(chǎn),三.

>有符號數(shù)據(jù)用最高有效位表示數(shù)據(jù)的符號

所以,最高有效位就是符號標志的狀態(tài)

V________________________________________

3AH+7CH=B6H,最高位口7=1:SF=1

84H+7CH=(1)OOH,最高位口7=0:SF=0

第1章奇偶標志PF(ParityFlag)

?當運算結果最低字節(jié)中“1〃的個數(shù)為零或偶

數(shù)時,PF=1;否則PF=0

%PF標志僅反映最低8位中“1”的個數(shù)

<是偶或奇,即使是進行16位字操作

3AH+7cH=B6H=10110110

結果中有5個1,是奇數(shù):PF=0

溢出標志OF(OverflowFlag)

■■二

A若算術運算的結果有溢出,則OF=1;

否則否=0

3AH+7CH=B6H,產(chǎn)生溢出:OF=1

AAH+7CH=(1)26H,沒有溢出:OF=0

(q問題

什么是溢出?

溢出和進位有什么區(qū)別?

處理器怎么處理,程序員如何運用?

■□何判斷是否溢出?______________

第什么是溢出

>>處理器內(nèi)部以補碼表示有符號數(shù)

>8位表達的整數(shù)范圍是:+127?―128

>16位表達的范圍是:+32767?一32768

>如果運算結果超出這個范圍,就產(chǎn)生了溢出

A有溢出,說明有符號數(shù)的運算結果不正確

3AH+7cH=B6H,就是58+124=182,

已經(jīng)超出一128?+127范圍,產(chǎn)生溢出,故0F=1;

另一方面,補碼B6H表達真值是?74,

顯然運算結果也不正確

二工起溢出和進位

士溢工標志OF和進位標志CF是兩個意義不同

的標志

A進位標志表示無符號數(shù)運算結果是否超出范

圍,超出范圍后加上進位或借位運算結果仍

然正確;

?溢出標志表示有符號數(shù)運算結果是否超出范

圍,超出范圍后運算結果不正確。

第1匕.?溢出和進位的對比

例1:3AH+7cH=B6H

無符號數(shù)運算:58+124=182

范圍內(nèi),無進位

有符號數(shù)運算:58+124=182

范圍外,有溢出

例2:AAH+7CH=(1)26H

無符號數(shù)運算:170+124=294

范圍外,有進位

有符號數(shù)運算:-86+124=28

范圍內(nèi),無溢出

第1工A如何運用溢出和進位

?處理器對兩個操作數(shù)進行運算時,按照無符

號數(shù)求得結果,并相應設置進位標志CF;

同時,根據(jù)是否超出有符號數(shù)的范圍設置溢

出標志OF

?應該利用哪個標志,則由程序員來決定。也

就是說,如果將參加運算的操作數(shù)認為是無

符號數(shù),就應該關心進位;認為是有符號數(shù),

則要注意是否溢出

第1章溢出的判斷

金判;運算結果是否溢出的簡量規(guī)則:

A只有當兩個相同符號數(shù)相加(包括不同

符號數(shù)相減),而運算結果的符號與原

數(shù)據(jù)符號相反時,產(chǎn)生溢出;因為,此

時的運算結果顯然不正確

?其他情況下,則不會產(chǎn)生溢出

r.輔助進位標志AF(AuxiliaryCarryFlag)

1A運算時D3位(低半字節(jié))有進位或

借位時,AF=1;否則AF=Oo

3AH+7cH=B6H,D3有進位:AF=1

為這個標志主要由處理器內(nèi)部使用,

用于十進制算術運算調(diào)整指令中,用

了一般不必關心

「匚則方向標志DF(DirectionFlag)

士用T串操作指令,控制地址的變化方向:

。設置DF=0,存儲器地址自動增加;

。設置DF=1,存儲器地址自動減少。

ACLD指令復位方向標志:DF=0

ASTD指令置位方向標志:DF-1

第1章■中斷允許標志IF(Interrupt-enableFlag)

力用于控制外部可屏蔽中斷是否可以被處

理器響應:

。設置IF=1,則允許中斷;

。設置IF=O,則禁止中斷。

ACLI指令復位中斷標志:IF=O

ASTI指令置位中斷標志:IF=1

陷阱標志TF(TrapFlag)

?用于控制處理器進入單步操作方式:

。設置TF=O,處理器正常工作;

。設置TF=1,處理器單步執(zhí)行指令。

>單步執(zhí)行指令一一處理器在每條指令執(zhí)行結束時,

便產(chǎn)生一個編號為1的內(nèi)部中斷

>這種內(nèi)部中斷稱為單步中斷

A所以TF也稱為單步標志

■利用單步中斷可對程序進行逐條指令的調(diào)試

■這種逐條指令調(diào)試程序的方法就是單步調(diào)試

■■數(shù)據(jù)信息的表達單位

?計算機中信息的單位

■二進制位Bit:存儲一位二進制數(shù):0或1

■字節(jié)Byte:8個二進制位,D7~D0

■字Word:16位,2個字節(jié),D15?Do

■雙字DWord:32位,4個字節(jié),D31?D。

A最低有效位LSB:數(shù)據(jù)的最低位,Do位

A最高有效位MSB:數(shù)據(jù)的最高位,對應字節(jié)、

字、雙字分別指D7、Di5、D31位

第1匕.?數(shù)據(jù)的存儲格式

D7Do

低地址

第1章存儲單元及其存儲內(nèi)容

弓?■?

?7主存儲器需要利用地址區(qū)別

?每個存儲單元都有一個編號;被稱為

存儲器地址

>每個存儲單元存放一個字節(jié)的內(nèi)容

0002H單元存放有一個數(shù)據(jù)34H

表達為[0002H]=34H

廣F多字節(jié)數(shù)據(jù)存放方式

>多字節(jié)數(shù)據(jù)在存儲器中占連續(xù)的多個存儲單元:

>存放:低字節(jié)存入低地址,高字節(jié)存入高地址

A表達:用低地址表示多字節(jié)數(shù)據(jù)占據(jù)的地址空間

2號“字”單元的內(nèi)容為:

[0002H]=1234H

2號“雙字”單元的內(nèi)容為:

[0002H]=78561234H

a80x86處理器采用“低對低、高

<_對__高__”__:__小__端__方__式__L__it_tl_e__E_n_d__ia_n

巴第I工1£存儲器數(shù)地據(jù)址的可地以址是對字齊節(jié)單元地址、

字單元地址、雙字單元地址等等

?字單元安排在偶地址(xxxOB)、雙字單元

安排在模4地址(xxOOB)等,被稱為“地址

對齊(Align)”

?對于不對齊地址的數(shù)據(jù),處理器訪問時,

需要額外的訪問存儲器時間

?應該將數(shù)據(jù)的地址對齊,以取得較高的存

取速度

二工存儲器的分段管理

,80器CPU有20條地址線

■最大可尋址空間為22。=1MB

■物理地址范圍從00000H?FFFFFH

>8086CPU將1MB空間分成許多邏輯段

(Segment)

■每個段最大限制為64KB

■段地址的低4位為0000B

?這樣,一個存儲單元除具有一個唯一的物理

地址外,還具有多個邏輯地址

第1工.?物理地址和邏輯地址

??每個物理存儲單元有一個唯一的20位

編號,即物理地址:

00000H-FFFFFH

?分段后用戶編程時,采用邏輯地址:

段基地址:段內(nèi)偏移地址

第■邏輯地址

十段說明邏輯段在主存中的起始位置

A8086規(guī)定段地址必須是模16地址:xxxxOH

?省略低4位0000B,段地址就可以用16位數(shù)

據(jù)表示,就能用16位段寄存器表達段地址

?偏移地址說明主存單元距離段起始位置的偏

移量

?每段不超過64KB,偏移地址也可用16位數(shù)

據(jù)表示

二匕.■物理地址和邏輯地址的轉(zhuǎn)換

E蔡輯地址中的段地址左移4位,加上

偏移地址就得到20位物理地址

>一個物理地址可以有多個邏輯地址

邏輯地址1460:100、1380:F00

物理地址14700H14700H

因&址左移建——14600H13800H

加上偏移地址——>+100H+F00H

得到物理地址——14700H14700H

第1匕.?段寄存器

I》8086有4個16位段寄存器,每個段寄存器確定一個

邏輯段的起始地址,每種邏輯段均有各自的用途

>CS(CodeSegment)

■指明代碼段的起始地址

>SS(StackSegment)

■指明堆棧段的起始地址

>DS(DataSegment)

■指明數(shù)據(jù)段的起始地址

>ES(ExtraSegment)

■指明附加段的起始地址

第1章代碼段(CodeSegment)

■/>代■碼段用來存放程序的指令序列

?:?代碼段寄存器CS存放代碼段的段地址

?:?指令指針寄存器IP指示下條指令的偏移地址

A處理器利用CS:IP取得下一條要執(zhí)行的

指令

「第i章

J.堆棧段(StackSegment)

■1堆棧段確定堆棧所在的主存區(qū)域

?:?堆棧段寄存器SS存放堆棧段的段地址

。堆棧指針寄存器SP指示堆棧棧頂?shù)钠频刂?/p>

A處理器利用SS:SP操作堆棧頂?shù)臄?shù)據(jù)

第1章數(shù)據(jù)段(DataSegment)

金數(shù)7段存放運行程序所用的數(shù)據(jù)

。數(shù)據(jù)段寄存器DS存放數(shù)據(jù)段的段地址

.:?各種主存尋址方式(有效地址EA)得到存

儲器中操作數(shù)的偏移地址

A處理器利用DS:EA存取數(shù)據(jù)段中的數(shù)

據(jù)

附力口段(ExtraSegment)

A附加段是附加的數(shù)據(jù)段,也用于數(shù)據(jù)的保存:

?:?附加段寄存器ES存放附加段的段地址

?:?各種主存尋址方式(有效地址EA)得到存儲器中

操作數(shù)的偏移地址

A處理器利用ES:EA存取附加段中的數(shù)據(jù)

>串操作指令將附加段作為其目的操作數(shù)的存

放區(qū)域

第1章如何分配各個邏輯段

A程序的指令序列必須安排在代碼段

A程序使用的堆棧一定在堆棧段

A程序中的數(shù)據(jù)默認是安排在數(shù)據(jù)段,

也經(jīng)常安排在附加段,尤其是串操作

的目的區(qū)必須是附加段

A數(shù)據(jù)的存放比較靈活,實際上可以存

放在任何一種邏輯段中

第I匕上段超越前綴指令

沒有指明時,一般的數(shù)據(jù)訪問在DS段;使用

BP訪問主存,則在SS段

?默認的情況允許改變,需要使用段超越前綴

指令;8086指令系統(tǒng)中有4個:

CS;代碼段超越,使用代碼段的數(shù)據(jù)

SS;堆棧段超越,使用堆棧段的數(shù)據(jù)

DS;數(shù)據(jù)段超越,使用數(shù)據(jù)段的數(shù)據(jù)

ES;附加段超越,使用附加段的數(shù)據(jù)

:段超越的示例

土沒二段超越的指令實例:二

MOVAX,[2000H];AX-DS:[2000H]

;從默認的DS數(shù)據(jù)段取出數(shù)據(jù)

>采用段超越前綴的指令實例:

MOVAX,ES:[2000H];AX-ES:[2000H]

;從指定的ES附加段取出數(shù)據(jù)

段寄存器的使用規(guī)定

一|]

訪問存儲器的方式默認可超越偏移地址

取指令CS無IP

堆棧操作SS無SP

一般數(shù)據(jù)訪問DSCSESSS有效地址EA

BP基址的尋址方式SSCSESDS有效地址EA

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

串操作的目的操作數(shù)ES無DI

第1章存儲器的分段

中■一

■>8086對邏輯段要求:

■段地址低4位均為0

■每段最大不超過64KB

A8086對邏輯段并不要求:

■必須是64KB

■各段之間完全分開(即可以重疊)

第1匕.?各個邏輯段獨立

存儲器物理地址

⑤各段獨立

第1章各個邏輯段重疊

存儲器物理地址

段寄存器

堆棧段256B

CS04800H

DS

數(shù)據(jù)段2KB

SS04000H

ES

代碼段8KB

02000H

00000H

(b)各段重疊

審.?1MB空間的分段

>1MB空間最多能分成多少個段?

■每隔16個存儲單元就可以開始一個段

■所以1MB最多可以有:

220^16=216=64K個段

>1MB空間最少能分成多少個段?

■每隔64K個存儲單元開始一個段

■所以1MB最少可以有:

220?216=16個段

第1匕.?1,68086的尋址方式

指令系統(tǒng)設計了多種操作數(shù)的來源

>尋找操作數(shù)的過程就是操作數(shù)的尋址

?操作數(shù)采取哪一種尋址方式,會影響機器運行的

速度和效率

>如何尋址一個操作數(shù)對程序設計很重要

4上機實踐的建議

配合調(diào)試程序單步執(zhí)行每條指令

[或調(diào)用IO.UB的子程序顯示結果)

感性認,象深刻

第1章指令的組成

操作碼操作數(shù)

>指令由操作碼和操作數(shù)兩部分組成

A操作碼說明計算機要執(zhí)行哪種操作,如傳送、運

算、移位、跳轉(zhuǎn)等操作,它是指令中不可缺少的

組成部分

A操作數(shù)是指令執(zhí)行的參與者,即各種操作的對象

?有些指令不需要操作數(shù),通常的指令都有一個或

兩個操作數(shù),個別指令有3個甚至4個操作數(shù)

第1匕.?指令的操作碼和操作數(shù)

口「——I

??每種指令的操作碼:

■用一個唯一的助記符表示(指令功能的英文縮

寫)

■對應著機器指令的一個二進制編碼

A指令中的操作數(shù):

■可以是一個具體的數(shù)值

■可以是存放數(shù)據(jù)的寄存器

■或指明數(shù)據(jù)在主存位置的存儲器地址

第1匕.?8086的機器代碼格式

1/2字節(jié)0/1字節(jié)0/1/2字節(jié)0/1/2字節(jié)

>給出立即尋址方式需要的數(shù)值本身

標準機器代碼示例

1/2字節(jié)0/1字節(jié)0/1/2字節(jié)0/1/2包

操作碼|modregr/m位移量立即數(shù)

movax,[BP+0];機器代碼是8B4600

>前一個字節(jié)8B是操作碼(含w=1表示字操作)

A中間一個字節(jié)46(01000110)是“modreg

r/m”字節(jié)

■reg=000表示目的操作數(shù)為AX

■mod=01和17m=110表示源操作數(shù)為[BP+D8]

A最后一個字節(jié)就是8位位移量〔D8=〕00

第1章其它機器代碼形式

操作碼操作數(shù)

moval,05;機器代碼是BO05

?前一個字節(jié)B0是操作碼(含一個操作

數(shù)AL),后一個字節(jié)05是立即數(shù)

movax,0102H;機器代碼是B0201

A前一個字節(jié)B8是操作碼(含一個操作

數(shù)AX),后兩個字節(jié)0201是16位立即

數(shù)(低字節(jié)02在低地址)

F第1匕將上操指令作的助記―符格式注釋

?操作數(shù)2,稱為源操作數(shù)src,它表示參與

指令操作的一個對象

?操作數(shù)1,稱為目的操作數(shù)dest,它不僅可

以作為指令操作的一個對象,還可以用來存

放指令操作的結果

>分號后的內(nèi)容是對指令的解釋

第1工??傳送指令MOV的格式

MOVdest,src;dest^-src

>功能:將源操作數(shù)src傳送至目的操作數(shù)dest

MOVAL,05H;AL-05H

MOVBX,AX;BX-AX

MOVAX,[SI];AX—DS:[SI]

MOVAX,[BP+06H];AX-SS:[BP+06H]

MOVAX,[BX+SI];AX-DS:[BX+SI]

第?傳送指令MOV的功能

第1匕.?立即數(shù)尋址方式

?指令中的操作數(shù)直接存放在機器代碼中,緊

跟在操作碼之后(操作數(shù)作為指令的一部分

存放在操作碼之后的主存單元中)

>這種操作數(shù)被稱為立即數(shù)imm

■它可以是8位數(shù)值i8(OOH-FFH)

■也可以是16位數(shù)值i16(0000H?FFFFH)

?立即數(shù)尋址方式常用來給寄存器賦值

MOVAL,05H;AL―05H

MOVAX,0102H;AX-0102H

第1章.立即數(shù)尋址指令

MOVAX,0102H;AX―0102H

存儲器

高地址

—立即數(shù)高字節(jié)

?—

溫馨提示

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

評論

0/150

提交評論