汇编语言程序课件_第1页
汇编语言程序课件_第2页
汇编语言程序课件_第3页
汇编语言程序课件_第4页
汇编语言程序课件_第5页
已阅读5页,还剩584页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1

組合語言基礎知識封面21.1

電腦系統概述1.1.1電腦的硬體1.1.2電腦的軟體1.1.3電腦程式設計語言返回第一章31.1.1電腦的硬體

對組合語言程式員來說,電腦硬體的結構如下圖所示(CPU、記憶體、介面(外設)):

運算器控制器寄存器主記憶體系統匯流排I/O接口輸入設備輸出設備輔助記憶體CPU外匯流排41.中央處理單元

由三部分組成。控制器:取指令,經解碼分析後發出各種控制命令,如取數、存數、運算等。運算器:完成各種算術運算和邏輯運算。寄存器(或寄存器陣列):由多個8位、16位寄存器組成,提供各種操作所需要的數據。5

2.記憶體1)存放程式和數據;可重複讀取;新數據覆蓋原數據。

2)主存:半導體,快,成本高,容量小;輔存:軟硬磁片、光碟;

3)RAM:可讀可寫,易失性記憶體;

ROM:只讀,非易失性記憶體;

4)由大量存儲單元組成:單位、內容、地址、容量、B(BYTE)、KB、MB、GB、TB等。6

3.外部設備和介面設備類型:人機交互機器間通信外存(可看做I/O設備)介面:①介面的必要性:格式轉換、電平轉換…②介面的組成:三個(組)寄存器;通過寄存器交換數據;

③對接口的訪問:端口

端口號端口地址、I/O地址;返回1.17

1.1.2電腦軟體1.系統軟體面向電腦、由廠家提供;其作用為管理和維護、充分發揮其功能、為用戶提供一個方便使用的系統。如操作系統,診斷系統,程式設計語言等2.應用軟體面向問題、由公司或用戶編寫★集成開發環境:開發工具包括文本編輯、翻譯程式、調試程式、連接程式等,在DOS時代,其各自是獨立的;現在將其集成為一個軟體,即為“集成開發環境”。返回1.18

1.1.3電腦的程式設計語言1.機器語言低級語言

2.組合語言程式設計語言

3.高級語言C/C++、JAVA、 DELPHI……9

1.機器語言指令→機器指令;機器指令的組成:操作碼、運算元;指令系統;機器語言:指令系統及使用指令系統編寫程式的規則。機器語言特點:電腦唯一能夠直接識別的語言。目標程式:用機器語言描述的程式。機器語言的致命缺點:難以使用。如100+2568086機器語言程式:B86400050001A3002010

2.組合語言彙編指令:用便於記憶、並能描述指令功能的符號表示機器指令→彙編指令(符號指令)。助記符:表示指令操作碼的符號,一般用英語單詞或縮寫。指令的運算元也用符號表示。組合語言:彙編指令及使用彙編指令編寫程式的規則。(其他語言要素第三章介紹)組合語言(源)程式:使用組合語言編寫的程式。組合語言的特點:彙編指令與機器指令一一對應,但相對機器語言易於理解、掌握,當我們用低級語言編寫程式時使用組合語言而不用機器語言。彙編和組合語言程式:翻譯過程翻譯程式。11

3.高級語言機器語言和組合語言以外的程式設計語言統稱高級語言。其特點是更加接近自然語言和慣用的數學表達形式,與電腦硬體結構無關,因而便於使用,便於交流和推廣。總之,高級語言編程效率高,但運行效率低。高級語言可分成編譯型和解釋型高級語言,分別使用編譯程序和解釋程式將根源程式翻譯成機器語言程式,然後交電腦執行。12

4.組合語言程式設計的意義學習組合語言的意義:1)與硬體密切相關,是學習硬體類課程的先行課和基礎課。2)有利於理解電腦的工作原理。3)可直接而有效地控制硬體。4)執行效率高,佔用空間小。5)特殊應用只能使用組合語言,如加密解密等。應該指出的是:在電腦速度大大提高和記憶體容量大大增加的今天,高級語言的使用更為廣泛和普遍(特別是編寫大型程式)。返回第一章131.2數據表示1.2.1數制1.2.2編碼1.2.3有符號數的表示方法1.2.4二進位運算返回第一章14

1.2.1數制[數制涉及三個問題:計數符號基數和權計數規則(1)計數符號

這是用於書寫數值的符號,所有計數符號的集合稱作數符集。k進制的數符集中必然包含k個符號。比如:二進位的數符集中有兩個符號:0和1;八進制的數符集中有8個符號:0,1,2,3,4,5,6,7;十進位的數符集中有10個符號:0,1,2,3,4,5,6,7,8,9;十六進制的數符集中有16個符號:0,1,2,3,4,5,6,7,8,9,A,B,C,D,E,F。15數制的三個問題:1.二進位數

(2)基數和權如果把用k進制書寫的一個整數從右往左依次記作第0位、第1位、…、第n位,則第i位上的數符ai所代表的含義是ai×ki。在此,我們把k稱為一個數制的基數,而把ki稱為k進制數第i位的權。(如888,每個8的位權都不相同)(3)計數規則簡單地說,就是“逢k進1,借1當k”。]…………………..1.二進位數

11011011.101B=1x27+1×26+0×25+1×24+1×23+0×22+1×21+1×20+1×2-1+0×2-2+1×2-3

二進位數是電腦內部採用的,並唯一能夠直接被電腦識別的數。162.十六進制數2.十六進制數

8a0f.6bH=8×163+10×162+0×161+15×160+6×16-1+11×16-2

引入十六進制數的目的是為了描述二進位數。數的書寫方法:

