安徽大學(xué)匯編語(yǔ)言程序設(shè)計(jì).ppt
《安徽大學(xué)匯編語(yǔ)言程序設(shè)計(jì).ppt》由會(huì)員分享,可在線閱讀,更多相關(guān)《安徽大學(xué)匯編語(yǔ)言程序設(shè)計(jì).ppt(469頁(yè)珍藏版)》請(qǐng)?jiān)谘b配圖網(wǎng)上搜索。
1、匯編語(yǔ)言程序設(shè)計(jì),,引言,課程介紹 課程的任務(wù)、目的和基本要求 主要教學(xué)內(nèi)容和學(xué)時(shí) 教學(xué)要求 主要參考書(shū) 作業(yè)、實(shí)驗(yàn)和考試,課程介紹,專(zhuān)業(yè)基礎(chǔ)課 軟件開(kāi)發(fā)的一個(gè)組成部分 一種低級(jí)語(yǔ)言的程序設(shè)計(jì),課程的任務(wù)、目的和基本要求,了解微型計(jì)算機(jī)的基本結(jié)構(gòu) 了解和掌握微型計(jì)算機(jī)的基本工作原理 掌握匯編語(yǔ)言及其應(yīng)用 能獨(dú)立完成簡(jiǎn)單的匯編語(yǔ)言程序設(shè)計(jì) 認(rèn)真完成作業(yè)和上機(jī)任務(wù),主要教學(xué)內(nèi)容和學(xué)時(shí),主要內(nèi)容1----8章 學(xué)時(shí):上課54學(xué)時(shí) 上機(jī)36學(xué)時(shí),教學(xué)要求,課堂上注意聽(tīng)講、重要的是理解 部分補(bǔ)充內(nèi)容需要記筆記 課堂外一定要看書(shū)復(fù)習(xí)或預(yù)習(xí)、完成作業(yè) 充分利用上機(jī)時(shí)間、多編程練習(xí),主要參考書(shū),80X8
2、6匯編語(yǔ)言程序設(shè)計(jì)教程,楊季文等著,清華大學(xué)出版社。 匯編語(yǔ)言程序設(shè)計(jì),錢(qián)曉捷著,電子工業(yè)出版社。 IBM PC匯編語(yǔ)言程序設(shè)計(jì),沈美明著,清華大學(xué)出版。,作業(yè)、實(shí)驗(yàn)和考試,考勤:15% 作業(yè) (15%):1次/1 2周 考試 (70%):閉卷考試 實(shí)驗(yàn) (單獨(dú)考試):9次,第一章 匯編語(yǔ)言基礎(chǔ)知識(shí),1.1 匯編語(yǔ)言簡(jiǎn)介 1.2 計(jì)算機(jī)中數(shù)據(jù)的表示 1.3 計(jì)算機(jī)組織,1.1 匯編語(yǔ)言簡(jiǎn)介,1.1.1 什么是匯編語(yǔ)言 1.1.2 為什么要學(xué)習(xí)匯編語(yǔ)言,1.1.1 什么是匯編語(yǔ)言,機(jī)器指令:cpu能直接識(shí)別并遵照?qǐng)?zhí)行的指令,用二進(jìn)制編碼表示,由操作碼,操作數(shù)組成,編碼只含二進(jìn)制0或1。 機(jī)器語(yǔ)言
3、:用二進(jìn)制編碼組成的機(jī)器指令的集合和一組使用機(jī)器指令的規(guī)則。 匯編語(yǔ)言:對(duì)機(jī)器指令中的操作碼用英文單詞的縮寫(xiě)描述(助記符),對(duì)操作數(shù)用標(biāo)號(hào)、變量、常量描述。,,用匯編語(yǔ)言編寫(xiě)的程序稱(chēng)為匯編源程序。 匯編語(yǔ)言是一種符號(hào)語(yǔ)言,比機(jī)器語(yǔ)言容易理解和掌握,也容易調(diào)試和維護(hù)。但是,匯編語(yǔ)言源程序要翻譯成機(jī)器語(yǔ)言程序才可以由計(jì)算機(jī)執(zhí)行。這個(gè)翻譯的過(guò)程稱(chēng)為“匯編”,這種把匯編源程序翻譯成目標(biāo)程序的語(yǔ)言加工程序稱(chēng)為匯編程序。,1.1.2 為什么要學(xué)習(xí)匯編語(yǔ)言,匯編語(yǔ)言程序是用符號(hào)指令寫(xiě)成的,本質(zhì)上是機(jī)器語(yǔ)言。與具體機(jī)器的機(jī)型的硬件密切相關(guān),可以直接有效地控制計(jì)算機(jī)硬件,程序運(yùn)行速度快,程序短小精悍,占用內(nèi)存少
4、,在某些特殊應(yīng)用場(chǎng)合更能發(fā)揮作用。如:智能化儀表 家用電器 實(shí)時(shí)控制系統(tǒng) 單片機(jī)控制 病毒研究等。 使用匯編語(yǔ)言能從根本上認(rèn)識(shí)和理解計(jì)算機(jī)的工作過(guò)程,它可直接而精確地控制計(jì)算機(jī)硬件的操作。 學(xué)習(xí)匯編語(yǔ)言對(duì)從事計(jì)算機(jī)的研究和開(kāi)發(fā)有著重要的意義。所以,它作為一門(mén)計(jì)算機(jī)專(zhuān)業(yè)基礎(chǔ)課,并對(duì)計(jì)算機(jī)專(zhuān)業(yè)今后課程的學(xué)習(xí)是非常重要的。,1.1.3 匯編語(yǔ)言的特點(diǎn),與機(jī)器有關(guān):移植性差,但可直接控制硬件。 程序效率高。 編寫(xiě)匯編語(yǔ)言源程序比編寫(xiě)高級(jí)語(yǔ)言源程序煩瑣。 調(diào)試?yán)щy。,1.2 計(jì)算機(jī)中數(shù)據(jù)的表示,1.2.1 不同進(jìn)位計(jì)數(shù)制及其相互轉(zhuǎn)換 1.2.2 二進(jìn)制數(shù)和十六進(jìn)制數(shù)的運(yùn)算 1.2.3 帶符號(hào)數(shù)的表示 1
5、.2.4 補(bǔ)碼的加法和減法 1.2.5 無(wú)符號(hào)數(shù)的表示 1.2.6 字符的表示 1.2.7 基本邏輯運(yùn)算,1.2.1 不同進(jìn)位計(jì)數(shù)制及其相互轉(zhuǎn)換,1.進(jìn)位計(jì)數(shù)制 對(duì)于任意一個(gè)進(jìn)位計(jì)數(shù)制,如果用R表示基數(shù),那么任何一個(gè)數(shù)S均可用如下多項(xiàng)式表示: S= knRn+kn-1Rn-1++k0R0+k-1R-1+k-2R-2 ++k-mR-m,,十進(jìn)制數(shù): 123.6(D)=1102+2101+3100+610(-1) 各位權(quán)值 10k 二進(jìn)制數(shù): 101101(B) = 125+123+122+120=45(D) 各位權(quán)值 2k 十六進(jìn)制數(shù): 5F(H)=5161+15160(D)
6、 各位權(quán)值 16k,,在書(shū)寫(xiě)不同進(jìn)位計(jì)數(shù)制數(shù)時(shí),常常在尾部用一個(gè)字母來(lái)表示該數(shù)是什么進(jìn)位計(jì)數(shù)制的數(shù)。 結(jié)尾用B(2進(jìn)制數(shù))、O(8進(jìn)制數(shù))、D(10進(jìn)制數(shù))、H(16進(jìn)制數(shù))。缺省為十進(jìn)制數(shù)。例如712O、9198D、10010B、BE49H等等。,,2.各種數(shù)制間的相互轉(zhuǎn)換 例如: 13 .8125 D = 1101.1101B = D.DH,,二進(jìn)制數(shù)轉(zhuǎn)換為十進(jìn)制數(shù) 方法:各位二進(jìn)制數(shù)碼乘以對(duì)應(yīng)的權(quán)之和 例:1.1 十六進(jìn)制數(shù)轉(zhuǎn)換為十進(jìn)制數(shù) 方法:各位十六進(jìn)制數(shù)碼乘以對(duì)應(yīng)的權(quán)之和 例: 1.2,,十進(jìn)制數(shù)轉(zhuǎn)換為二進(jìn)制數(shù) (1)降冪法:先寫(xiě)出小于此數(shù)的各位二進(jìn)制權(quán) 值,然后再求和
7、。(適用于數(shù)值不大的數(shù)) 例:1.3 (2)除法:不斷除以2,計(jì)下余數(shù),直到商為0為止。(僅適用于整數(shù)部分) 例:1.4,,對(duì)于十進(jìn)制數(shù)的小數(shù)部分除了可以使用降冪法也可采用乘法,即不斷乘2,并計(jì)下整數(shù),而小數(shù)部分再乘2,直到結(jié)果為0為止。 并非所有的十進(jìn)制小數(shù)都能用二進(jìn)制完全表示,可按需要取一定精度即可。 例:1.5,,十進(jìn)制數(shù)轉(zhuǎn)換為十六進(jìn)制數(shù) (1)降冪法:先寫(xiě)出小于此數(shù)的各位十六進(jìn)制權(quán)值,然后再求和。(適用于數(shù)值不大的數(shù)) 例:1.6 (2)除法:不斷除以16,計(jì)下余數(shù),直到商為0為止。(僅適用于整數(shù)部分) 例:1.7,,對(duì)于十進(jìn)制數(shù)的小數(shù)部分除了可以使用降冪法也可采用乘法,即不
8、斷乘16,并計(jì)下整數(shù),而小數(shù)部分再乘16,直到結(jié)果為0為止。 并非所有的十進(jìn)制小數(shù)都能用十六進(jìn)制完全表示,可按需要取一定精度即可。,,二進(jìn)制數(shù)和十六進(jìn)制數(shù)的相互轉(zhuǎn)換 直接轉(zhuǎn)換,每四位一組,整數(shù)從低位開(kāi)始,小數(shù)從高位開(kāi)始,不足位補(bǔ)0。 例:1.8,1.2.2 二進(jìn)制數(shù)和十六進(jìn)制數(shù)運(yùn)算,二進(jìn)制運(yùn)算 加法規(guī)則: 0+0 =0 1+0=1 0+1=1 1+1=0(進(jìn)位1) 乘法規(guī)則: 00=0 10=0 01=0 11=1 十六進(jìn)制數(shù)運(yùn)算 原則:逢十六進(jìn)一 例1.9,1.10,1.11,1.2.3 帶符號(hào)數(shù)的表示,帶符號(hào)數(shù)最高位是符號(hào)位。 正數(shù)的符號(hào)位為0,負(fù)數(shù)的符號(hào)位為1。 表示方法:原碼、
9、補(bǔ)碼、反碼。,,,,,數(shù)的補(bǔ)碼表示 定義: (X=0時(shí)) X補(bǔ)=符號(hào)+|X| ------(1) (X<0時(shí)) X補(bǔ)= 2n - |X| =( 2n - 1-|X| ) + 1 ---(2) 即X<0時(shí): X補(bǔ) + |X| = 2n 數(shù)的補(bǔ)碼具體操作是: 正數(shù)不變,負(fù)數(shù)則用絕對(duì)值取反+1,,例1.12 X補(bǔ) 求補(bǔ)等于 -X補(bǔ) 等于|X|(X<0) 例1.13,1.2.4 補(bǔ)碼的加減法,加法規(guī)則:X+Y補(bǔ)=X補(bǔ)+Y補(bǔ) 減法規(guī)則:X-Y補(bǔ)=X補(bǔ)+-Y補(bǔ) 例:1.14,1.2.5 無(wú)符號(hào)數(shù)的表示,對(duì)于正數(shù),不保留符號(hào)位,把符號(hào)位也作為數(shù)值,這樣的數(shù)叫無(wú)符號(hào)數(shù)
10、。,1.2.6 字符的表示,ASCII碼 擴(kuò)充的ASCII碼 表1.1,1.2.7 基本邏輯運(yùn)算,邏輯運(yùn)算按位操作 與運(yùn)算 AND 或運(yùn)算 OR 異或運(yùn)算 XOR 非運(yùn)算 NOT,1.3 計(jì)算機(jī)組織,1.3.1 計(jì)算機(jī)系統(tǒng)組成 1.3.2 中央處理器 1.3.3 存儲(chǔ)器 1.3.4 外部設(shè)備和接口,1.3.1 計(jì)算機(jī)系統(tǒng)組成,,,中央處理機(jī) CPU 對(duì)匯編語(yǔ)言程序員,最關(guān)心其中的寄存器。 存儲(chǔ)器 RAM 呈現(xiàn)給匯編語(yǔ)言程序員的,是存儲(chǔ)器地址。 輸入輸出子系統(tǒng) I/O 匯編語(yǔ)言程序員看到的是端口(I/O地址)。 系統(tǒng)總線 數(shù)據(jù)總線, 地址總線, 控制總線 。,1.3.2 中央處理器CPU
11、,CPU 的發(fā)展: 8088 (準(zhǔn)16位機(jī)) 8086:16位機(jī),16位通用寄存器,20位地址線,1M尋址. 80286(準(zhǔn)32位機(jī)) 80386 : 32位機(jī),32位通用寄存器,32位地址線,4G尋址. 80486 80586:1993,字長(zhǎng)32位,主頻60-166M,數(shù)據(jù)總線64,地址總線32,尋址4G 80686 P:1997,字長(zhǎng)32位,主頻-333 M,數(shù)據(jù)總線64,地址總線32,尋址4G P:1999, 字長(zhǎng)32位,主頻-600 M,數(shù)據(jù)總線64,地址總線36,尋址64G P,1)CPU的組成,運(yùn)算器 控制器 寄存器 高速緩存,2)寄存器組,通用數(shù)據(jù)寄存器 AX =AH
12、AL 累加器 BX =BH BL 基址寄存器 CX =CH CL 計(jì)數(shù)寄存器 DX =DH DL 數(shù)據(jù)寄存器,,通用地址寄存器 SP 堆棧指針 BP 基址指針 DI 目的變址寄存器(自動(dòng)增1/減1) SI 源變址寄存器(自動(dòng)增1/減1),,段寄存器 CS 代碼段寄存器 DS 數(shù)據(jù)段寄存器 ES 附加段寄存器 SS 堆棧段寄存器,,專(zhuān)用寄存器 IP 指令指針寄存器 FLAGS 標(biāo)志寄存器 狀態(tài)標(biāo)志和控制標(biāo)志,,1.3.3 存儲(chǔ)器,存儲(chǔ)器分內(nèi)存和外存,這里指內(nèi)存,外存指硬盤(pán)等。 存儲(chǔ)器按作用分: RAM ROM(C000FFFF) Cache(緩沖C
13、PU與低速的RAM),1)存儲(chǔ)單元的地址和內(nèi)容,,,80 x86微機(jī)的內(nèi)存儲(chǔ)器以字節(jié)為基本存儲(chǔ)單位,或叫基本存儲(chǔ)單元。 每一個(gè)存儲(chǔ)單元對(duì)應(yīng)一個(gè)唯一的存儲(chǔ)器地址,從低到高按順序編號(hào),稱(chēng)為物理地址。 存儲(chǔ)單元的地址從0開(kāi)始編號(hào),機(jī)器中地址以二進(jìn)制數(shù)表示,無(wú)符號(hào)數(shù),書(shū)寫(xiě)用十六進(jìn)制。 80 x86微機(jī)使用20位地址線,尋址能力為1MB,范圍為00000HFFFFFH。,,一個(gè)存儲(chǔ)單元中存放的信息 稱(chēng)為該存儲(chǔ)單元的內(nèi)容。 一個(gè)字存放在連續(xù)單元,低位對(duì)低地址,高位對(duì)高地址,訪問(wèn)時(shí)以低地址訪問(wèn)。,2)存儲(chǔ)器的分段,? 字長(zhǎng)16位表示地址,可表示多少字節(jié)單元。 210=1024=1K 216=65536=
14、64K 0---65535 地址編號(hào)十六進(jìn)制: 0---FFFFH ? 用什么辦法提供20位地址。,,注:相當(dāng)于從0地址開(kāi)始,每16個(gè)字節(jié)為一小段,段地址必須從任一小段的首地址開(kāi)始。,,,用段地址:偏移地址表示邏輯地址。 每個(gè)邏輯地址對(duì)應(yīng)一個(gè)唯一的物理地址,但每個(gè)物理地址并不對(duì)應(yīng)唯一的邏輯地址。 例如:邏輯地址2BH:23H和邏輯地址2CH:13H 邏輯地址2BH:23H的物理地址為: 2B0H + 23H = 2D3H 邏輯地址2CH:13H的物理地址為: 2C0H + 13H = 2D3H 程序中使用的是邏輯地址。,1.3.4 外部設(shè)備和接口,外部設(shè)備也稱(chēng)作輸入/輸
15、出設(shè)備或I/O設(shè)備。 外部設(shè)備和主機(jī)之間通過(guò)輸入/輸出接口連接,接口內(nèi)有若干寄存器,用于在外設(shè)和CPU間傳遞信息。 每個(gè)寄存器規(guī)定一個(gè)端口(Port)號(hào),也稱(chēng)作I/O地址。,,寄存器(端口)可分為3類(lèi): 數(shù)據(jù)端口、控制端口、狀態(tài)端口 通常采用十六進(jìn)制數(shù)來(lái)表達(dá)端口 Intel 8086支持64K個(gè)8位端口 其I/O地址可以表示為:0000H FFFFH,,通過(guò)調(diào)用例行程序進(jìn)行 BIOS Basic Input/Output System (存在ROM中) DOS Disk Operating System (存在磁盤(pán)中),第二章 匯編語(yǔ)言程序?qū)嵗吧蠙C(jī)操作,實(shí)踐性很強(qiáng),結(jié)合
16、上機(jī)是最好的學(xué)習(xí)方法。,2.1 匯編語(yǔ)言程序?qū)嵗?2.1.1 實(shí)例1 2.1.2 實(shí)例2,例2.1 單個(gè)字符的鍵盤(pán)輸入與顯示輸出程序,code segment assume cs:code start: mov ah,1 int 21h mov dl,al add dl,1 mov ah,2 int 21h mov ah,4ch int 21h code ends end start 運(yùn)行結(jié)果:鍵入A接著顯示B,鍵入K接著顯示L,例2.2 編寫(xiě)顯示“HELLO,WORLD!” 程序。,data se
17、gment String db HELLO,WORLD! $ data ends code segment assume cs:code,ds:data start: mov ax,data mov ds,ax mov dx,offset string mov ah,9 int 21h mov ah,4ch int 21h code ends end start,2.2 工作環(huán)境及上機(jī)操作,2.2.1 匯編語(yǔ)言的系統(tǒng)工作文件 2.2.2 進(jìn)入DOS命令行方式 2.2.3 編輯建立ASM源程序文件 2.2.4 匯編產(chǎn)
18、生OBJ二進(jìn)制目標(biāo)文件 2.2.5 連接產(chǎn)生EXE可執(zhí)行文件 2.2.6 程序的運(yùn)行和調(diào)試,2.2.1 匯編語(yǔ)言的系統(tǒng)工作文件,使用編輯程序編輯源程序文件(.asm) 使用匯編程序(MASM)將源程序文件(.asm)匯編成目標(biāo)文件(.obj) 使用連接程序(LINK),將目標(biāo)文件(.obj)連接成可執(zhí)行文件(.EXE) 使用調(diào)式程序(DEBUG),調(diào)式可執(zhí)行文件,運(yùn)行匯編語(yǔ)言程序需要以下文件,編輯程序 EDIT.COM 匯編程序 MASM.EXE 連接程序 LINK.EXE 調(diào)試程序 DEBUG.EXE,注意幾點(diǎn),本書(shū)使用Microsoft Masm6.0版本。 EDIT.COM 和 DEBU
19、G.EXE為系統(tǒng)自帶。 MASM.EXE 和 LINK.EXE不是系統(tǒng)自帶。 為方便操作,系統(tǒng)文件和用戶(hù)文件盡可能放在同一文件目錄下。,2.2.2 進(jìn)入DOS命令行方式,程序---附件---命令提示符 運(yùn)行---CMD 退出用EXIT,2.2.3 編輯建立ASM源程序文件,利用EDIT編輯源文件: CEDIT CEDIT 文件名.ASM 例如文件名為 Hello.ASM 在EDIT程序中,將我們編寫(xiě)的匯編程序輸入到計(jì)算機(jī)中,并將Hello.ASM保存為源程序。然后退出EDIT程序,回到DOS狀態(tài)。,2.2.4 匯編產(chǎn)生OBJ二進(jìn)制目標(biāo)文件,源程序建立后,就要用匯編程序?qū)υ闯绦騾R編,匯編
20、后產(chǎn)生二進(jìn)制的目標(biāo)文件(OBJ文件),其操作與匯編程序回答如下: CMASM Hello.ASM Microsoft (R) Macro Assmbler Version 5.0 Copyright (C) Microsoft Corp 1981-1985,1987,All rights reserved Object filename Hello.OBJ: Source listingNUL.LST: Cross-reference NUL.CRF: 51646 + 447778 Bytes symbol space free 0 Warning Errors
21、0 Severe Errors 說(shuō)明: Hello.OBJ 目標(biāo)文件,這是匯編的主要目的 Hello.LST 列表文件,可有可無(wú) Hello.CRF 交叉引用表,可有可無(wú) 0 Warning Errors 0個(gè)警告錯(cuò)誤 0 Severe Errors 0個(gè)嚴(yán)重錯(cuò)誤,2.2.5 連接產(chǎn)生EXE可執(zhí)行文件,匯編程序已產(chǎn)生出二進(jìn)制的目標(biāo)文件(OBJ),但OBJ文件并不是可執(zhí)行文件,還必須用連接程序(LINK)把OBJ文件轉(zhuǎn)換為可執(zhí)行的EXE文件。當(dāng)然,如果一程序由多個(gè)模塊組成時(shí),也應(yīng)該通過(guò)LINK把它們連接在一起。操作如下: CLINK Hello.OBJ
22、 CLINK Hello1+Hello2+Hello3 Run fileHello.ASM.EXE: List FileNUL.MAP: Libraries .LIB: LINK : Warning L4012: no stack segment 一般情況下,用戶(hù)只需要按回車(chē)使用默認(rèn)值就可以了。 兩個(gè)輸入文件 兩個(gè)輸出文件 OBJ文件 EXE 文件 LIB文件(庫(kù)文件) MAP 文件(連接映像文件),2.2.6 程序的運(yùn)行和調(diào)試,建立了EXE文件后,就可以直接在DOS的提示符下,輸入EXE文件的文件名,如: CHello 直接運(yùn)行程
23、序。 對(duì)EXE文件無(wú)需擴(kuò)展名就可執(zhí)行。 真正的可執(zhí)行文件是生成的,不是用改名操作得到的。,,調(diào)試程序DEBUG .EXE是WINDOWS系統(tǒng)自帶的。 DEBUG Hello.EXE “-” DEBUG命令提示符,2.3 DEBUG 主要命令,格式如下: C:DEBUG 或 C: DEBUG 盤(pán)符路徑要調(diào)試的程序 DEBUG中的數(shù)據(jù)顯示均為十六進(jìn)制。,1. 反匯編命令U,格式1:U 地址 地址用偏移地址或者段地址:偏移地址表示。該命令從指定的地址開(kāi)始,把機(jī)器語(yǔ)言反匯編為匯編語(yǔ)言。若省去指定地址,則以上一個(gè)U命令反匯編的最后一條指令地址的下一個(gè)單元作為起始地址。 格式2:U 范圍
24、范圍用a1 a2 或者aLb表示。對(duì)指定范圍的內(nèi)存單元進(jìn)行反匯編,范圍可以由起始地址、結(jié)束地址或起始地址及長(zhǎng)度來(lái)確定。,2. 顯示內(nèi)存命令D,格式1:D 地址 從指定的地址開(kāi)始,顯示內(nèi)存,便于用戶(hù)看數(shù)據(jù)。 格式2:D 范圍 顯示指定范圍的內(nèi)存內(nèi)容。,3. 運(yùn)行程序命令G,格式:G=起始地址中止地址 起始地址規(guī)定了執(zhí)行的起始地址。 中止地址是斷點(diǎn)地址,讓程序暫停在某個(gè)位置 =不能省掉。 若省掉起始地址,則以當(dāng)前CS:IP作為起始地址。 默認(rèn)段地址在段寄存器CS中。,4. 寄存器顯示和修改命令R,格式1:R 顯示所有寄存器內(nèi)容和全部標(biāo)志的狀態(tài)。 格式2:R 寄存器名 顯示和修改寄
25、存器內(nèi)容,若不修改其內(nèi)容,則按CR鍵;若要修改,可輸入修改后的14個(gè)16進(jìn)制字符值,再按CR 鍵。 格式3:R F 顯示FLAGS寄存器并接受新值。,5. 跟蹤程序命令TQ,格式1:T=起始地址 單步執(zhí)行程序,在指令執(zhí)行中逐條進(jìn)行跟蹤,若省去地址,則從CS:IP現(xiàn)行值執(zhí)行。 格式2:T=起始地址指令條數(shù) 可對(duì)多條指令進(jìn)行跟蹤。 注意:對(duì)于INT指令不能使用T命令跟蹤。,,,-A 匯編命令(輸入程序) 格式:A 地址 -N 文件命名命令 格式:N 文件名 -L 裝入命令 格式:L 地址 驅(qū)動(dòng)器 扇區(qū)號(hào) 扇區(qū)數(shù) L 地址,,-W 寫(xiě)命令 格式:W 地址 驅(qū)動(dòng)器
26、扇區(qū)號(hào) 區(qū)段數(shù) W 地址 -E 修改內(nèi)存單元內(nèi)容 格式1:E 地址 內(nèi)容表 用給定的內(nèi)容表去代替指定范圍的內(nèi)存單元的內(nèi)容 格式2:E 地址 可連續(xù)逐個(gè)修改內(nèi)存單元的內(nèi)容。按CR鍵結(jié)束E命令 -H 十六進(jìn)制運(yùn)算命令 格式:H val1 val2 輸出為val1+val2 val1-val2,,-M 移動(dòng)命令 格式:M range address -Q 退出命令 格式:-Q 該命令退出DEBUG程序,并返回到DOS -?查看命令格式 格式:-? 顯示全部DEBUG命令格式,2.4 常用的DOS命令,MD 建立目錄 E: MD MASM 建立MASM
27、目錄 CD 顯示或改變當(dāng)前目錄 E: CD 顯示當(dāng)前目錄 E: CD MASM 進(jìn)入MASM目錄 E: MASM CD.. 退到上一目錄 E: MASM CD 退到根目錄E:,,RD 刪除目錄 E: RD MASM 刪除MASM目錄 DIR 顯示目錄或文件 E: DIR 列出當(dāng)前目錄下的子目錄和文件 E: DIR *.ASM 列出所有擴(kuò)展名為ASM的文件, *為通配符 E: DIR HELLO.* 列出所有名為HELLO而擴(kuò)展名 不限的文件 E: DIR HE*.??? 列出所有名前兩個(gè)字符為HE, 而擴(kuò)展名為三個(gè)字符的文件
28、,,REN 改變文件名 E: REN H1.TXT H2.TXT COPY 復(fù)制文件 E: COPY H1.TXT H2.TXT E: COPY A+B C.TXT,,TYPE 顯示文本文件的內(nèi)容 E: TYPY H1.TXT CLS 清屏 SET PATH設(shè)置或顯示可執(zhí)行文件的搜索路徑 E: PATH 顯示可執(zhí)行文件的搜索路徑 E: SET PATH 顯示可執(zhí)行文件的搜索路徑,,HELP 顯示命令格式和用法 E: HELP 顯示所有命令的格式 E: HELP DIR 顯示DIR命令的用法 輸出的重定向 E: DIR C.TXT 把DIR顯示結(jié)果輸出到
29、文件 C.TXT,2.5 幾個(gè)常用的DOS系統(tǒng)功能調(diào)用,21H號(hào)中斷是DOS提供給用戶(hù)的用于調(diào)用系統(tǒng)功能的中斷,它有近百個(gè)功能供用戶(hù)選擇使用,主要包括設(shè)備管理、目錄管理和文件管理三個(gè)方面的功能。 匯編語(yǔ)言程序設(shè)計(jì)需要采用系統(tǒng)的各種功能程序。,功能調(diào)用的格式,通常按照如下4個(gè)步驟進(jìn)行: 在AH寄存器中設(shè)置系統(tǒng)功能調(diào)用號(hào) 在指定寄存器中設(shè)置入口參數(shù) 執(zhí)行指令I(lǐng)NT 21H,實(shí)現(xiàn)中斷服務(wù)程序的功能調(diào)用 根據(jù)出口參數(shù)分析功能調(diào)用執(zhí)行情況,1. 鍵盤(pán)輸入一個(gè)字符并回顯,DOS功能調(diào)用INT 21H 功能號(hào):AH01H 出口參數(shù):AL輸入字符的ASCII碼 功能:等待從鍵盤(pán)輸入一個(gè)字符,該字符的A
30、SCII碼送AL,并送屏幕顯示。 調(diào)用此功能時(shí),若無(wú)輸入,則會(huì)一直等待,直到輸入后才繼續(xù)。,,mov ah,01h;功能號(hào):ah01h int 21h;功能調(diào)用 cmp al,Y;處理出口參數(shù)al je yeskey;是“Y” cmp al,N je nokey;是“N” yeskey:... nokey:...,2. 顯示一個(gè)字符,DOS功能調(diào)用INT 21H 功能號(hào):AH02H 入口參數(shù):DL輸出字符 功能:在顯示器當(dāng)前光標(biāo)位置顯示給定的字符,光標(biāo)右移一個(gè)字符位置。,,在當(dāng)前顯示器光標(biāo)位置顯示一個(gè)問(wèn)號(hào) mov ah,02h;設(shè)置功能號(hào):ah02h mov dl,?;提供入口參數(shù):dl
31、? int 21h ;DOS功能調(diào)用:顯示問(wèn)號(hào),3. 顯示字符串,DOS功能調(diào)用INT 21H 功能號(hào):AH09H 入口參數(shù):DS:DX欲顯示字符串在主存中的首地址;字符串應(yīng)以$(24H)結(jié)束 功能:顯示由DS:DX指定的字符串,,string db Hello,Everybody! $ ;在數(shù)據(jù)段定義要顯示的字符串 ... mov ah,09h ;設(shè)置功能號(hào) ah09h mov dx, offset string;提供入口參數(shù) dx字符串的偏移地址 int 21h ;DOS功能調(diào)用字符串顯示,4. 鍵盤(pán)輸入到緩沖區(qū),DOS功能調(diào)用INT 21H 功能號(hào):AH0AH 入
32、口參數(shù):DS:DX緩沖區(qū)首地址 (DS:DX)緩沖區(qū)字節(jié)數(shù) 功能:輸入到緩沖區(qū),緩沖區(qū)的定義,第1字節(jié)事先填入最多欲接收的字符個(gè)數(shù)(包括回車(chē)字符,可以是1255) 第2字節(jié)將存放實(shí)際輸入的字符個(gè)數(shù)(不包括回車(chē)符) 第3字節(jié)開(kāi)始將存放輸入的字符串 實(shí)際輸入的字符數(shù)多于定義數(shù)時(shí),多出的字符丟掉,且響鈴,,bufferdb 81 ;定義緩沖區(qū) ;第1個(gè)字節(jié)填入可能輸入的 最大字符數(shù) db ? ;存放實(shí)際輸入的字符數(shù) db 81 dup(?) ;存放輸入的字符串 ... mov dx, seg buffer;偽指令seg取得buffer的段地址 mov ds, d
33、x;設(shè)置數(shù)據(jù)段DS mov dx, offset buffer mov ah, 0ah int 21h,5. 寫(xiě)文件或設(shè)備,DOS功能調(diào)用INT 21H 功能號(hào):AH40H 入口參數(shù):DS:DX數(shù)據(jù)區(qū)首地址 BX=文件代號(hào) CX=寫(xiě)入的字節(jié)數(shù) 功能:把數(shù)據(jù)區(qū)內(nèi)容輸出到文件或設(shè)備,,MOV AH,40H ;設(shè)置功能號(hào) AH40H LEA DX,STR ;設(shè)置數(shù)據(jù)區(qū)首地址 MOV BX,1;文件代號(hào)1表示標(biāo)準(zhǔn)設(shè)備顯示器 MOV CX,9;輸出9個(gè)字節(jié) INT 21H ;,6. 結(jié)束程序返回DOS,DOS功能調(diào)用INT 21H 功能號(hào):AH4CH 入口參數(shù): AL返回碼 功能:結(jié)束程
34、序返回DOS MOV AH,4CH INT 21H,第三章 指令系統(tǒng)和尋址方式,3.1 尋址方式 3.2 指令系統(tǒng) 3.3 80386后繼機(jī)型的新增擴(kuò)展指令和尋址方式,3.1 尋址方式,3.1.1 指令結(jié)構(gòu) 3.1.2 操作數(shù)的尋址方式,,計(jì)算機(jī)中的指令由操作碼和操作數(shù)組成。 操作數(shù)字段可以有一個(gè)、兩個(gè)或三個(gè),通常稱(chēng)為一地址、二地址或三地址指令。 二地址指令中兩個(gè)操作數(shù)分別稱(chēng)為源操作數(shù)和目的操作數(shù)。 所謂尋址方式就是指令中尋找操作數(shù)的方式。,3.1.1 指令結(jié)構(gòu),80 x86匯編語(yǔ)言指令的一般格式位: 標(biāo)號(hào): 指令助記符 操作數(shù) ;注釋 中的內(nèi)容位可選項(xiàng)。,,標(biāo)號(hào):符號(hào)地址,表示指令在內(nèi)存
35、中的位置。標(biāo)號(hào)后應(yīng)加冒號(hào):。 指令助記符:指令名稱(chēng),是指令功能的英文縮寫(xiě)。 操作數(shù):指令要操作的數(shù)據(jù)或數(shù)據(jù)所在的地址。寄存器,常量,變量,表達(dá)式。 注釋?zhuān)好啃幸苑痔?hào)“;”開(kāi)頭,匯編程序不處理。,3.1.2 操作數(shù)的尋址方式,立即尋址方式 操作數(shù)就在指令中,緊跟在操作碼之后,操作數(shù)作為指令的一部分存放在代碼段。 例 MOV AL, 5H 執(zhí)行完此條指令后(AL)=05H MOV AX, 3064H,,注意:,執(zhí)行時(shí)無(wú)需去內(nèi)存取數(shù),因此稱(chēng)為立即數(shù)。 主要用于寄存器賦初值。 立即數(shù)只能作為源操作數(shù),并且長(zhǎng)度與目的操作數(shù)一致。,,寄存器尋址方式 操作數(shù)就是寄存器中的值。指令中給出寄存器名。
36、 例 MOV AL, BL MOV AX, BX MOV AL, BX 錯(cuò) MOV AX, BL 錯(cuò),注意:,以上兩種尋址方式都與存儲(chǔ)器無(wú)關(guān)。 以下各種尋址方式的操作數(shù)都在存儲(chǔ)器中。 偏移地址也稱(chēng)為有效地址(EA)。,,直接尋址方式 操作數(shù)的有效地址EA就在指令中。機(jī)器默認(rèn)段地址在DS中。,,例 3.4 例 3.5 例 3.6,,寄存器間接尋址方式 操作數(shù)的有效地址在寄存器中,只允許使用BX、BP、SI和DI寄存器。 物理地址=16d x (DS) + (BX) 物理地址=16d x (DS) + (SI ) 物理地址=16d x (DS) + (DI )
37、物理地址=16d x (SS) + (BP),,例 3.7,,寄存器相對(duì)尋址方式 操作數(shù)的有效地址是寄存器和位移量之和。 位移量可以是8位/16位的常量,也可以是16 位的符號(hào)地址。 只允許使用BX、BP、SI和DI寄存器。 默認(rèn)搭配和寄存器間接尋址方式一樣。 例3.8,,,MOV AX, COUNTSI MOV AX, COUNT+SI 當(dāng)COUNT 為16位位移量的符號(hào)地址時(shí): 如 DS=3000H, SI=2000H, COUNT=4000H ; (36000H)=34H,(36001H)=12H 物理地址=16d x (段值) + EA =30000H+2000H
38、+4000H=36000H,,基址變址尋址方式 操作數(shù)的有效地址是一個(gè)基址寄存器和一個(gè)變址寄存器內(nèi)容之和。 物理地址=16d x (DS) + (BX) + (SI) 物理地址=16d x (DS) + (BX) + (DI) 物理地址=16d x (SS) + (BP) + (SI) 物理地址=16d x (SS) + (BP) + (DI),,,相對(duì)基址變址尋址方式 操作數(shù)的有效地址是一個(gè)基址寄存器和一個(gè)變址寄存器以及一個(gè)位移量之和。 基址寄存器BX和BP,變址寄存器SI和DI。 默認(rèn)段寄存器搭配和寄存器間接尋址方式一樣。 例3.10,,注意,雙操作數(shù)指令的兩個(gè)操作數(shù)中
39、,只能有一個(gè)使用存儲(chǔ)器尋址方式。 雙操作數(shù)指令的兩個(gè)操作數(shù),長(zhǎng)度須匹配。 操作數(shù)的有效地址前可以加段跨越前綴,但在以下三種情況下不允許: 串處理指令的目的串必須用ES段 PUSH指令的目的和POP指令的源必須用SS段 指令必須存放在CS段,3.2 指令系統(tǒng),3.2.1 數(shù)據(jù)傳送指令 3.2.2 類(lèi)型擴(kuò)展指令 3.2.3 算術(shù)運(yùn)算指令 3.2.4 邏輯指令 3.2.5 移位指令 3.2.6 串操作指令 3.2.7 程序轉(zhuǎn)移指令 3.2.8 處理器控制指令,,8086指令系統(tǒng)可以分為八組: (1)數(shù)據(jù)傳送指令 (2)類(lèi)型擴(kuò)展指令 (3)算術(shù)運(yùn)算指令 (4)邏輯指令 (5)移位指
40、令 (6)串操作指令 (7)程序轉(zhuǎn)移指令 (8)處理機(jī)控制指令,3.2.1 數(shù)據(jù)傳送指令,通用數(shù)據(jù)傳送指令 累加器專(zhuān)用傳送指令 地址傳送指令 標(biāo)志寄存器傳送,1. 通用數(shù)據(jù)傳送指令,MOV 傳送 PUSH 進(jìn)棧 POP 出棧 XCHG 交換,(1)MOV傳送指令,格式: MOV DST, SRC 操作: (DST)(SRC) DST 表示目的操作數(shù), SRC 表示源操作數(shù)。 功能:將源操作數(shù)傳送到目的操作數(shù)。,雙操作數(shù)指令的規(guī)定,源操作數(shù)與目的操作數(shù)的長(zhǎng)度必須一致。 源操作數(shù)與目的操作數(shù)不能同時(shí)為存儲(chǔ)器。 目的操作數(shù)不能為CS和IP,因?yàn)镃S:
41、IP是程序當(dāng)前地址。,,例3.11 例3.12 例3.13 例3.14 例3.15 例3.16,(2)PUSH 進(jìn)棧指令,格式: PUSH SRC 操作: (SP)(SP)-2 (( SP)+1,(SP))(SRC) 堆棧:后進(jìn)先出內(nèi)存區(qū),以字為單位傳送,SS:SP總是指向棧頂。 例3.17,(3)POP出棧指令,格式: POP DST 操作: (DST)((SP)+1,(SP)) (SP)(SP)+2 例3.18,(4)XCHG交換指令,格式: XCHG OPR1, OPR2 操作: (OPR1) (OPR2) 功能:把兩個(gè)操作數(shù)互換位置。 遵循雙操作數(shù)指令的規(guī)定,但操作數(shù)不
42、能為立即數(shù)。 例3.19,,2. 累加器專(zhuān)用傳送指令,IN ;從I/O端口輸入 OUT ;向I/O端口輸出 XLAT ;換碼 其中I/O端口是CPU 與外設(shè)傳送數(shù)據(jù)的接口,單獨(dú)編址,不屬于內(nèi)存,端口地址范圍0000FFFFH.這組指令只限于AX,AL累加器。,(1)IN輸入指令,長(zhǎng)格式:IN AL,PORT(字節(jié)) ;00FFH IN AX,PORT(字) 操作:AL(PORT) AX(PORT) 功能:把端口PORT的數(shù)據(jù)輸入到累加器。,,短格式:IN AL,DX(字節(jié)) ; PORT放入DX IN AX,DX(字) 操作:AL((DX)) AX ((DX)
43、) 功能:把DX指向的端口的數(shù)據(jù)輸入到累加器。,,例3.20 例3.21,(2)OUT輸出指令,長(zhǎng)格式:OUT PORT,AL (字節(jié)) ;00-FFH OUT PORT,AX (字) 操作:PORT AL PORT AX 功能:把累加器的數(shù)據(jù)輸出到端口PORT。,,短格式:OUT DX,AL (字節(jié)) ;0000-FFFFH OUT DX,AX (字) 操作: (DX) AL (DX) AX 功能:把累加器的數(shù)據(jù)輸出到DX指向的端口。 例3.22,(3)XLAT換碼指令,格式:XLAT 操作:AL(BX+AL) 功能:把BX+AL的值作為有效地址,取出其中的一個(gè)字
44、節(jié)送AL。 例3.23,3. 地址傳送指令,LEA 有效地址送寄存器 LDS 指針?biāo)图拇嫫骱虳S LES 指針?biāo)图拇嫫骱虴S,(1)LEA有效地址送寄存器指令,格式:LEA REG,SRC 操作:REGSRC 功能:把源操作數(shù)的有效地址EA送到指定的寄存器。 例3.24 例3.25,(2)LDS指針?biāo)图拇嫫骱虳S指令,格式: LDS REG, SRC 操作:REG(SRC) DS(SRC+2) 功能:把源操作數(shù)SRC所指向的內(nèi)存單元中的兩個(gè)字送到指定的寄存器REG和DS。 例3.26,(3)LES指針?biāo)图拇嫫骱虴S指令,格式: LES REG, SRC 操作:REG(SRC)
45、 ES(SRC+2) 功能:把源操作數(shù)SRC所指向的內(nèi)存單元中的兩個(gè)字送到指定的寄存器REG和ES。 例如 LES DI, 10H DS=C000H, (C0010H)=0180H, (C0012H)=2000H 結(jié)果 DI=0180H, ES=2000H,4. 標(biāo)志寄存器傳送指令,LAHF 標(biāo)志寄存器FLAGS的低字節(jié)送AH SAHF AH送FLAGS的低字節(jié) PUSHF 標(biāo)志進(jìn)棧 POPF 標(biāo)志出棧 以上傳送類(lèi)指令均不影響標(biāo)志位,除SAHF, POPF 外.,3.2.2 類(lèi)型擴(kuò)展指令,CBW:AL 擴(kuò)展為 AX CWD:AX 擴(kuò)展為 DX,AX 擴(kuò)展方法為符號(hào)擴(kuò)展。 例3.2
46、8 例3.29,3.2.3 算術(shù)運(yùn)算指令,加法指令 減法指令 乘法指令 除法指令,1. 加法指令,ADD 加法 ADC 帶進(jìn)位加法 INC 加1,(1)ADD加法指令,格式:ADD DST,SRC 操作:(DST) (DST) + (SRC) 例3.30,溢出判斷,以8位二進(jìn)制數(shù)為例,,,綜上所述,CF=1 為無(wú)符號(hào)數(shù)的溢出,OF=1為有符號(hào)數(shù)的溢出. OF位:若兩個(gè)操作數(shù)的符號(hào)相同,而結(jié)果的符號(hào)與之相反時(shí)OF=1,否則OF=0。 CF位:有進(jìn)位/借位時(shí)CF=1,否則CF=0。,(2)ADC帶進(jìn)位加法指令,格式:ADC DST,SRC 操作:(DST)(DST)+(SRC)
47、+CF 例3.31,,(3)INC 加1指令,格式:INC OPR 操作:(OPR)(OPR)+1,,除 INC 不影響CF,它們都影響條件標(biāo)志位. 條件標(biāo)志位(條件碼) 最主要有: 進(jìn)位CF, 零ZF, 符號(hào)SF, 溢出OF,2. 減法指令,SUB 減法 SBB 帶借位減法 DEC 減1 NEG 求補(bǔ) CMP 比較,(1)SUB 減法指令,格式:SUB DST,SRC 操作:(DST) (DST) -(SRC),(2)SBB 帶借位減法指令,格式:SBB DST,SRC 操作:(DST) (DST) -(SRC)-CF,(3) DEC 減1指令,格式:DEC OP
48、R 操作:(OPR)(OPR)-1,(4) NEG 求補(bǔ)指令,格式:NEG OPR 操作:(OPR)-(OPR) 功能:對(duì)OPR求補(bǔ),求- OPR, 即反碼+1. 只有OPR為0時(shí),CF=0。,(5) CMP 比較指令,格式:CMP OPR1, OPR2 操作:(OPR1)-(OPR2) 不回送結(jié)果,只產(chǎn)生標(biāo)志位。,,CF=1 為無(wú)符號(hào)數(shù)溢出,OF=1 為有符號(hào)數(shù)溢出. 例3.32 例3.33 例3.34 例3.35,3. 乘法指令,MUL 無(wú)符號(hào)數(shù)乘法 IMUL 有符號(hào)數(shù)乘法,(1)MUL 無(wú)符號(hào)數(shù)乘法指令,格式: MUL SRC 操作: 操作數(shù)為字節(jié)時(shí): (AX) (AL) X (SR
49、C) 操作數(shù)為字時(shí): (DX,AX) (AX) X (SRC),(2)IMUL 帶符號(hào)數(shù)乘法指令,格式: IMUL SRC 操作: 操作數(shù)為字節(jié)時(shí): (AX) (AL) X (SRC) 操作數(shù)為字時(shí): (DX,AX) (AX) X (SRC),,兩個(gè)相乘的數(shù)必須長(zhǎng)度相同。 SRC不能是立即數(shù)。 例3.36,4. 除法指令,DIV 無(wú)符號(hào)數(shù)除法 IDIV 有符號(hào)數(shù)除法,(1)DIV 無(wú)符號(hào)數(shù)除法指令,(2)IDIV 帶符號(hào)數(shù)除法指令,格式: IDIV SRC 操作與DIV 相同 余數(shù)和被除數(shù)同符號(hào)。 被除數(shù)長(zhǎng)度應(yīng)為除數(shù)長(zhǎng)度的兩倍。 SRC不能是立即數(shù)。 例3.37 例3.38,算術(shù)運(yùn)算
50、綜合舉例,例3.39,5. 十進(jìn)制調(diào)整指令,前面提到的所有算術(shù)運(yùn)算指令都是二進(jìn)制數(shù)的運(yùn)算,為便于十進(jìn)制計(jì)算,計(jì)算機(jī)提供了十進(jìn)制調(diào)整指令,在二進(jìn)制數(shù)計(jì)算的基礎(chǔ)上,給予十進(jìn)制調(diào)整,直接得到十進(jìn)制結(jié)果。,,BCD碼 (Binary Coded Decimal):用二進(jìn)制編碼表示十進(jìn)制數(shù). 四位二進(jìn)制數(shù)表示一位十進(jìn)制數(shù),由于四位二進(jìn)制數(shù)的權(quán)分別為8,4,2,1,所以又稱(chēng)為8421碼.,,壓縮的BCD碼 4位二進(jìn)制數(shù)表示一位十進(jìn)制數(shù)。 非壓縮的BCD碼 8位二進(jìn)制數(shù)表示一位十進(jìn)制數(shù),低4位為8421碼,高4位無(wú)意義。,(1) 壓縮BCD碼調(diào)整指令,DAA ; 加法十進(jìn)制調(diào)整指令 DAS ; 減法十進(jìn)制調(diào)
51、整指令,,DAA ;加法十進(jìn)制調(diào)整指令 格式:DAA 操作: IF CF=1 or AL高4位是AF THEN AL+60H. IF AF=1 or AL低4位是AF THEN AL+6,,例 ADD AL, BL 0000 1001 9 DAA + 0000 0100 4 0000 1101 13 + 0110 0001 0011 BCD碼9+4的結(jié)果是(10011)BCD即13,,,? DAA 使AL自動(dòng)+6 IF 每位BCD碼值 9 THEN 該位值加6 例
52、3.40 BCD1=1834,BCD2=2789 求: BCD3<-- BCD1+BCD2 0001 1000 0011 0100 1834 0010 0111 1000 1001 2789 0011 1111 1011 1101 4623 0110 0110 0110 1 1 1 0100 0110 0010 0011 4623,,DAS ;減法十進(jìn)制調(diào)整指令 格式:DAS 操作: IF AF=1 OR AL低4位是AF THEN
53、 AL-6 IF CF=1 OR AL高4位是AF THEN AL-60H.,,例 SUB AL, AH DAS AL=86H=86(BCD), AH=07H=07(BCD) SUB 即 86H-07H=7FH DAS 即 7FH-6H=79H=79(BCD),(2) 非壓縮BCD碼調(diào)整指令,AAA ;加法ASCII調(diào)整 AAS ;減法ASCII調(diào)整 AAM ;乘法ASCII調(diào)整 AAD ;除法ASCII調(diào)整,,AAA ;加法的ASCII調(diào)整指令 格式:AAA 操作:IF AL低4位是AF THEN AL+6; AL高4位置0,調(diào)整產(chǎn)生的進(jìn)位加到AH中。 例3.42,,AA
54、S ;減法的ASCII調(diào)整指令 格式:AAS 操作:IF AL低4位是AF THEN AL-6; AL高4位置0,調(diào)整產(chǎn)生的借位從AH中減去。,,AAM ;乘法的ASCII調(diào)整指令 格式:AAM 操作:先作乘法,把兩個(gè)一字節(jié)且高4位為0的非壓縮BCD碼相乘,然后用AAM指令把AX中的內(nèi)容調(diào)整為二字節(jié)非壓縮BCD碼格式。,,例: MUL AL, BL AAM AL=07H BL=09H MUL 使 AL=3FH, AH=0 AAM 使 AH=06H, AL=03H 3X16+15=48+15=63,,AAD ;除法的ASCII調(diào)整指令 格式:AAD 操作:反向調(diào)整,先作調(diào)整指令A(yù)AD,
55、 把AX中兩個(gè)一字節(jié)且高4位為0的非壓縮BCD碼調(diào)整為二進(jìn)制數(shù),然后使用除法指令除以一個(gè)字節(jié)的且高4位為0的非壓縮BCD碼. 例3.43,3.2.4 邏輯指令,AND ;與 OR ;或 NOT ;非 XOR ;異或 TEST ;測(cè)試, 執(zhí)行AND操作, 但不保存結(jié)果,只根據(jù)其特征置標(biāo)志位。,,按位操作,至少一個(gè)操作數(shù)是寄存器。 例3.44 例3.45 例3.46 例3.47,3.2.5 移位指令,SHL ;邏輯左移 , SAL ;算術(shù)左移,,SHR ;邏輯右移,,SAR ;算術(shù)右移,,ROL ;循環(huán)左移 ,,,ROR ;循環(huán)右移 ,,,RCL ;帶進(jìn)位循環(huán)左移,,,RCR
56、 ;帶進(jìn)位循環(huán)右移,,格式:SHL OPR, CNT CNT可以是1或CL寄存器,如需移位的次數(shù)大于1,則可以在該移位指令前把移位次數(shù)先送到CL寄存器。,,算術(shù)移位指令適用于帶符號(hào)數(shù)運(yùn)算,SAL用來(lái)乘以2,SAR用來(lái)除以2;邏輯移位指令適用于無(wú)符號(hào)數(shù)運(yùn)算,SHL用來(lái)乘以2,SHR用來(lái)除以2。 例3.48 例3.49,3.2.6 串操作指令,MOVS ;串傳送 CMPS ;串比較 SCAS ;串掃描 LODS ;從串取 STOS ;存入串,,串操作指令每次處理的是字節(jié)或字,因此需要重復(fù)執(zhí)行串操作指令才能處理完一個(gè)數(shù)據(jù)串。 串操作指令通常需要和以下前綴配合使用: REP
57、重復(fù) REPE / REPZ 相等或?yàn)榱銊t重復(fù) REPNE / REPNZ 不相等或不為零則重復(fù),,REP的作用 重復(fù)執(zhí)行串操作指令,直到CX=0為止. 串操作指令每執(zhí)行一次,使CX自動(dòng)減1.,,REPE/REPZ的作用 當(dāng)CX0 并且 ZF=1時(shí),重復(fù)執(zhí)行串操作指令,直到CX=0 或者 ZF=0為止. 串操作指令每執(zhí)行一次,使CX自動(dòng)減1.,,REPNE/REPNZ的作用 當(dāng)CX0 并且 ZF=0時(shí),重復(fù)執(zhí)行串操作指令,直到CX=0 或者 ZF=1為止. 串操作指令每執(zhí)行一次,使CX自動(dòng)減1.,(1)MOVS串傳送指令,格式有3種: MOVS DST, SRC ;操作數(shù)尋址方式固
58、定 MOVSB ;字節(jié) MOVSW ;字,,字節(jié)操作: (ES:DI)(DS:SI), SI=SI1, DI=DI1 字操作: (ES:DI)(DS:SI), SI=SI2, DI=DI2 當(dāng)方向標(biāo)志DF=0,用+,DF=1,用-,實(shí)現(xiàn)整個(gè)串傳送的準(zhǔn)備工作,SI=源串首地址(如反向傳送則是末地址). DI=目的串首地址(如反向傳送則是末地址). CX=串長(zhǎng)度. 設(shè)置方向標(biāo)志DF.,,設(shè)置方向標(biāo)志DF: CLD 設(shè)置正向 (DF=0,向前,地址自動(dòng)增量) STD 設(shè)置反向 (DF=1,向后,地址自動(dòng)減量) 例3.50,(2)CMPS串比較指令,格式有3種: CMPS SRC,
59、DST ;操作數(shù)尋址方式固定 CMPSB ;字節(jié) CMPSW ;字,,字節(jié)操作: (ES:DI)-(DS:SI), SI=SI1, DI=DI1 字操作: (ES:DI)-(DS:SI), SI=SI2, DI=DI2 當(dāng)方向標(biāo)志DF=0,用+,DF=1,用- 指令不保存結(jié)果,只是根據(jù)結(jié)果設(shè)置標(biāo)志位。 例3.51,(3)SCAS串掃描指令,格式有3種: SCAS DST ;操作數(shù)尋址方式固定 SCASB ;字節(jié) SCASW ;字,,字節(jié)操作: AL-(ES:DI), DI=DI1 字操作: AX-(ES:DI), DI=DI2 當(dāng)方向標(biāo)志DF=0,用+,DF=1
60、,用- 指令不保存結(jié)果,只是根據(jù)結(jié)果設(shè)置標(biāo)志位。 例3.52,(4)STOS存入串指令,格式有3種: STOS DST ;操作數(shù)尋址方式固定 STOSB ;字節(jié) STOSW ;字,,字節(jié)操作: (ES:DI)AL, DI=DI1 字操作: (ES:DI)AX, DI=DI2 當(dāng)方向標(biāo)志DF=0,用+,DF=1,用-,,例3.53 mov ax,ext mov es,ax lea di,mess mov cx,9 mov ax,0 cld rep stosw,(5)LODS從串取指令,格式有3種: LODS SRC ;操作數(shù)尋址方式固定 LODSB ;字節(jié) LODSW ;字,
61、,字節(jié)操作: AL(DS:SI), SI=SI1 字操作: AX(DS:SI), SI=SI2 當(dāng)方向標(biāo)志DF=0,用+,DF=1,用- 指令一般不和REP連用。,3.2.7 程序轉(zhuǎn)移指令,無(wú)條件轉(zhuǎn)移指令 條件轉(zhuǎn)移指令 循環(huán)指令 子程序調(diào)用指令 中斷調(diào)用指令,1. 無(wú)條件轉(zhuǎn)移指令,JMP 跳轉(zhuǎn)指令:無(wú)條件轉(zhuǎn)移到指令指定的地址去執(zhí)行程序。 轉(zhuǎn)移的目標(biāo)地址和本跳跳轉(zhuǎn)指令在同一個(gè)代碼段,則為段內(nèi)轉(zhuǎn)移;否則是段間轉(zhuǎn)移。 轉(zhuǎn)移的目標(biāo)地址在跳轉(zhuǎn)指令中直接給出,則為直接轉(zhuǎn)移;否則是間接轉(zhuǎn)移。,(1)段內(nèi)直接轉(zhuǎn)移,格式: JMP NEAR PTR OPR 操作: IPIP+16位位移量 NEAR PTR為
62、目標(biāo)地址OPR的屬性說(shuō)明,表明是一個(gè)近(段內(nèi))跳轉(zhuǎn),通??梢允÷浴?位移量是帶符號(hào)數(shù),IP的值可能減?。ǔ绦蛳蚝筇?,也可能增加(程序向前跳)。 程序的重新定位并不影響程序的正確執(zhí)行。,(2)段內(nèi)間接轉(zhuǎn)移,格式: JMP WORD PTR OPR 操作: IP(EA) 可以使用除立即數(shù)以外的任何一種尋址方式。 例3.54,(3)段間直接轉(zhuǎn)移,格式: JMP FAR PTR OPR 操作: IPOPR的偏移地址 CSOPR所在段的段地址,(4)段間間接轉(zhuǎn)移,格式: JMP DWORD PTR OPR 操作: IP(EA) CS(EA+2) 可以使用除立即數(shù)和寄存器方式以外的任何一種尋
63、址方式。 例3.55,2. 條件轉(zhuǎn)移指令,條件轉(zhuǎn)移指令根據(jù)上一條指令所設(shè)置的標(biāo)志位來(lái)判別測(cè)試條件,從而決定程序轉(zhuǎn)向。 通常在使用條件轉(zhuǎn)移指令之前,應(yīng)有一條能產(chǎn)生標(biāo)志位的前導(dǎo)指令,如CMP指令。 匯編指令格式中,轉(zhuǎn)向地址由標(biāo)號(hào)表示。 所有的條件轉(zhuǎn)移指令都不影響標(biāo)志位。,,第一組: 根據(jù)單個(gè)條件標(biāo)志的設(shè)置情況轉(zhuǎn)移 第二組: 測(cè)試CX寄存器的值為0則轉(zhuǎn)移 第三組: 比較兩個(gè)無(wú)符號(hào)數(shù),根據(jù)結(jié)果轉(zhuǎn)移 第四組: 比較兩個(gè)有符號(hào)數(shù), 根據(jù)結(jié)果轉(zhuǎn)移,根據(jù)單個(gè)條件標(biāo)志的設(shè)置情況轉(zhuǎn)移,JZ (JE) 結(jié)果為零轉(zhuǎn)移 格式: JZ OPR 測(cè)試條件:ZF=1 JNZ (JNE) 結(jié)果不為零轉(zhuǎn)移 格式: JNZ
64、OPR 測(cè)試條件:ZF=0 JS 結(jié)果為負(fù)轉(zhuǎn)移 格式: JS OPR 測(cè)試條件:SF=1,,JNS OPR 結(jié)果不為負(fù)(為正)轉(zhuǎn)移 測(cè)試條件:SF=0 JO OPR 結(jié)果溢出轉(zhuǎn)移 測(cè)試條件:OF=1 JNO OPR 結(jié)果不溢出轉(zhuǎn)移 測(cè)試條件:OF=0 JP (JPE) 奇偶位為1轉(zhuǎn)移 格式: JP OPR 測(cè)試條件:PF=1,,JNP (JPO) 奇偶位為0轉(zhuǎn)移 格式: JNP OPR 測(cè)試條件:PF=0 JB (JNAE,JC) 低于,(不高于等于,進(jìn)位位為1),則轉(zhuǎn)移. 格式: JB OPR 測(cè)試條件:CF=1 JNB (JAE,JNC) 不低于,(高于等于,進(jìn)位
65、位為0),則轉(zhuǎn)移. 格式: JNB OPR 測(cè)試條件:CF=0,測(cè)試CX寄存器的值為0則轉(zhuǎn)移,格式: JCXZ OPR 測(cè)試條件:CX=0,比較兩個(gè)無(wú)符號(hào)數(shù),根據(jù)結(jié)果轉(zhuǎn)移,JB (JNAE,JC) 低于,(不高于或等于,進(jìn)位位為1),則轉(zhuǎn)移. 格式: JB OPR 測(cè)試條件:CF=1 JNB (JAE,JNC) 不低于,(高于等于,進(jìn)位位為0),則轉(zhuǎn)移. 格式: JNB OPR 測(cè)試條件:CF=0 JBE (JNA) 低于或等于,(不高于),則轉(zhuǎn)移. 格式: JBE OPR 測(cè)試條件:CF OR ZF=1 JNBE (JA) 不低于或等于,(高于),則轉(zhuǎn)移. 格式: JNBE
66、 OPR 測(cè)試條件:CF OR ZF=0,比較兩個(gè)帶符號(hào)數(shù),根據(jù)結(jié)果轉(zhuǎn)移,JL (JNGE) 小于,(不大于等于),則轉(zhuǎn)移. = 格式: JNL OPR 測(cè)試條件:SF XOR OF=0 JLE (JNG) 小于等于,(不大于),則轉(zhuǎn)移. 格式: JNLE OPR 測(cè)試條件:(SF XOR OF) OR ZF=0,,****************************************************** 為何針對(duì)有符號(hào)數(shù)和無(wú)符號(hào)數(shù)須用不同指令? 8位二進(jìn)制數(shù)FFH 和 00H ,哪個(gè)大? 若為無(wú)符號(hào)數(shù), FFH大,若為有符號(hào)數(shù),00H大. ******************************************************,3. 循環(huán)指令,LOOP 循環(huán) LOOPZ / LOOPE 為零或相等時(shí)循患 LOOPNZ / LOOPNE 不為零或不相等時(shí)循環(huán),,指令:LOOP OPR 測(cè)試條件:CX 0,則循環(huán) 指令:LOOPZ / LOOPE OPR 測(cè)試條件:ZF=1 AND CX0 ,則循環(huán) 指令:LOOPNZ
- 溫馨提示:
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. 裝配圖網(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 《比的意義》教學(xué)課件
- (精品)我們?cè)谛袆?dòng) (2)
- 孤立奇點(diǎn)留數(shù)習(xí)題課
- 七年級(jí)語(yǔ)文下冊(cè)(人教版)13-葉圣陶先生二三事(作業(yè))課件
- 《童年》教學(xué)課件
- 61源遠(yuǎn)流長(zhǎng)的中華文化
- 浙江中醫(yī)雜志投稿須知
- 底盤(pán)與主動(dòng)安全性系統(tǒng)
- 中國(guó)臨床解剖學(xué)雜志簡(jiǎn)介及來(lái)稿須知
- 5《爺爺和小樹(shù)》
- (蘇教版)四年級(jí)語(yǔ)文上冊(cè)課件+桂花雨+1
- 氣管插管病人的醫(yī)療護(hù)理
- 小學(xué)道德講堂“六個(gè)一”模板
- 第29課《詩(shī)詞五首-長(zhǎng)相思》PPT課件
- 湘科版四年級(jí)科學(xué)上冊(cè)全冊(cè)ppt課件