版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
高級匯編語言講解GAOJIHUIBIANYUYANJIANGJIE河南賽客信息技術(shù)有限公司
目錄0102匯編語言概述數(shù)據(jù)的表示及類型030405匯編程序開發(fā)調(diào)試方法寄存器講解尋址方式講解06指令系統(tǒng)講解07子程序設(shè)計(jì)第一章匯編語言概述第一章匯編語言概述
機(jī)器指令是指CPU能直接識別并遵照執(zhí)行的指令。機(jī)器指令一般有操作碼和操作數(shù)兩部分構(gòu)成,操作碼在前,操作數(shù)在后。操作碼指出要進(jìn)行的操作和運(yùn)算,操作數(shù)指出參與操作或運(yùn)算的對象。01:匯編語言的概念
機(jī)器語言是用二進(jìn)制編碼的機(jī)器指令的集合及一組使用機(jī)器指令的規(guī)則。它是CPU能直接識別的唯一語言。只有用機(jī)器語言描述的程序,CPU才能直接執(zhí)行。目標(biāo)程序是指用機(jī)器語言描述的程序。第一章匯編語言概述01:匯編語言的概念示例:
將偏移2200H存儲單元中的數(shù)與偏移2201H存儲單元中的數(shù)相加,將它們的和送入偏移2202H存儲單元。完成這一操作的程序片段包含的三條機(jī)器指令為:缺點(diǎn):
機(jī)器語言不能用人們熟悉的形式來描述計(jì)算機(jī)要執(zhí)行的任務(wù)。編程復(fù)雜,調(diào)試?yán)щy。Intel808601:匯編語言的概念
匯編指令是用指令助記符、地址符號等符號表示的指令。第一章匯編語言概述01:匯編語言的概念
匯編語言是匯編指令、偽指令的集合及其表示、使用這些指令的一組規(guī)則。用匯編語言書寫的程序成為匯編語言源程序。優(yōu)點(diǎn):
使用匯編語言編寫的程序比用機(jī)器語言編寫的程序容易理解、調(diào)試和維護(hù)。第一章匯編語言概述匯編是指把匯編語言源程序翻譯成目標(biāo)程序的過程。完成匯編任務(wù)的程序叫做匯編程序。
01:匯編語言的概念第一章匯編語言概述更底層:匯編語言源程序與高級語言源程序相比,其通用性和可移植性要差得多。由于匯編指令與機(jī)器有著密切的關(guān)系,所以可以通過匯編語言直接有效地控制機(jī)器。匯編指令是機(jī)器指令的符號表示,所以匯編指令與機(jī)器有著密切的關(guān)系,與機(jī)器所帶的CPU關(guān)系密切。不同種類的CPU對應(yīng)不同的匯編語言。02:匯編語言的特點(diǎn)第一章匯編語言概述效率高:過程匯編語言主體的匯編指令是機(jī)器指令的符號表示,每一條匯編指令都有相對應(yīng)的機(jī)器指令,編譯之后產(chǎn)生的冗余指令少。匯編語言程序能直接并充分利用機(jī)器硬件系統(tǒng)的許多特性。運(yùn)行速度快目標(biāo)程序短02:匯編語言的特點(diǎn)第一章匯編語言概述編程繁瑣:太過注重高效率而導(dǎo)致程序結(jié)構(gòu)較差。每條匯編指令所能完成的操作極為有限。程序員使用匯編指令編寫程序時(shí),必須考慮包括寄存器、存儲單元和尋址方式在內(nèi)的幾乎所有細(xì)節(jié)問題。02:匯編語言的特點(diǎn)匯編語言是面向機(jī)器的語言,高級語言是面向過程或面向目標(biāo)、對象的語言。第一章匯編語言概述與CPU類型密切相關(guān)02:匯編語言的特點(diǎn)通用性和可移植性差直接有效地實(shí)現(xiàn)控制運(yùn)行速度快目標(biāo)程序短面向?qū)ο蟛煌噶罟δ苡邢扌枳⒁獾募?xì)節(jié)太多第一章匯編語言概述03:匯編語言的使用時(shí)機(jī)優(yōu)點(diǎn)缺點(diǎn)1、“時(shí)空”兩個方面最有效率的程序;2、可以最直接和最有效的操縱機(jī)器硬件系統(tǒng)。1、編程繁瑣;2、調(diào)試?yán)щy;3、可移植性差第一章匯編語言概述綜合考慮優(yōu)缺點(diǎn),合適的使用時(shí)機(jī)有:對軟件的執(zhí)行時(shí)間或存儲容量有較高要求的場合。例如系統(tǒng)程序的關(guān)鍵核心;03:匯編語言的使用時(shí)機(jī)需要提高大型軟件性能的場合,通常把大型軟件中執(zhí)行頻率高的子程序用匯編語言編寫;軟件與硬件關(guān)系密切,軟件要有直接和有效控制硬件的場合。第一章匯編語言概述綜合考慮優(yōu)缺點(diǎn),合適的使用時(shí)機(jī)有:對軟件的執(zhí)行時(shí)間或存儲容量有較高要求的場合。例如系統(tǒng)程序的關(guān)鍵核心;03:匯編語言的使用時(shí)機(jī)需要提高大型軟件性能的場合,通常把大型軟件中執(zhí)行頻率高的子程序用匯編語言編寫;軟件與硬件關(guān)系密切,軟件要有直接和有效控制硬件的場合。第一章匯編語言概述比如ShellCode,空間要求高面對的代碼內(nèi)容是匯編指令04:匯編語言二進(jìn)制逆向中的作用第一章匯編語言概述開發(fā)攻擊代碼調(diào)試分析程序第二章數(shù)據(jù)的表示及類型01:數(shù)據(jù)的表示
CPU是計(jì)算機(jī)的核心部件,控制整個計(jì)算機(jī)的運(yùn)作,CPU正常工作必須提供指令和數(shù)據(jù)。指令和數(shù)據(jù)在存儲器中存放,CPU運(yùn)行需要讀取內(nèi)存中的數(shù)據(jù),磁盤中的數(shù)據(jù)需要首先讀入內(nèi)存再被CPU使用。第二章數(shù)據(jù)的表示及類型01:數(shù)據(jù)的表示指令和數(shù)據(jù)是應(yīng)用上的概念。在內(nèi)存或磁盤上,指令和數(shù)據(jù)沒有任何區(qū)別,都會二進(jìn)制信息。計(jì)算機(jī)系統(tǒng)內(nèi)部采用二進(jìn)制表示數(shù)值數(shù)據(jù),也采用二進(jìn)制編碼表示非數(shù)值數(shù)據(jù)和指令。這也是很多漏洞產(chǎn)生的根本原因。第二章數(shù)據(jù)的表示及類型示例:
內(nèi)存中的二進(jìn)制信息1000100111011000,計(jì)算機(jī)可以把它看作大小為89D8H的數(shù)據(jù)來處理,也可以將其看作指令movax,bx來執(zhí)行。01:數(shù)據(jù)的表示
x進(jìn)制與十進(jìn)制轉(zhuǎn)換的方式是從高位到低位,依次將每一位上的數(shù)乘以相應(yīng)進(jìn)制的冪次所得的結(jié)果。第二章數(shù)據(jù)的表示及類型示例:
十進(jìn)制數(shù)123的二進(jìn)制、十六進(jìn)制換算方法。02:數(shù)據(jù)的類型計(jì)算機(jī)中存儲信息的最小單位稱為bit(比特),也就是一個二進(jìn)制位,它有兩種狀態(tài)分別代表0和1。第二章數(shù)據(jù)的表示及類型
8個bit組成一個Byte,通常稱之為一個字節(jié)。微型機(jī)存儲器的存儲單元可以存儲一個Byte,也就是8個二進(jìn)制位,存儲器的容量是以字節(jié)為最小單位來計(jì)算的。各單位之間的換算關(guān)系如下:1KB=1024B1MB=1024KB1GB=1024MB1TB=1024GB1PB=1024TB……02:數(shù)據(jù)的類型計(jì)算機(jī)中存儲信息的最小單位稱為bit(比特),也就是一個二進(jìn)制位,它有兩種狀態(tài)分別代表0和1。第二章數(shù)據(jù)的表示及類型
8個bit組成一個Byte,通常稱之為一個字節(jié)。微型機(jī)存儲器的存儲單元可以存儲一個Byte,也就是8個二進(jìn)制位,存儲器的容量是以字節(jié)為最小單位來計(jì)算的。各單位之間的換算關(guān)系如下:1KB=1024B1MB=1024KB1GB=1024MB1TB=1024GB1PB=1024TB……02:數(shù)據(jù)的類型計(jì)算機(jī)存取的以二進(jìn)制位表示的信息位數(shù)一般是8的倍數(shù),它們有專門的名稱。第二章數(shù)據(jù)的表示及類型字節(jié):
一個字節(jié)由8個二進(jìn)制位組成,最低位稱為第0位,最高位稱為第7位。一個字節(jié)可分為2個4位的位組,稱為半字節(jié)。02:數(shù)據(jù)的類型第二章數(shù)據(jù)的表示及類型字:2個字節(jié)(即16個二進(jìn)制位)組成一個字,最低位稱為第0位,最高位稱為第15位。字的低8位稱為低字節(jié),高8位稱為高字節(jié)。02:數(shù)據(jù)的類型第二章數(shù)據(jù)的表示及類型雙字:2個字(即32個二進(jìn)制位)組成一個雙字,最低位稱為第0位,最高位稱為第31位。雙字的低16位稱為低字,高16位稱為高字。第三章匯編程序開發(fā)調(diào)試方法環(huán)境準(zhǔn)備:編譯器masm鏈接器link調(diào)試器debug文本編輯器第三章匯編程序開發(fā)調(diào)試方法匯編代碼寫出到執(zhí)行的過程:匯編語言編寫的源文件從寫出到執(zhí)行主要包括三步:對源程序進(jìn)行編譯鏈接執(zhí)行可執(zhí)行文件中的程序。編寫匯編源程序第三章匯編程序開發(fā)調(diào)試方法01:匯編代碼的開發(fā)示例:
給出一段簡單的匯編語言程序,利用寄存器完成簡單的加法操作后返回。第三章匯編程序開發(fā)調(diào)試方法02:匯編代碼的編譯命令:masm或者masm1;第三章匯編程序開發(fā)調(diào)試方法03:匯編代碼的鏈接命令:link或者link1;第三章匯編程序開發(fā)調(diào)試方法04:匯編代碼的調(diào)試命令:debug1.exe第三章匯編程序開發(fā)調(diào)試方法04:匯編代碼的調(diào)試命令:debug1.exe第三章匯編程序開發(fā)調(diào)試方法-d,查看內(nèi)存中的內(nèi)容-e,改寫內(nèi)存中的內(nèi)容-r,查看、改變寄存器內(nèi)容-u,將內(nèi)存中的機(jī)器指令翻譯成匯編指令-t,執(zhí)行一條機(jī)器指令-p,執(zhí)行int指令05:匯編程序從寫出到執(zhí)行的全過程
前幾步完成了一個匯編程序從寫出到執(zhí)行的全部過程,總共經(jīng)歷了如下階段:第三章匯編程序開發(fā)調(diào)試方法第四章寄存器講解01:寄存器的分類
不同的CPU,寄存器的個數(shù)、結(jié)構(gòu)是不相同的。8086CPU有14個寄存器,大致可以分為三類:第四章寄存器講解控制寄存器段寄存器通用寄存器
其中通用寄存器又可以分為數(shù)據(jù)寄存器、指針寄存器和變址寄存器。01:寄存器的分類第四章寄存器講解02:通用寄存器
數(shù)據(jù)寄存器、指針寄存器和變址寄存器統(tǒng)稱為通用寄存器。這些寄存器除了各自規(guī)定的專門用途外,均可用于傳送和暫存數(shù)據(jù),可以保存算術(shù)邏輯運(yùn)算中的操作數(shù)據(jù)和運(yùn)算結(jié)果。第四章寄存器講解寄存器用途CX計(jì)數(shù)器SI串操作中的源指針DI串操作中的目的指針BP存取堆棧的指針SP堆棧指針03:段寄存器8086CPU依賴其內(nèi)部的四個段寄存器實(shí)現(xiàn)尋址1M字節(jié)物理地址空間。8086把1M字節(jié)地址空間劃分為若干邏輯段,當(dāng)前使用段的段值存放在段寄存器中。由段寄存器和段內(nèi)偏移形成20位地址。第四章寄存器講解計(jì)算方法:物理地址=段值×16+偏移表示方法:段值:偏移03:段寄存器第四章寄存器講解示例:用16進(jìn)制表示的邏輯地址1234:3456H所對應(yīng)的存儲單元的物理地址為15796H。03:段寄存器第四章寄存器講解
8086CPU有四個段寄存器,可保存4個段值,所以可同時(shí)使用四個段,但這四個段有所分工。04:標(biāo)志寄存器第四章寄存器講解
8086CPU中有一個16位的標(biāo)志寄存器,包含了9個標(biāo)志,主要用于反映處理器的狀態(tài)和運(yùn)算結(jié)果的某些特征。
9個標(biāo)志寄存器可以分為兩組,第一組6個標(biāo)志寄存器主要受加減運(yùn)算和邏輯運(yùn)算結(jié)果的影響,稱為運(yùn)算結(jié)果標(biāo)志,第二組標(biāo)志不受運(yùn)算結(jié)果的影響,稱為狀態(tài)控制標(biāo)志。標(biāo)志類別寄存器運(yùn)算結(jié)果標(biāo)志OF、SF、ZF、AF、PF、CF狀態(tài)控制標(biāo)志DF、IF、TF04:標(biāo)志寄存器第四章寄存器講解第五章尋址方式講解01:尋址方式的分類
表示指令中操作數(shù)所在的方法稱為尋址方式。8086共有七種尋址方式:第五章尋址方式講解立即尋址寄存器尋址
直接尋址寄存器間接尋址寄存器相對尋址基址加變址尋址相對基址加變址尋址02:立即尋址方式
立即尋址方式是指操作數(shù)就包含在指令中,它作為指令的一部分,跟在操作碼后存放在代碼段。這種操作數(shù)稱為立即數(shù)。第五章尋址方式講解
立即數(shù)可以是8位也可以是16位。如果是16位,那么按照“高高低低”原則存放,即高位字節(jié)在高地址存儲單元,低位字節(jié)在低地址存儲單元。
立即尋址方式主要用于給寄存器或存儲單元賦初值的場合。02:立即尋址方式第五章尋址方式講解示例:指令“MOVAX,1234H”源操作數(shù)采用立即尋址方式,其存儲和執(zhí)行情況如下所示:大端模式和小端模式小端模式:第五章尋址方式講解
低位字節(jié)排放在內(nèi)存的低地址端,高位字節(jié)排放在內(nèi)存的高地址端。大端模式:
高位字節(jié)排放在內(nèi)存的低地址端,低位字節(jié)排放在內(nèi)存的高地址端。大端模式和小端模式小端模式:第五章尋址方式講解低地址----------------->高地址大端模式:示例:數(shù)字0x12345678在內(nèi)存中的表示形式。0x78|0x56|0x34|0x12低地址----------------->高地址0x12|0x34|0x56|0x78大端模式和小端模式小端模式:第五章尋址方式講解大端模式:強(qiáng)制轉(zhuǎn)換數(shù)據(jù)不需要調(diào)整字節(jié)內(nèi)容,1、2、4字節(jié)的存儲方式一樣。典型的使用小端存儲的CPU有Intelx86和ARM。符號位的判定固定為第一個字節(jié),容易判斷正負(fù)。典型的使用大端存儲的CPU有PowerPC和MIPSUNIX。03:寄存器尋址方式寄存器尋址方式是指操作數(shù)在CPU內(nèi)部的寄存器中,指令中指定寄存器號。如立即尋址方式示例中指令“MOVAX,1234H”目的操作數(shù)采用寄存器尋址。第五章尋址方式講解
寄存器尋址中16位操作數(shù)的寄存器可以有AX、BX、CX、DX、SI、DI、SP和BP等;對于8位操作數(shù),寄存器可以是AL、AH、BL、BH、CL、CH、DL和DH。
由于操作數(shù)在寄存器中,不需要通過訪問存儲器來取得操作數(shù),所以采用這種尋址方式的指令執(zhí)行速度較快。04:直接尋址方式直接尋址方式是指操作數(shù)在存儲器中,指令直接包含有操作數(shù)的有效地址。第五章尋址方式講解操作數(shù)一般存放在數(shù)據(jù)段,所以操作數(shù)的地址由DS加上指令中直接給出的16位偏移得到。
直接尋址方式用于處理單個存儲器變量的情況。它可以實(shí)現(xiàn)在64K字節(jié)的段內(nèi)尋找操作數(shù)。直接尋址的操作數(shù)通常是程序使用的變量。第五章尋址方式講解示例:指令“MOVAX,[1234H]”(DS為5000H)源操作數(shù)采用直接尋址方式,其存儲和執(zhí)行情況如下所示:04:直接尋址方式05:寄存器間接尋址方式寄存器間接尋址方式是指操作數(shù)據(jù)在存儲器中,操作數(shù)有效地址在SI、DI、BX、BP這四個寄存器之一中。第五章尋址方式講解如果有效地址在SI、DI和BX中,則以DS段寄存器的內(nèi)容為段值;如果有效地址在BP中,則以SS段寄存器的內(nèi)容為段值。
注意與寄存器尋址方式的區(qū)別,例如指令“MOV[SI],AX”和“MOVSI,AX”的區(qū)別。第五章尋址方式講解示例:指令“MOVAX,[SI]”(DS為5000H,SI為1234H)源操作數(shù)采用寄存器間接尋址方式,其存儲和執(zhí)行情況如下所示:05:寄存器間接尋址方式06:寄存器相對尋址方式寄存器相對尋址方式是指操作數(shù)在存儲器中,操作數(shù)的有效地址是一個基址寄存器(BX、BP)或變址寄存器(SI、DI)內(nèi)容加上指令中給定的8位或16位位移量之和。第五章尋址方式講解第五章尋址方式講解示例:指令“MOVAX,[DIH]”(DS為5000H,DI為3678H)源操作數(shù)采用寄存器相對尋址方式,其存儲和執(zhí)行情況如下所示:06:寄存器相對尋址方式07:基址加變址尋址方式基址加變址尋址方式是指操作數(shù)在存儲器中,操作數(shù)的有效地址由基址寄存器之一的內(nèi)容與變址寄存器之一的內(nèi)容相加得到。第五章尋址方式講解第五章尋址方式講解示例:指令“MOVAX,[BX+DI]”(DS為5000H,BX為1223H,DI為54H)源操作數(shù)采用基址加變址尋址方式,其存儲和執(zhí)行情況如下所示:07:基址加變址尋址方式08:相對基址加變址尋址方式相對基址加變址尋址方式是指操作數(shù)在存儲器中,操作數(shù)的有效地址由基址寄存器之一的內(nèi)容與變址寄存器之一的內(nèi)容及指令中給定的8位或者16位位移量相加得到。第五章尋址方式講解第五章尋址方式講解示例:指令“MOVAX,[BX+DI-2]”(DS為5000H,BX為1223H,DI為54H)源操作數(shù)采用相對基址加變址尋址方式,其存儲和執(zhí)行情況如下所示:08:相對基址加變址尋址方式第六章指令系統(tǒng)講解01:指令系統(tǒng)的分類8086的指令系統(tǒng)可分為六個功能組:第六章指令系統(tǒng)講解數(shù)據(jù)傳遞算術(shù)運(yùn)算
邏輯運(yùn)算串操作程序控制處理器控制02:數(shù)據(jù)傳遞指令格式:MOVDST,SRC第六章指令系統(tǒng)講解使用情形:(1)CPU內(nèi)部寄存器之間的數(shù)據(jù)傳遞;(2)立即數(shù)送至通用寄存器或者存儲單元;(3)寄存器與存儲器之間的數(shù)據(jù)傳遞。02:數(shù)據(jù)傳遞指令格式:XCHGOPRD1,OPRD2第六章指令系統(tǒng)講解此指令把操作數(shù)OPRD1與OPRD2的內(nèi)容交換,操作數(shù)同時(shí)是字節(jié)或字。例如XCHGAL,AH。格式:LEAREG,OPRD此指令把操作數(shù)OPRD的有效地址傳遞到操作數(shù)REG。操作數(shù)OPRD必須是一個存儲器操作數(shù),操作數(shù)REG必須是一個16位的通用寄存器。例如LEASI,[BX+3]。03:棧操作指令第六章指令系統(tǒng)講解棧是一段RAM區(qū)域。稱為棧底的一端地址較大,稱為棧頂?shù)囊欢说刂份^小。棧的段值在棧段寄存器SS中,棧指針寄存器SP始終指向棧頂。棧操作始終遵循“后進(jìn)先出”的原則。所有數(shù)據(jù)的存入和取出都在棧頂進(jìn)行。棧主要用途:
現(xiàn)場和返回地址的保護(hù)寄存器內(nèi)容的保護(hù)傳遞參數(shù)存儲局部變量格式:PUSHSRC第六章指令系統(tǒng)講解此指令把源操作數(shù)SRC壓入堆棧。它先把堆棧指針寄存器SP的值減2,然后把源操作數(shù)SRC送入由SP所指的棧頂。例如指令“PUSHAX”(AX為8A9BH)。03:棧操作指令格式:POPDST第六章指令系統(tǒng)講解03:棧操作指令此指令從棧頂彈出一個字?jǐn)?shù)據(jù)到目的操作數(shù)DST。它先把堆棧指針寄存器SP所指的字?jǐn)?shù)據(jù)送至目的操作數(shù)DST,然后SP值加2,使其仍指向棧頂。例如指令“POPAX”
。格式:ADDOPRD1,OPRD2第六章指令系統(tǒng)講解04:加減乘除運(yùn)算指令此指令完成兩個操作數(shù)相加,結(jié)果送至目的操作數(shù)OPRD1。例如ADDAL,5。格式:INCOPRD此指令完成對操作數(shù)OPRD加1,然后把結(jié)果送回OPRD。例如INCAL。格式:SUBOPRD1,OPRD2第六章指令系統(tǒng)講解04:加減乘除運(yùn)算指令此指令完成兩個操作數(shù)相減,從OPRD1減去OPRD2,結(jié)果送到目的操作數(shù)OPRD1中,例如SUBAH,12。格式:DECOPRD此指令完成對操作數(shù)OPRD減1,然后把結(jié)果送回OPRD。例如DECAL。格式:CMPOPRD1,OPRD2第六章指令系統(tǒng)講解04:加減乘除運(yùn)算指令
比較指令完成操作數(shù)OPRD1減去操作數(shù)OPRD2,運(yùn)算結(jié)果不送到OPRD1,但影響標(biāo)志CF、ZF、SF、OF、AF和PF。比較指令主要用于比較兩個數(shù)的關(guān)系,是否相等,誰大誰小。示例:判斷ZF是否置位,比較兩數(shù)是否相等無符號數(shù),根據(jù)CF判斷大小有符號數(shù),根據(jù)SF和OF判斷大小第六章指令系統(tǒng)講解標(biāo)志位標(biāo)志位名稱及外語全稱=1=0CF進(jìn)位標(biāo)志/CarryFlagCY/Carry/進(jìn)位NC/NoCarry/無進(jìn)位PF奇偶標(biāo)志/ParityFlagPE/ParityEven/偶PO/ParityOdd/奇AF輔助進(jìn)位標(biāo)志/AuxiliaryCarryFlagAC/AuxiliaryCarry/進(jìn)位NA/NoAuxiliaryCarry/無進(jìn)位ZF零標(biāo)志/ZeroFlagZR/Zero/等于零NZ/NotZero/不等于零SF符號標(biāo)志/SignFlagNG/Negative/負(fù)PL/Positive/非負(fù)OF溢出標(biāo)志/OverflowFlagOV/Overflow/溢出NV/NotOverflow/未溢出格式:MULOPRD第六章指令系統(tǒng)講解04:加減乘除運(yùn)算指令
無符號數(shù)乘法指令完成操作數(shù)OPRD與AL或AX的無符號乘法操作,如果OPRD為字節(jié)操作數(shù),則將結(jié)果保存至AX;如果OPRD為字操作數(shù),則將結(jié)果保存至DX和AX對中,DX含高16位,AX含低16位。格式:IMULOPRD
有符號數(shù)乘法指令完成操作數(shù)OPRD與AL或AX的有符號數(shù)乘法操作。如果有效進(jìn)位至高半部分,則標(biāo)志CF和OF置1,否則置0。格式:DIVOPRD第六章指令系統(tǒng)講解04:加減乘除運(yùn)算指令
無符號數(shù)除法指令完成AX或(DX,AX)除以操作數(shù)OPRD的無符號除法操作。如果OPRD是字節(jié)操作數(shù),8位商保存至AL,8位余數(shù)保存至AH;如果OPRD是字操作數(shù),16位商保存至AX,余數(shù)保存至DX。格式:IDIVOPRD
有符號數(shù)除法指令完成的操作與DIV完全類似。當(dāng)除數(shù)為0時(shí),引發(fā)0號中斷。格式:CBW第六章指令系統(tǒng)講解04:加減乘除運(yùn)算指令
字節(jié)轉(zhuǎn)換為字指令完成把寄存器AL中的符號擴(kuò)展到寄存器AH中。即若AL的最高有效位為0,則AH=0;若AL的最高有效位為1,則AH=0FFH。格式:CWD
字轉(zhuǎn)換為雙字指令完成把寄存器AX中的符號擴(kuò)展到寄存器DX。CBW和CWD主要用于有符號數(shù)消除時(shí)產(chǎn)生字或雙字長度的被除數(shù),指令不影響標(biāo)志位。格式:NOTOPRD第六章指令系統(tǒng)講解05:邏輯運(yùn)算和移位指令
否操作指令把操作數(shù)OPRD取反,然后送回OPRD。指令對標(biāo)志位沒有影響。格式:ANDOPRD1,OPRD2
與操作指令把兩個操作數(shù)進(jìn)行按位的邏輯“與”運(yùn)算,結(jié)果送到目的操作數(shù)OPRD1。主要用在使一個操作數(shù)中的若干位維持不變,而另外若干位清為0的場合。格式:OROPRD1,OPRD2第六章指令系統(tǒng)講解05:邏輯運(yùn)算和移位指令
或操作指令把兩個操作數(shù)進(jìn)行按位的邏輯“或”運(yùn)算,結(jié)果送到目的操作數(shù)OPRD1。主要用在使一個操作數(shù)中的若干位維持不變,而另外若干位置1的場合。格式:XOROPRD1,OPRD2
異或操作指令把兩個操作數(shù)進(jìn)行按位的邏輯“異或”運(yùn)算,結(jié)果送到目的操作數(shù)OPRD1。操作數(shù)可以自己和自己異或?qū)崿F(xiàn)清0操作,也用于若干位維持不變,而另外若干位取反的場合。格式:TESTOPRD1,OPRD2第六章指令系統(tǒng)講解05:邏輯運(yùn)算和移位指令
測試指令把與AND指令類似,也把兩個操作進(jìn)行按位“與”操作,但結(jié)果不送到操作數(shù)OPRD1,僅僅影響標(biāo)志。常用于檢測某些位是否為1但又不改變原操作數(shù)的的情況。示例:
檢查AL中的第6位和第2位是否有一位包含1,可使用指令“TESTAL,01000100B”,如果AL的位6和位2均為0,則指令執(zhí)行后ZF被置1,否則ZF被置0。第六章指令系統(tǒng)講解05:邏輯運(yùn)算和移位指令移位指令:SALOPRD,mSHLOPRD,mSAROPRD,mSHROPRD,m第六章指令系統(tǒng)講解05:邏輯運(yùn)算和移位指令循環(huán)指令:ROLOPRD,mROROPRD,mRCLOPRD,mRCROPRD,m第六章指令系統(tǒng)講解06:轉(zhuǎn)移指令8086提供了大量用于控制程序流程的指令,按照功能可分為以下四類:無條件轉(zhuǎn)移指令和條件轉(zhuǎn)移指令循環(huán)指令過程調(diào)用和過程返回指令軟中斷指令和中斷返回指令第六章指令系統(tǒng)講解06:轉(zhuǎn)移指令
由于程度代碼可分為多個段,所以根據(jù)轉(zhuǎn)移時(shí)是否重置代碼段寄存器CS的內(nèi)容,指令又可以分為段內(nèi)轉(zhuǎn)移和段間轉(zhuǎn)移。第六章指令系統(tǒng)講解06:轉(zhuǎn)移指令格式:JMP標(biāo)號
無條件段內(nèi)直接轉(zhuǎn)移指令使控制無條件地轉(zhuǎn)移到標(biāo)號處。示例:
使用JMP跳轉(zhuǎn)指令使程序轉(zhuǎn)至NEXT處。第六章指令系統(tǒng)講解06:轉(zhuǎn)移指令格式:JMPOPRD
無條件段內(nèi)間接轉(zhuǎn)移指令使控制無條件地轉(zhuǎn)移到由操作數(shù)OPRD的內(nèi)容給定的目標(biāo)地址處。示例:
使用JMP跳轉(zhuǎn)指令使程序轉(zhuǎn)至字存儲單元[1234H]=5678H處。第六章指令系統(tǒng)講解06:轉(zhuǎn)移指令格式:JMPFARPTR標(biāo)號
無條件段間直接轉(zhuǎn)移指令使控制無條件地轉(zhuǎn)移到標(biāo)號所對應(yīng)的地址處。對比無條件段內(nèi)直接轉(zhuǎn)移指令的機(jī)器指令格式:第六章指令系統(tǒng)講解06:轉(zhuǎn)移指令格式:JMPOPRD
無條件段間間接轉(zhuǎn)移指令使控制無條件地轉(zhuǎn)移到由操作數(shù)OPRD的內(nèi)容給定的目標(biāo)地址處。操作數(shù)OPRD必須是雙字存儲單元。示例:
使用JMP跳轉(zhuǎn)指令使程序轉(zhuǎn)至字存儲單元[1234H]所存儲的地址處。第六章指令系統(tǒng)講解06:轉(zhuǎn)移指令
條件轉(zhuǎn)移指令根據(jù)某標(biāo)志位或某些標(biāo)志位的邏輯運(yùn)算來判別條件是否成立。如果條件成立則轉(zhuǎn)移,否則繼續(xù)順序執(zhí)行。通常在條件轉(zhuǎn)移指令前,總有用于條件判別的有關(guān)指令,例如CMP和TEST。示例:
測試AX的低四位是否全是0,如果均是0,使CX=0;否則使CX=1。第六章指令系統(tǒng)講解06:轉(zhuǎn)移指令有符號數(shù)間的次序關(guān)系稱為大于(G)、等于(E)和小于(L),無符號數(shù)間的次序關(guān)系稱為高于(A)、等于(E)和低于(B)。有符號數(shù)和無符號數(shù)的相等均可以使用ZF標(biāo)志來反映。無符號數(shù)大小看CF,有符號數(shù)大小看SF和OF。指令格式轉(zhuǎn)移條件轉(zhuǎn)移說明其他說明JZ標(biāo)號JE標(biāo)號ZF=1ZF=1等于0轉(zhuǎn)移或者,相等轉(zhuǎn)移單個標(biāo)志JNZ標(biāo)號JNE標(biāo)號ZF=0ZF=0不等于0轉(zhuǎn)移或者,不相等轉(zhuǎn)移單個標(biāo)志JL標(biāo)號JNGE標(biāo)號(SF異或OF)=1(SF異或OF)=1小于轉(zhuǎn)移或者,不大于等于轉(zhuǎn)移兩個標(biāo)志有符號數(shù)JBE標(biāo)號JNA標(biāo)號(CF或ZF)=1(CF或ZF)=1低于等于轉(zhuǎn)移或者,不高于轉(zhuǎn)移兩個標(biāo)志無符號數(shù)第六章指令系統(tǒng)講解06:轉(zhuǎn)移指令利用條件轉(zhuǎn)移指令和無條件轉(zhuǎn)移指令可以實(shí)現(xiàn)循環(huán),但為了方便實(shí)現(xiàn),8086還提供了四條指令用于實(shí)現(xiàn)循環(huán)。LOOP標(biāo)號LOOPE/LOOPZ標(biāo)號LOOPNE/LOOPNZ標(biāo)號JCXZ標(biāo)號循環(huán)指令和條件轉(zhuǎn)移指令類似,屬于段內(nèi)轉(zhuǎn)移且采用相對轉(zhuǎn)移的方式,及使用地址差的方式實(shí)現(xiàn)轉(zhuǎn)移。循環(huán)指令不影響標(biāo)志位。第六章指令系統(tǒng)講解06:轉(zhuǎn)移指令格式:LOOP標(biāo)號
計(jì)數(shù)循環(huán)指令使寄存器CX的值減1,如果結(jié)果不等于0,則轉(zhuǎn)移到標(biāo)號,否則順序執(zhí)行LOOP后的指令。示例:
從偏移1000H開始的512個字節(jié)的數(shù)據(jù)復(fù)制到從偏移3000H開始的緩沖區(qū)中。第六章指令系統(tǒng)講解06:轉(zhuǎn)移指令格式:LOOPE/LOOPZ標(biāo)號等于/全零循環(huán)指令使寄存器CX的值減1,如果結(jié)果不等于0并且ZF等于1,則轉(zhuǎn)移到標(biāo)號,否則順序執(zhí)行LOOP后的指令。示例:
在字符串中查找第一個非’A’字符。DS:DI指向字符串,如果找到,BX指向該字符,否則BX=0FFFFH。第六章指令系統(tǒng)講解06:轉(zhuǎn)移指令格式:LOOPNE/LOOPNZ標(biāo)號不等于/非零循環(huán)指令使寄存器CX的值減1,如果結(jié)果不等于0并且ZF等于0,則轉(zhuǎn)移到標(biāo)號,否則順序執(zhí)行LOOP后的指令。示例:
在字符串中查找第一個’A’字符。DS:DI指向字符串,如果找到,BX指向該字符,否則BX=0FFFFH。第六章指令系統(tǒng)講解06:轉(zhuǎn)移指令格式:JCXZ標(biāo)號跳轉(zhuǎn)指令實(shí)現(xiàn)當(dāng)寄存器CX的值等于0時(shí)跳轉(zhuǎn)到標(biāo)號,否則順序執(zhí)行。示例:
在循環(huán)開始之前可以使用JCXZ指令,以便在循環(huán)次數(shù)為0時(shí),跳過循環(huán)體。第七章子程序設(shè)計(jì)
如果某個程序片段將反復(fù)在程序中出現(xiàn),就把它設(shè)計(jì)成子程序。第七章子程序設(shè)計(jì)01:子程序設(shè)計(jì)概要優(yōu)點(diǎn):縮短程序長度,節(jié)約存儲空間實(shí)現(xiàn)共享,便于實(shí)現(xiàn)模塊化重復(fù)使用,減輕工作量
Call和ret都是轉(zhuǎn)移指令,它們都修改IP,或同時(shí)修改CS和IP,經(jīng)常被用來實(shí)現(xiàn)子程序的設(shè)計(jì)。第七章子程序設(shè)計(jì)02:子程序設(shè)計(jì)方法
CPU執(zhí)行Call指令主要進(jìn)行兩步操作。將當(dāng)前的IP或CS和IP壓入棧中轉(zhuǎn)移至子程序
CPU執(zhí)行ret指令主要進(jìn)行兩步操作。使用棧數(shù)據(jù)修改IP或CS和IP的內(nèi)容恢復(fù)棧結(jié)構(gòu)依據(jù)轉(zhuǎn)移目的地址的不同和獲取轉(zhuǎn)移目的地址的不同,Call指令存在四種調(diào)用模式。
02:子程序設(shè)計(jì)方法第七章子程序設(shè)計(jì)依據(jù)轉(zhuǎn)移目的地址的不同及是否帶立即數(shù)返回,ret指令存在四種執(zhí)行模式。02:子程序設(shè)計(jì)方法第七章子程序設(shè)計(jì)
Call和ret指令共同支持了匯編語言編程中的模塊化設(shè)計(jì),模塊化設(shè)計(jì)可以實(shí)現(xiàn)多個相互聯(lián)系、功能獨(dú)立的子程序來解決復(fù)雜問題。使用CALL和RET進(jìn)行子程序設(shè)計(jì)面臨以下幾個問題:第七章子程序設(shè)計(jì)03:模塊化程序設(shè)計(jì)需要解決的幾個問題參數(shù)和結(jié)果傳遞問題批量數(shù)據(jù)傳遞問題寄存器沖突問題第七章子程序設(shè)計(jì)Q1:參數(shù)和結(jié)果傳遞問題示例:
根據(jù)提供的N值計(jì)算N的3次方。第七章子程序設(shè)計(jì)Q2:批量數(shù)據(jù)傳遞問題示例:
將一個全是字母的字符串轉(zhuǎn)化為大寫。第七章子程序設(shè)計(jì)Q3:寄存器沖突問題示例:
將多個字符串中所有字母轉(zhuǎn)化成大寫。8086CPU在執(zhí)行完當(dāng)前正在執(zhí)行的指令之后,檢測到從CPU外部發(fā)送過來的或內(nèi)部產(chǎn)生的一種特殊信息,并且可以立即對所接收到的信息進(jìn)行處理。這種特殊信息我們稱其為中斷信息。中斷的意思是指CPU不再
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025版南雄市農(nóng)村集體資產(chǎn)租賃合同3篇
- 二零二五年度國際商務(wù)培訓(xùn)項(xiàng)目聘用專家合同3篇
- 2025年度二零二五綠色建筑設(shè)計(jì)與施工合同樣本4篇
- 二零二五年度木材加工鋼材買賣居間合同附帶鋼材加工行業(yè)標(biāo)準(zhǔn)制定4篇
- 二零二五年度天然氣運(yùn)輸與新能源開發(fā)合同書
- 二零二五年度企業(yè)員工職業(yè)發(fā)展路徑規(guī)劃合同
- 2025年度棉布市場調(diào)研與銷售策略制定合同
- 2025年智能家居內(nèi)墻裝飾施工與智能化升級合同
- 2025年度個人購房擔(dān)保借款合同優(yōu)化版2篇
- 氨吸收塔的設(shè)計(jì)
- 中央2025年國務(wù)院發(fā)展研究中心有關(guān)直屬事業(yè)單位招聘19人筆試歷年參考題庫附帶答案詳解
- 2024年09月北京中信銀行北京分行社會招考(917)筆試歷年參考題庫附帶答案詳解
- 外呼合作協(xié)議
- 小學(xué)二年級100以內(nèi)進(jìn)退位加減法800道題
- 保險(xiǎn)公司2025年工作總結(jié)與2025年工作計(jì)劃
- 2024年公司領(lǐng)導(dǎo)在新年動員會上的講話樣本(3篇)
- 眼科護(hù)理進(jìn)修專題匯報(bào)
- 介入手術(shù)室感染控制管理
- 2024北京初三(上)期末英語匯編:材料作文
- 2024年大型風(fēng)力發(fā)電項(xiàng)目EPC總承包合同
- 禮儀服務(wù)合同三篇
評論
0/150
提交評論