1)二進位數尾部加B(b)。

2)十六進制數尾部加H(h);如記數符號a,b,c,d,e,f打頭,頭部應加0,如0A8F5H;記數符號a,b,c,d,e,f不區別大小寫,與ABCDEF等效。

3)十進位數尾部加D(d),但通常可以省略。173.數制間轉換3.數制間轉換

1)十進位數轉換二進位數;

2)十進位數轉換十六進制數;

3)二進位數十六進制數互相轉換;

返回1.2181.2.1-3數制轉換:十進位→二進位(整數)①將整數部分不斷除以2,記下每次得到的餘數,直到商為零;②餘數倒排,即最後得到的餘數排在最高位,第一個餘數排在最低位。例如將十進位數13轉換成二進位數:

213餘數

26-----123-----021-----10-----1 13D=1101B191.2.1-3數制轉換:十進位→二進位(小數)

小數部分轉換:乘2取整,順序排列得到的整數。例如將0.8125轉換成二進位數:

0.8125

整數×2 1.6250 ×2 1.25 ×2 0.50 ×2 1.000.8125D=0.1101B(有時會有轉換誤差,如0.3D)返回數制轉換201.2.1-3數制轉換:十進位→十六進制十進位數轉換成十六進制數,方法同十進位數轉換成二進位數,只不過“除2取餘”變為“除16取餘”,“乘2取整”變為“乘16取整”。同理,如果要將十進位數轉換為其他數制的數(如八進制數),也採用同樣的方法。二進位數、十六進制數轉換成十進位數教材未介紹,只要將二進位數、十六進制數按位權展開相加即可,如將8A.B5H轉換成十進位數:8A.B5H=8×161+10×160+11×16-1+5×16-2

=128+10+0.6875+0.0195=138.707D返回數制轉換21二進位數互相轉換十六進制數返回數制轉換5A.5H22

1.2.2編碼電腦中的數採用二進位數,字母、符號等也只能採用二進位代碼(0,1)的排列組合表示(編碼)。(兩種編碼:BCD碼、ASCII碼)1.BCD碼(8421碼、二──十進位數)解決十進位數在電腦內部如何表示。BCD碼規定用四位二進位數表示一位十進位數。對多位十進位數,只要把每一位十進位數分別表示為四位二進位數即可。十進位BCD碼

00000100012001030011401005010160110701118100091001十進位BCD碼

2800101000956100101010110232.ASCII碼2.ASCII碼解決字母、符號在電腦內部如何表示。基本ASCII碼(標準ASCII碼)用七位二進制數表示一個符號(共128個);書寫:用兩位十六進制數書寫,如41HA;種類:1)控制字元(前32個和最後一個):

0D回車,0A換行;

2)其他為列印字元(可顯示字元);應記住的ASCII碼:30H~39H,41H,61H擴展ASCII碼用八位二進位數表示一個符號(共256個)。返回1.224

1.2.3有符號數表示方法0.無符號數、有符號數、機器數、真值1.原碼正數原碼:符號位為0,數值位照抄。負數原碼:符號位為1,數值位照抄。例:X=+25=+00011001B[X]原=00011001BX=-25=-00011001B[X]原=10011001B2.反碼正數反碼:符號位為0,數值位照抄。負數反碼:符號位為1,數值位取反。例:X=+25=+00011001B[X]反=00011001BX=-25=-00011001B[X]反=11100110B

原碼和反碼表數範圍相同,都是-127~+127。253.補數3.補數為了將減法運算變成加法來做,有符號數在電腦內一律採用補數表示。正數補數:符號位為0,數值位照抄。負數補數:符號位為1,數值位取反加一。例:X=+25=+00011001B[X]補=00011001BX=-25=-00011001B[X]反=11100110B[X]補=11100111B

下麵是原碼、反碼和補數的小結。原碼、反碼、補數總結:

1)正數的原碼反碼補數相同;負數的原碼反碼補數各不相同,但符號位都是1。

2)設字長為八位,原碼反碼的表數範圍為

-127~+127,補數的表數範圍為-128~+127。

3)已知某負數的補數,求該負數的真值,方法如下:

①符號位不動,其餘位求反加一,得到的是該負數的原碼;

②根據原碼即可寫出該負數的真值。例:[X]補=11111100B[X]原=10000011B+1=10000100BX=-0000100=-4返回1.226

1.2.4二進位運算(含十六進制運算)1.算術運算與十進位運算相同,只不過是逢2進1,借1當2。 加法 減法 乘法

0+0=0 0‐0=0 0×0=00+1=10‐1=1 0×1=01+0=11‐0=1 1×0=01+1=101‐1=0 1×1=12.十六進制算術運算:與十進位運算相同,但①逢16進1,借1當16;②注意運算結果如為A,B,C,D,E,F,不能寫成10,11,12,13,14,15。例1:計算85AH+924H85A+924————117E例2:計算800H‐1800‐001————7FF不可以寫成14逢16

進1273.邏輯運算3.邏輯運算

與運算(AND;∧):

1∧0=0 1∧1=1 0∧0=0 0∧1=0

或運算(OR;∨):

1∨0=1 1∨1=1 0∨0=0 0∨1=1

非運算(NOT;~或—

):~0=1 (0=1) ~1=0(1=0) 異或運算(XOR;⊕)

1⊕0=1 1⊕1=0 0⊕0=0 0⊕1=1

注意:邏輯運算是按位運算。

28

4.用補數作減法(補充講義)我們用實例說明電腦在執行減法指令時,是如何把減法變成加法來做的(設字長為8位)。例1:(+5)-(+4)即(+00000101)-(+00000100)①機器中+5和+4都用補數表示。②對減數求補(求反加一),得到(-4)的補數:11111100③(+5)的補數加(-4)的補數:

00000101

+11111100 ——————————100000001④將結果00000001看作補數,其真值即為+1。進位被自動捨棄29用補數作減法(2)例2(+5)-(-4)即(+0000101)-(-0000100)①機器中+5和-4都用補數表示。(-4)補=11111100②對減數求補,得到的是+4的補數:00000100③將+5的補數加+4的補數

00000101+00000100——————————00001001④將結果看成補數,其真值即為正確結果+9。例3:(-5)-(+4)和(-5)-(-4)步驟同上。總之:①被減數和減數都用補數表示;

②機器對減數先求補,而後做加;

③將計算結果看作補數。返回第一章301.3Intel80x86系列微處理器1.8086/8088/801868086:1978年推出;內外數據匯流排16位;地址匯流排

20位;尋址範圍1MB;主頻5MHz.8088:1979年推出;外部數據匯流排8位;其餘基本同8086,被稱為准16位CPU。80186:增強了8086的功能,但作為電腦的CPU沒有被使用過,只作過某些板卡的控制器。31802862.80286(16位CPU)

1982年推出;內外數據匯流排16位;地址匯流排24位;尋址範圍16MB;主頻5MHz~20MHz。

80286支持兩種工作方式:實模式和保護模式。實模式:相當於一個快速8086。保護模式:提供虛擬存儲管理和多任務的硬體控

制。物理尋址範圍16MB,虛擬記憶體尋址範圍可達1GB。指令系統除包含8086/80186指令外,新增15條保護方式指令32803863.80386(32位CPU)

1985年推出;內外部數據匯流排32位;地址匯流排32位,物理尋址範圍4GB,虛擬記憶體尋址範圍可達64TB。主頻為16/25/33MHz。

386除支持286的兩種工作方式外,新增虛擬8086模式。虛擬8086模式的特點:

1)既具有保護功能,又能執行實模式下的8086代碼,且可以實現多任務。(可同時運行多個DOS程式)

2)可以在虛擬8086模式和保護模式下快速、反復轉換。指令系統除相容原16位CPU指令外,全面升級為32位指令,並新增多條指令。3380486\pentium4.80486(32位CPU)

1989年推出;特點:①將高速緩存、協處理器與CPU集成在一個晶片上;②部分採用了RISC技術;③採用了指令流水線技術;④大幅度提高了CPU的主頻,可達100MHz。5.Pentium/MMXPentium(32位或准64位CPU)Pentium:1993年推出;內部數據匯流排32位,外部數據匯流排64位;主頻60MHz~200MHz;採用超標量技術。MMXPentium:1996年推出;主頻最高233MHz;新增57條多媒體指令,提高了多媒體軟體執行速度。 下麵簡單介紹RISC技術和流水線技術。

RISC技術:精簡指令系統電腦技術。其特點是:CPU的指令系統不含複雜指令,指令長度固定,指令格式種類少,尋址方式少,指令數量少(只選擇使用頻度很高的指令),因此,使電腦結構變得更加簡單、有效,結合流水線等其他技術,使一個時鐘週期完成一條指令,從而大大提高了電腦的速度。如1981年研製成的RSCII型CPU,只有31條指令,其性能卻比當時最先進的商品化微處理器MC68000和Z8000快3~4倍。

流水線技術:電腦中的流水線技術和工廠中的流水裝配線類似。①將執行一條指令需完成的操作分成若干子操作;②每個子操作由專門部件完成;③各子操作並行工作。由於子操作並行工作,提高了電腦的執行速度。(但要注意,完成一條指令所需要的時間並沒有變。)(“每週期完成一條指令”和“完成一條指令需要一個週期”不同。)(超標量)裝配線34Pentiumpro\pii/piii\p46.PentiumPro/PⅡ/PⅢ/P4

PentiumPro:1995年推出;Pentium的增強型晶片,主要用於伺服器.PII:1997年推出;在PentiumPro的基礎上增加了MMX指令。

PIII:1999年推出;在PII的基礎上增加了70條SSE指令。

P4:2000年推出;新增76條SSE2指令。另外,從PII時代開始,Intel為了佔領低端市場,推出了Celeron(賽揚)微處理器,目前,最新型的Celeron(賽揚)微處理器是所謂C4,與P4引腳相容。

返回第一章351.4PC微型電腦系統1.PC機的硬體基本配置:主機、鍵盤和滑鼠、

顯示器、軟碟驅動器、硬碟驅動

器和光盘驱动器等。2.主存空間的分配①常規記憶體:容量1MB;

00000H~0FFFFFH。*保留記憶體:顯示緩衝

區和擴展ROM;*基本記憶體:DOS占

用、用户区。擴展記憶體640K384K保留記憶體基本記憶體常規記憶體36PC機的軟體②擴展記憶體(XMS):對80286以上的CPU來說1MB以上的存儲空間稱為擴展記憶體,可供用戶程式使用。3.PC機的軟體(學習《組合語言》使用的軟體)

①編輯程式,如DOS的EDIT。

②組合語言程式,如MASM6.X。

③連接程式LINK。

④調試程式DEBUG。返回第一章371.58086微處理器1.5.18086的功能結構1.5.28086的寄存器組1.5.3記憶體組織與段寄存器

1.記憶體組織(位、位元組、地址、字單元…)

2.分段管理(分段、邏輯地址、物理地址…)

3.段寄存器(段寄存器、段超越….)返回第一章38

1.5.18086的功能結構指令解碼匯流排介面單元執行單元ABUSDBUSCBUS內部數據匯流排內部數據匯流排返回1.539

1.5.28086寄存器組

寄存器是CPU內部臨時存放數據的部件。

8個通用寄存器,4個段寄存器,1個指令指針寄存器,1個標誌寄存器。以上寄存器均為16位寄存器。

1.8086通用寄存器(1)AX—累加器。(2)BX—基地址寄存器。(3)CX—計數寄存器。(4)DX—數據寄存器。(5)SI—源變址寄存器。(6)DI—目的變址寄存器。(7)BP—棧基地址寄存器。(8)SP—棧頂指針。(9)IP——指令指針寄存器(專用寄存器)。

通用寄存器中的4個數據寄存器可以分成8個8位寄存器使用:AX→AH,ALBX→BH,BLCX→CH,CLDX→DH,DL40標誌寄存器2.標誌寄存器

標誌寄存器又稱作程式狀態字(ProgramStatusWord,簡記作PSW),共16位,一般把每一位分別使用,8086/8088使用其中的9位,用於存放當前程式執行的狀況和運算結果的特徵,各標誌位的分佈如圖2.3所示。

D15d14d13d12d11d10d9d8

D7D6D5D4D3D2D1D0OFDFIFTFSFZFAFPFCF41標誌寄存器

9個標誌位可分為兩組:狀態標誌(條件標誌),記載算術運算或者邏輯運算結果的特徵;另一組是控制標誌位,記載CPU當前工作狀態(控制CPU執行指令的方式),包括TF、IF、DF等3個標誌位。1.狀態標誌(條件標誌)(1)CF——進位標誌。(2)ZF——零標誌。(3)SF——符號標誌。(4)OF——溢出標誌。(設置,與CF的區別)(5)PF——奇偶標誌。(低8位,偶數時為1)(6)AF——輔助進位標誌。

42控制標誌位2.控制標誌位(1)TF——單步中斷允許標誌。(2)IF——外部可遮罩中斷允許標誌。(3)DF——方向標誌。返回1.5目錄43

1.5.3記憶體組織與段寄存器1.數據的存儲格式AFH5AH34H12H56H78H0006H0005H0004H0003H0002H0001H0000H地址位(bit)、位元組(Byte)、字:字長:一個字包含的位數…;8086,286,386….的字長;記憶體的基本單位,地址、內容;字、雙字的存放:遵循低位元組占低地址,高位元組占高地址。字單元、雙字單元的地址。地址對齊字單元[0002h]=1234h雙字單元[0002H]=78561234H位元組單元[0002h]=34h內容44記憶體的分段管理12.記憶體的分段管理①為何分段:8086的地址匯流排寬度為20位,尋址範圍220=1MB,但一個地址寄存器只有16位,無法直接形成20位地址,故把1M空間分成許多“段”,用一個寄存器表示某段在1M空間內的起始地址(段地址),用另一個寄存器表示表示段內某單元相對本段起始地址的偏移地址。(用兩個16位寄存器形成20位地址)②地址的表示方法:段(基)地址:偏移地址為能用16位寄存器表示段的起始地址(xxxxxH),並不是任意一個單元的地址都能作段的起始地址,只有那些形式為xxxx0H的地址才能作段的起始地址,該起始地址存入16位寄存器時,將0省略即可。偏移地址為16位,可直接放入16位寄存器。45分段管理2③邏輯地址和物理地址邏輯地址:存儲單元地址的表達形式。即段地址:偏移地址物理地址:存儲單元在1M空間內的實際地址。④已知邏輯地址,求物理地址如205AH:3B06H205A0H+3B06H————————240A6H①段地址乘以16(也就是將保存段地址時省略的0補回。)②位對齊,加偏移地址物理地址46分段管理3⑤地址的唯一性一個存儲單元的物理地址是唯一的,但邏輯地址並不是唯一的,例如4106H:400AH,42AEH:258AH,3507H:0FFFAH……都表示同一個存儲單元,其物理地址為4506AH。⑥涉及分段的其他問題

a)1M記憶體空間總共可以分多少個段?xxxx0hb)每個段最大可以包括多少個存儲單元?

c)xxxxH:0000H是段內哪一個單元?其物理地址是多少?47

3.段寄存器8086專門存放段地址的寄存器稱為段寄存器,共有4個:CS-代碼段段寄存器;

DS-數據段段寄存器;

ES-附加段段寄存器;

SS-堆疊段段寄存器。①段寄存器的作用:程式的不同部分放入相應段;②段超越:取指令時,段地址只能是CS;堆疊操作時,段地址只能是SS;讀取數據時,默認的段寄存器為DS,但也可以指定使用其他段寄存器。48段寄存器使用規定SSESDSDSSSCS

默認段寄存器有效地址EADISI有效地址EASPIP偏移地址CS,ES,SS無CS,ES,SSCS,ES,SS無無可超越的段寄存器BP作基址時串的目的運算元串的源運算元一般數據訪問堆疊操作取指令訪問存儲方式注意:雖然有些操作允許段超越,但除了編寫COM程式,一般情況下不使用段超越,特別是堆疊段只用於堆疊操作。

段寄存器使用規定49③使用段寄存器涉及的其他問題③使用段寄存器涉及的其他問題按前述,可以使用的段寄存器只有4個,且每個段最大空間為64KB,好象限制很死,但實際使用時卻很靈活:程式可以只有一個代碼段(COM程式)。段與段之間可以相互獨立,也可以相互重疊,取決於各段的大小。如果必要,一個段的實際容量可以大於64K,只要在程式運行時,動態修改相應段寄存器的值(程式有多個代碼段或多個數據段)。......64K64K段寄存器指向修改段寄存器值使其指向新地址段大於64K示意圖返回1.5501.68086的尋址方式1.6.18086機器代碼格式1.6.2立即數尋址方式1.6.3寄存器尋址方式1.6.4記憶體尋址方式寄存器間接尋址寄存器相對尋址基址變址尋址直接尋址基址變址相對尋址返回第一章51

1.6.18086機器代碼格式①指令的組成(機器指令角度):操作碼運算元(二進位代碼的排列組合)(運算元:無,1,2)②彙編指令格式:操作碼助記符目的運算元,源運算元;注釋操作碼助記符:每條指令必有。運算元:指令操作的對象或操作對象的地址。

MOV AX,2050HMOV AX,[2050H](詳細的機器指令格式省略)返回1.652

1.6.2立即數尋址方式尋址方式:尋找運算元地址的方式,即尋找運算元,而後完成指令。這種尋址方式直接把參與操作的數據寫在指令中,是指令的一部分,該數據稱為立即數。電腦尋找運算元時,只要讀取指令的運算元位元組;運算元可以是各種數制下的數值(相當於8位或16位二進位數),也可以是帶單引號的字元。例如:MOV AX,2050H MOV AL,05H MOV AL,‘A’B8H50H20H操作碼立即數53指令舉例觀察指令:MOV 05H,ALMOV BL,324DMOV CH,2050HMOV DL,‘25’注意:1.立即數永遠不能作目的運算元。

2.源運算元和目的運算元要互相匹配。返回1.6目錄54

1.6.3寄存器尋址執行速度最快的尋址方式。MOV AX,BXMOV SP,AXMOV DI,2050HMOV DL,CH錯誤指令:MOV AL,BXMOV SP,CH返回1.6目錄55

1.6.4記憶體尋址方式程式運行時用到的數據決大部分存放在記憶體中,如何尋找記憶體中的數據就是記憶體尋址方式。共5種。1.直接尋址這種尋址方式是在指令中直接規定運算元所在單元的偏移地址。(在組合語言中,這個偏移地址通常以變數的形式出現,在指令中就直接寫變數的名字。)MOVAX,[2050H];AX←[DS×16+2050H]MOVDX,ES:[2050H];使用段超越;DX ←[ES×16+2050H]段超越指令格式區別MOVAX,2050H56直接尋址方式示意圖(MOVAX,[2050H])1492HDS14920H+2050H────16970H20H50HA1H...AAH55H代碼段數據段操作碼偏移地址16970HAHAL×16執行結果AX=55AAH572.寄存器間接尋址偏移地址(或有效地址)通過寄存器間接給出,可用的寄存器為BX、BP、SI、DI。MOVAX,[BX];AX←[DS×16+BX]MOVAL,[BX];AL←[DS×16+BX]MOVAX,[SI];SI←[DS×16+SI]MOVAX,[DI];AX←[DS×16+DI]MOVAX,[BP];AX←[SS×16+BP]MOVAX,ES:[BX];AX←[ES×16+BX]MOVAX,DS:[BP];AX←[DS×16+BP]字操作位元組操作段寄存器使用SS段超越583.寄存器相對尋址

指令規定一個寄存器和一個有符號的8位或16位偏移量,有效地址等於寄存器內容加偏移量。可用的寄存器仍然是BX、BP、SI、DI。計算物理地址時,當指令規定的寄存器是BP時,默認的段寄存器用SS,其他三個寄存器用DS;可以段超越。MOVAX,[DI+06H];AX←[DS×16+DI+06]MOVAX,06H[DI];同上MOVCL,[BP+0205H];CL←[SS×16+BP+205H]MOVDX,205H[BP];同上,但是是字操作。594.基址變址尋址用一個基址寄存器與一個變址寄存器的值相加,計算結果作為運算元的偏移地址。基址寄存器與變址寄存器的搭配如下:BXSIBPDIMOVAX,[BX+SI];AX←[DS*16+BX+SI]MOVAX,[BP+DI];AX←[SS*16+BP+DI]MOVAX,[BP][DI];另一種寫法。注意:①允許段超越。

②[BX+BP]或[SI+DI]是非法搭配。605.基址變址相對尋址在基址變址尋址方式基礎上,增加一個8位或16位偏移量,三者之和為偏移地址。MOVAX,[BX+SI+06];AX←[DS×16+BX+SI+06]MOVAX,2050H[BP+SI];AX←[SS*16+………]備註:①在直接尋址中,地址可以用符號代替,如“MOVAX,WORD_ADDR”,相當於“MOVAX,[xxxxH]”,“WORD_ADDR”稱為變數或符號地址,第三章介紹。②偏移量可以是變數或符號數,也在第三章介紹。③如果一條指令有兩個運算元,源運算元和目的運算元的尋址方式可能相同,也可能不同,如指令“MOVAX,[BX]”,源運算元為寄存器間接尋址,目的運算元為寄存器尋址。61講解指令系統時使用的符號r8:8位通用寄存器AH/AL/BH/BL/CH/CL/DH/DLr16:16位通用寄存器AX/BX/CX/DX/SI/DI/BP/SPreg:代表r8或r16seg:段寄存器CS/DS/ES/SSm8:記憶體中的一個8位運算元(含5種尋址方式)m16:記憶體中的一個16位運算元(含5種尋址方式)mem:代表m8或m16imm:8位或16位立即數dest:目的運算元src:源運算元disp:代表8位或16位偏移量62mem運算元的各種形式

①[2050H];VAR_ADDR②[BX];[BP];[si];[di]③[BX+disp];[BP+disp];[si+disp];[di+disp]disp[BX];disp[BP];disp[SI];disp[DI]④[BX+SI];[BX+DI];[BP+SI];[BP+DI][BX][SI];[BX][DI];……⑤[BX+SI+disp];[BX+DI+disp];[BP+SI+disp];[BP+DI+disp];其他寫法disp[bx+si]disp[bx][si]63要點及習題分析:㈠本章要點1.數制:二進位數、十六進制數及其相互轉換。2.有符號數的表示方法:原碼、反碼、補數。3.8086寄存器組:通用寄存器、專用寄存器、狀態標誌的設置及含義。4.記憶體管理:分段、邏輯地址和物理地址、段寄存器、段超越。5.8086尋址方式:7種方式特別是對記憶體運算元的5種尋址方式,也就是尋址mem數的各種表達形式。返回第一章

64㈡習題分析1.5將下列十六進制數轉換為二進位數和十進位數。

①0FFH④0EFH⑥10H⑧0ABH1.6將下列十進位數轉換為BCD碼。

②24④68⑥255⑧24581.7將下列BCD碼轉換為十進位數。

①10010001③00110110⑤00001000⑦100000011.8將下列十進位數分別用8位二進位數的原碼、反碼和補數表示。

②-127④-57⑥-128⑧68651.10寫出0—9,A—Z,a—z以及回車和換行的ASCII碼。

1.11電腦中有一個“01100001”編碼,如果把它認為是無符號數,它是十進位何數?認為它是BCD碼,是十進位何數?認為它是ASCII碼,表示什麼字元?

1.15羅列8086的8個8位寄存器和16位寄存器,並說明各自的作用。

1.16狀態標誌和控制標誌有何區別?

1.17舉例說明CF和OF的區別。

1.18什麼是“小端方式”?對字和雙字存儲單元,什麼是它們的對齊地址?為什麼要對齊地址?

1.19將下列邏輯地址轉換成物理地址。

①0FFFF:0④0B821:4567

補充題:設物理地址為96FF8H,偏移地址任意,則段地址可取:①8600H②8800H③900H④96FFH⑤9700H66概述概述①8086的指令系統按功能分類可以分成六組,本章分類逐條講解。②在組合語言中,指令的一般格式為[標號:]指令助記符目的運算元,源運算元[:注釋]其中括弧括起的部分不是必需的,為可選項。“標號”在第三章詳細介紹。③後面講解指令時,除前一章介紹的符號外,本書用AX,BX…形式表示寄存器的內容。④學習一條指令應掌握的內容:指令的功能運算元的尋址方式指令對標誌的影響避免非法指令…返回第二章672.1節目錄2.1.1--2.1.5(傳送)2.1數據傳送指令

2.1.1通用數據傳送指令

MOV/XCHG/XLAT

2.1.2堆疊操作指令

PUSH/POP

2.1.3標誌傳送指令

LAHF/SAHF/PUSHF/POPF

2.1.4地址傳送指令

LEA/LDS/LES

2.1.5輸入輸出指令

IN/OUT返回第二章682.1.1目錄:1~32.1.1通用數據傳送指令

1.MOV類指令MOVreg/mem,imm;MOVseg/reg/mem,reg;MOVseg/reg,mem;MOVreg/mem,seg

2.交換指令XCHG

3.換碼指令XLAT2.1節目錄692.1.1-1mov類例1

1.MOV類指令

格式1:MOVreg/mem,immMOVAX,2050H/MOVCL,58HMOVBYTEPTR[BX],55H/MOVWORDPTR[BX],55HMOVBYTEPTR[SI+05],55HMOVBYTIPTR[BP+DI],55HMOVBYTEPTR[BX+DI+2000H],55HMOVBYTEPTR[4050H],55H

………①MOV55H,AL②MOVDH,385③MOVBX,55H√④MOV[BX],55H⑤MOVDS,2000HMOVBYTEPTR[BX],55HMOVWORDPTR[BX],55H70mov類例2

格式2:MOVseg/reg/mem,regMOVDS,AX/MOVES,AX/MOVSS,AXMOVAX,BX/MOVSP,AX/MOVDH,CL/MOVAL,BHMOV[2050H],AX/MOV[2050H],BLMOV[BX+SI+2000H],DX/MOV2005H[BP][DI],CL

……………MOVDS,AL/MOVCS,AXMOVDL,AX/MOVBX,CL/MOVSI,CH/MOVBL,DI

CS不能做目的運算元71mov類例3

格式3:MOVseg/reg,memMOVDS,[BX]/MOVES,[BP+SI+25H]MOVAX,[2050H]/MOVAL,[2050H]

……………

注意:MOVmem,mem形式的指令是非法指令,也就是說,如果一條指令有兩個運算元,不允許兩個運算元都是記憶體數,如下列指令為非法指令:

MOV[BX],[2050H]/MOV[2050H],[BX+SI]

該項規定不僅適用於“MOV”類指令,也適用於其他各類指令(串操作除外)。記住:CS不能作目的操作數72mov類例4(END)

格式4:MOVreg/mem,segMOVAX,DS/MOVBX,ES/MOVAX,CSMOV[SI],DS/MOV[BX+SI],CS

……………“MOV”類指令小結:①立即數只能作源運算元,且要與目的運算元匹配。

②兩個運算元類型要匹配。

③如組合語言程式無法確定操作類型,要加類型說明符。

④CS一般不能作目的運算元(用轉移指令改變)。

⑤如果指令有兩個運算元,不允許兩個都是記憶體數。

⑥上述四類格式以外的指令必定是非法指令。

⑦所有“MOV”類指令均不影響標誌。CS可以作源運算元返回2.1.1MOV[BX],[2050H]732.1.1-2.xchg--3.XLAT

2.交換指令XCHG

指令格式:XCHGreg/mem,reg/mem

;將運算元格式“mem,mem”

排除在外!例:XCHGAX,BX/XCHGDH,CLXCHGCX,[2000H]/XCHG[BX+SI],AL交換指令不影響標誌。

3.換碼指令XLAT

指令格式:XLAT;AL←[DS×16+BX+AL]該指令的運算元是隱含的(AL),且尋址方式可理解為寄存器相對尋址,偏移量在AL中。該指令又稱“查表指令”,通常用於編寫查表程式。換碼指令不影響標誌。74

查表示意圖(end)160904010025查表步驟(求某數的平方)①在內存中建立數據表格;②將表格的首地址送入BX中;③假定要求“3”的平方,將3送入寄存器AL中;④執行指令XLAT;⑤執行:AL←[BX+3](DS)執行結束:AL=9。

AL中的內容被“換碼”!表格首地址查表示意圖2.1節目錄××××H752.1.2堆疊操作指令(1)2.1.2堆疊操作指令

能夠實現“後進先出(先進後出)的記憶體組織(或記憶體塊)稱為堆疊。引入堆疊:以三層副程式嵌套為例,逐級進入副程式時,A、B、C三點都有中斷點和現場需要保護,順序為A→B→C;當副程式sub3執行結束,逐級返回時,ABCmainsub1sub2sub3最後被保護的C點數據應最先恢復,最先保護的A點數據應最後恢復。為此,通常在內存中開闢一段區域,結合軟硬體技術,使其具有保護數據和後進先出的功能。此為堆疊。76

堆疊操作指令(2)8086堆疊管理:8086使用段寄存器SS和指針寄存器SP管理堆疊,SS決定了堆疊區的首地址,SP的初始SS:0000HSS:SP堆疊區值決定了堆疊區的末地址,堆棧區的最大長度隨之而定。數據入棧時,SP做減量調整,SP指示的單元稱為“棧頂”,即棧頂向下延伸;SP永遠指向剛剛入棧的數據。數據出棧時,SP做增量調整,即棧頂向上延伸SP永遠指向將要出棧的數據。數據入棧數據出棧入棧的數據全部出完,SP恢復初始值。77

堆疊操作指令(3)1.PUSHr16/m16/seg;“r16/m16/seg”作為源運算元,堆棧中的存儲單元作為目的運算元,指令操作如下:

①SP←SP-1,SS:[SP]←src高8位

②SP←SP-1,SS:[SP]←src低8位例1:PUSH[BX];(設DS:[BX]字單元數據為55AAH)xxHxxHxxHAAH55HxxHSS:[SP]指令執行前指令執行後SS:[SP]78

堆疊操作指令(4)2.POPr16/m16/seg;“r16/m16/seg”應看作目的運算元,堆疊中的單元看作源運算元,指令操作如下:

①dest低8位←SS:[SP],SP←SP+1②dest高8位←SS:[SP],SP←SP+1

例2:POPBX;設接在例1後執行。AAH55HxxHSS:[SP]指令執行前AAH55HxxHSS:[SP]指令執行後55AAHBX79

堆疊操作指令(5)(END)使用堆疊指令:①堆疊操作是字操作指令,不要寫出“PUSHAL”等。②在“POP”指令中,“POPCS”為非法指令。③堆疊中的數據彈出後,數據並沒有在堆疊中消失,

除非壓入新數據,畫圖時注意。④堆疊操作指令不影響標誌。④使用堆疊指令保護和恢復現場時,要注意指令的排列順序,如:PUSHAXPUSHBXPUSHDS......POPDSPOPBXPOPAX2.1節目錄802.1.3標誌傳送指令(1)2.1.3標誌傳送指令

1.標誌寄存器傳送

①LAHF

;AH←標誌寄存器低8位,即SF/ZF/AF

;PF/CF送AH相應位,不影響標誌。

②SAHF

;標誌寄存器低8位←AH,該條指令影;響前五個標誌。

③PUSHF

;標誌寄存器入棧,不影響標誌。

④POPF

;標誌寄存器←SS:[SP],SP←SP+2;;該指令影響標誌。81

標誌傳送指令(2)(end)2.標誌位操作(1)CF標誌★CLC;CF←0★STC;CF←1★CMC;CF←CF(2)DF標誌(串操作指令使用)★CLD;DF←0★STD;DF←1(3)IF標誌(控制可遮罩中斷能否被回應)★CLI;IF←0★STI;IF←1

注釋:對其他標誌沒有提供直接修改的指令,但是如果必要,可以用前述的四條標誌傳送指令結合邏輯運算指令進行修改。2.1節目錄822.1.4地址傳送指令(1)2.1.4地址傳送指令

1.有效地址傳送指令LEA

LEAr16,mem

;r16←mem所指單元的偏移地址例:設BX=0400H,SI=003CHLEABP,[2050h];執行後BP=2050HLEABP,[SI];執行後BP=003CHLEABX,[BX+SI];執行後BX=043CHLEABX,[BX+SI+0F62H];執行後BX=139EH備註:①指令中“r16”常用的寄存器是BX、BP、SI、DI。一般不使用其他寄存器。

②指令中源運算元常用的是變數名,而不是上面例子中例舉的形式,如:LEABX,WORD_VAR。所以,本條指令常被描述為“取變數的偏移地址”,屬常用指令。83

地址傳送指令(2)

2.指針傳送指令LDS

LDSr16,mem

;r16←mem,DS←mem+2

操作:①按mem規定的尋址方式計算某單元物理地址。②按計算出的物理地址做雙字操作,即前一個字(偏移指針)送r16,高位字(段指針)送DS。例:設DS=400H,BX=100H,SI=200H,

[04300]=2050H,[04302H]=0500HLDSSI,[BX+SI]執行後DS=0500H,SI=2050H

示意圖:LDSSI,[BX+SI]05H00H20H50H04000H0100H0200H+04300HDSx16BXSI04300HDSSI84

地址傳送指令(3)(end)3.指針傳送指令LES

LESr16,mem

;r16←mem,ES←mem+2操作解釋:基本與“LDS”指令相同,不同的是把段寄存器DS換成ES。

★其他問題:①“LEA”指令的作用為取偏移地址,要注意與“MOV”指令區別:設SI=2050H,DS:[2050H](DS:[SI])=55AAH

則“LEABX,[SI]”執行後,BX=

“MOVBX,[SI]”執行後,BX=②“LDS”的r16常用SI;“LES”中,r16常用DI。

③地址傳送指令不影響標誌。2050H55AAH2.1節目錄852.1.5輸入輸出指令(1)2.1.5輸入輸出指令

1.輸入指令INAL,i8;位元組輸入,AL←端口i8INAX,i8;字輸入,AL←端口i8,AH←端口i8+1INAL,DX;位元組輸入,AL←端口[DX]INAX,DX;字輸入,AL←端口[DX],AH←[DX+1]注釋:①“i8”從形式上來說是立即數,實際上是端口地址,因而指令的尋址方式為直接尋址。②“MOV”指令中,直接尋址要加中括弧,輸入輸出指令不加。(MOVAL,[2000H];INAL,25H)③第三、四兩條指令為寄存器間接尋址,但對DX不加中括弧。(moval,[bx];inal,dx)86

輸入輸出指令(2)2.輸出指令OUTi8,AL;位元組輸出,端口i8←ALOUTi8,AX;字輸出,端口i8←AL,端口i8+1←AHOUTDX,AL;位元組輸出,端口[DX]←ALOUTDX,AX;字輸出,端口[DX]←AL,[DX+1]←AH

注釋:①輸入輸出指令從尋址方式來說分成兩種:直接尋址和寄存器DX間接尋址。如果要訪問的端口地址在0~255之間,既可以用直接尋址,也可以用DX間接尋址;如果要訪問的端口地址≥256,則只能用DX間接尋址。②另外,輸入輸出指令中可用的數據寄存器只能是AL和AX,其他寄存器不可使用。③不影響標誌。87

輸入輸出指令(3)(end)

例題:(對錯混合)

1.INAL,205H(×)7.MOVAX,55AAH2.INAX,20HMOVDX,3FCH3.INAL,25HOUT[DX],AX4.INAH,0FFH(×)8.MOVAH,865.MOVDX,2050HOUT25H,AH(×)OUTDX,AL9.INAL,25H6.MOVDX,2050HMOVBL,ALINBX,DX(×)INAL,36H(OUTDX,BX)(×)MOVBH,AL……

2.1節目錄882.2節目錄2.2.1--2.2.6(算術)2.2算術運算指令

2.2.1加法指令

ADD/ADC/INC

2.2.2減法指令

SUB/SBB/DEC/NEG/CMP

2.2.3乘法指令MUL/IMUL

2.2.4除法指令DIV/IDIV

2.2.5符號擴展指令CBW/CWD

2.2.6十進位調整指令

(BCD)/DAA/DAS/AAA/AAS/AAM/AAD返回第二章892.2.1加法指令(1)

2.2.1加法指令

1.ADDADDreg/mem,imm;dest←dest+srcADDreg/mem,reg/mem

;dest←dest+src

;排除運算元:mem,mem2.ADC

指令格式同ADD;dest←dest+src+CF3.INC

INCreg/mem;reg/mem←reg/mem+190

加法指令(2)

注釋:

①加法指令對標誌的影響:ADD和ADC指令對所有的6個狀態標誌都有影響,INC指令不影響CF,影響其他五個標誌。學習加減法指令要會設置標誌、使用標誌。

②加減法運算要注意OF和CF的意義不同,用法不同。例題:(對錯混排)

ADDAL,25HADDBYTEPTR[BX],05ADDAL,125HADDWORDPTR[BX],05ADDAX,2500HADD[BX],2050HADDAX,05ADDAL,BLADD[BX],05ADDCH,DL91

加法指令(3)ADDBH,CXADDAX,DXADDSI,BPADDBX,[BX+SI]ADDDX,[BX+DI]ADDAX,[BX+BP]ADDAX,[SI+DI]ADD[BP+DI+205H],ALADD[BP+SI],CXADD[BX],[SI+05H]

前面所有指令都可以換成ADC。對於多位元組加法,最低字節(字)可以用ADD,剩下的應使用ADC。如(dxax)+(sidi)ADDAX,DI;低16位相加

ADCDX,SI;高16位相加+CFINC25HINCALINCCXINC[BX+SI]INCBYTEPTR[BX+SI]INCWOREPTR[BX+DI+25]92

加法指令(4)加法指令標誌設置設AL=76HADDAL,65H01110110+01100101

———————11011011AL=0DBH,OF=1,SF=1,ZF=0AF=0,PF=0,CF=0OF=1:只對有符號數運算有意義。看作有符號數是+118+101,應等於+219,大於+127,因而溢出。

CF=0:只對無符號數運算有意義。118+101=219,219<255,無進位。93

加法指令5end加法指令OF設置方法:①(正+負)或(負+正)永遠不會溢出,OF=0。②正+正,結果為正(符號位為0),OF=0。結果為負(符號位為1),OF=1。③負+負,結果為負(符號位為1),OF=0。結果為正(符號位為0),OF=1。計算0FCH+0FBH11111100+11111011

——————111110111看作有符號數運算:(-4)+(-5)=(-9)∴OF=0看作無符號數運算:252+251=503∴CF=1返回2.2942.2.2減法指令(1)

2.2.2減法指令

1.SUB

SUB

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论