版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1教材:匯編語言程序設(shè)計(jì)實(shí)踐教程
歡迎提意見!
匯編語言程序設(shè)計(jì)丁輝電子工業(yè)出版社后續(xù)課程:微機(jī)接口技術(shù)及實(shí)驗(yàn)是《微機(jī)原理與接口技術(shù)及實(shí)驗(yàn)》的一部分匯編語言程序設(shè)計(jì)實(shí)踐教程匯編語言asm20051教材:匯編語言程序設(shè)計(jì)實(shí)踐教程后續(xù)課程:是《微機(jī)原理與接口2目錄第一章匯編語言程序設(shè)計(jì)基礎(chǔ)第二章匯編語言程序設(shè)計(jì)入門第三章算術(shù)運(yùn)算程序第四章代碼轉(zhuǎn)換程序第五章系統(tǒng)調(diào)用程序第六章表處理程序第七章子程序及其與主程序參數(shù)傳遞2目錄第一章匯編語言程序設(shè)計(jì)基礎(chǔ)31、重要性2、特點(diǎn)3、學(xué)習(xí)方法4、考核要求引言31、重要性引言41、重要性專業(yè)基礎(chǔ)課:電類、工科、理科有助于微機(jī)應(yīng)用水平提高計(jì)算機(jī)等級考試:三級PC機(jī)技術(shù)研究生入學(xué)考試41、重要性專業(yè)基礎(chǔ)課:電類、工科、理科52、特點(diǎn)ABC概念間關(guān)系:網(wǎng)狀,理解困難內(nèi)容多:匯編語言、微機(jī)原理、接口技術(shù)52、特點(diǎn)ABC概念間關(guān)系:網(wǎng)狀,理解困難內(nèi)容多:匯編語言、63、學(xué)習(xí)方法理解與記憶:盡快適應(yīng)預(yù)習(xí)與復(fù)習(xí):學(xué)習(xí)效率實(shí)驗(yàn)與習(xí)題:針對強(qiáng)教與學(xué)教:難點(diǎn)、要點(diǎn)目的:讓學(xué)生少走彎路,提高效率學(xué)是關(guān)鍵敢問!會問!63、學(xué)習(xí)方法理解與記憶:盡快適應(yīng)教:難點(diǎn)、要74、考核要求筆試:期末:50%
筆試內(nèi)容充分結(jié)合實(shí)驗(yàn)內(nèi)容!實(shí)驗(yàn):預(yù)習(xí)、操作、報(bào)告,30%平時(shí):作業(yè)、考勤、態(tài)度、提問:20%作業(yè)、實(shí)驗(yàn)報(bào)告必須手寫?。?!74、考核要求筆試:期末:8第一章匯編語言程序設(shè)計(jì)基礎(chǔ)1.1二進(jìn)制數(shù)和十六進(jìn)制數(shù)1.2無符號數(shù)和帶符號數(shù)1.3微機(jī)基本原理1.48086CPU1.5DEBUG操作(一)1.6判斷標(biāo)志位實(shí)驗(yàn)1.7計(jì)算機(jī)中的十進(jìn)制數(shù)及其運(yùn)算原理1.8BCD碼運(yùn)算實(shí)驗(yàn)8第一章匯編語言程序設(shè)計(jì)基礎(chǔ)1.1二進(jìn)制數(shù)和十六進(jìn)制數(shù)91.1二進(jìn)制數(shù)和十六進(jìn)制數(shù)日常生活:十進(jìn)制、十二進(jìn)制、六十進(jìn)制計(jì)算機(jī):二進(jìn)制、十六進(jìn)制n位整數(shù)m位小數(shù):Xn-1Xn-2Xn-3……X2X1X0X-1X-2……X-m+1X-m數(shù)學(xué)意義:X=Xn-1×En-1+Xn-2×En-2+Xn-3×En-3+……
+X2×E2+X1×E+X0
+X-1×E-1+X-2×E-2+…….+X-m+1×E-m+1+X-m×E-m
(0≤Xi≤E-1)E=10、16、2、……
91.1二進(jìn)制數(shù)和十六進(jìn)制數(shù)日常生活:十進(jìn)制、十二進(jìn)制、六101.1.1二進(jìn)制數(shù)計(jì)算中:8位、16位、32位、64位、……例:10100101B,1001,0011,1111,0000B
書寫時(shí),每4位用空格或逗號分隔;但源程序中不能!加:10111001
+01111001100110010減:10111001
-0111011001000011不夠減問題?101.1.1二進(jìn)制數(shù)計(jì)算中:8位、16位、32位、64位11被乘數(shù)左移法
10111001
×0111100110111001
10111001
10111001
10111001
+10111001
0101011101110001
二進(jìn)制數(shù)乘法運(yùn)算11被乘數(shù)左移法二進(jìn)制數(shù)乘法運(yùn)算12
二進(jìn)制數(shù)除法運(yùn)算除數(shù)右移法
000000010011010010011010√1011100101011010-1001101011111010-1001101011000001-1001101010011110
-10011010010010加減乘除人工計(jì)算方法→硬件方法→編程方法有小數(shù)點(diǎn)?12二進(jìn)制數(shù)除法運(yùn)算除數(shù)右移法加減乘除131.1.2十六進(jìn)制數(shù)源程序中采用,實(shí)際上也是二進(jìn)制4位二進(jìn)制=1位十六進(jìn)制,0~9、A~F例:0ABH=10101011B0=0000B8=1000B1=0001B9=1001B2=0010BA=1010B3=0011BB=1011B4=0100BC=1100B5=0101BD=1101B6=0110BE=1110B7=0111BF=1111B必須熟記!加減:參照二/十進(jìn)制列豎式乘除:轉(zhuǎn)換為二進(jìn)制
用二進(jìn)制運(yùn)算轉(zhuǎn)換為十六進(jìn)制131.1.2十六進(jìn)制數(shù)源程序中采用,實(shí)際上也是二進(jìn)制0=141.1.3十進(jìn)制與二/十六進(jìn)制轉(zhuǎn)換十進(jìn)制→二進(jìn)制整數(shù)部分:除2取余法(已知X求Xn-1,…X2X1X0)小數(shù)部分:乘2取整法(已知X求X-1X-2…X1-mX-m)十進(jìn)制→十六進(jìn)制:1、先→二進(jìn)制,再→十六進(jìn)制2、整數(shù)部分:除16取余法小數(shù)部分:乘16取整法二進(jìn)制/十六進(jìn)制→十進(jìn)制:(已知Xn-1,…X2X1X0X-1X-2…X1-mX-m求X)整數(shù)小數(shù)部分:按冪展開141.1.3十進(jìn)制與二/十六進(jìn)制轉(zhuǎn)換十進(jìn)制→二進(jìn)制十進(jìn)制15
十進(jìn)制轉(zhuǎn)二進(jìn)制舉例整數(shù):除2取余100│50│0=B025│0=B112│1=B26│0=B33│0=B41│1=B50│1=B6∴100=01100100B小數(shù):乘2取整
0│.568B-1=1│.136B-2=0│.272B-3=0│.544B-4=1│.088B-5=0│.176B-6=0│.352B-7=0│.704B-8=1│.408∴0.568=0.10010001B可能無法完全精確轉(zhuǎn)換15十進(jìn)制轉(zhuǎn)二進(jìn)制舉例整數(shù):除2取余小數(shù):乘161.2無符號數(shù)和帶符號數(shù)計(jì)算機(jī)中同一個(gè)數(shù)可表示不同的實(shí)際值同一個(gè)實(shí)際值在計(jì)算機(jī)中有不同形式表示機(jī)器數(shù):計(jì)算機(jī)中的二進(jìn)制,十六進(jìn)制真值:機(jī)器數(shù)所表示的實(shí)際數(shù)值,十進(jìn)制機(jī)器數(shù):無符號數(shù)、帶符號數(shù)帶符號數(shù):原碼、反碼、補(bǔ)碼屬于定點(diǎn)數(shù),整數(shù)是定點(diǎn)數(shù)的特例計(jì)算機(jī)中數(shù)的表示和計(jì)算還有浮點(diǎn)數(shù)161.2無符號數(shù)和帶符號數(shù)計(jì)算機(jī)中同一個(gè)數(shù)可表示不同的實(shí)171.2.1無符號數(shù)8位、16位、32位、……,每位都是數(shù)值位8位:00000000B~11111111B
025516位:0000H~0FFFFH
065535171.2.1無符號數(shù)8位、16位、32位、……,181.2.2帶符號數(shù)、原碼8位、16位、32位、……,最高位是符號位,0=正,1=負(fù)其余每位都是數(shù)值位原碼:低7位是表示絕對值11111111B0FFH-12710000000B80H-000000000B00H+001111111B7FH+127181.2.2帶符號數(shù)、原碼8位、16位、32位、……,19
反碼正數(shù):與原碼相同;負(fù)數(shù):對應(yīng)正數(shù)的原碼每位取反10000000B80H-12711111111B0FFH-000000000B00H+001111111B7FH+12719反碼正數(shù):與原碼相同;20
補(bǔ)碼正數(shù):與原碼相同;負(fù)數(shù):對應(yīng)正數(shù)的原碼每位取反+1,(反碼+1)10000000B80H-12811111111B0FFH-100000000B00H001111111B7FH+12720補(bǔ)碼正數(shù):與原碼相同;218位機(jī)器數(shù)與真值關(guān)系圖00H7FH80HFFH真值機(jī)器數(shù)-128127255-1-127無原反補(bǔ)無原補(bǔ)反0128模:28218位機(jī)器數(shù)與真值關(guān)系圖00H7FH80H221.2.3真值與機(jī)器數(shù)轉(zhuǎn)換人工計(jì)算:真值轉(zhuǎn)換為機(jī)器數(shù);機(jī)器轉(zhuǎn)換為真值。從機(jī)器數(shù)的定義分析,分三種情況討論:1.無符號數(shù)與真值的轉(zhuǎn)換2.正數(shù)真值與原碼、反碼、補(bǔ)碼轉(zhuǎn)換3.負(fù)數(shù)真值與原碼、反碼、補(bǔ)碼轉(zhuǎn)換221.2.3真值與機(jī)器數(shù)轉(zhuǎn)換人工計(jì)算:真值轉(zhuǎn)換為機(jī)器數(shù);231.無符號數(shù)與真值轉(zhuǎn)換真值→無符號機(jī)器數(shù):除2取余法,不足的位數(shù)補(bǔ)0例:200→11001000B→0C8H無符號機(jī)器數(shù)→真值:按冪展開,例:11010000B(0D0H)→128+64+16=208231.無符號數(shù)與真值轉(zhuǎn)換真值→無符號機(jī)器數(shù):242.正數(shù)真值與原反補(bǔ)轉(zhuǎn)換∵與無符號差別僅最高位必須=0,∴轉(zhuǎn)換方法與無符號數(shù)的方法相同。正數(shù)真值→原、反、補(bǔ)碼機(jī)器數(shù):除2取余法,結(jié)果最高位必須為0!例:120→01111000B→78H原、反、補(bǔ)碼機(jī)器數(shù)→真值:按冪展開,例:01101010B(6AH)→64+32+8+2=106242.正數(shù)真值與原反補(bǔ)轉(zhuǎn)換∵與無符號差別僅最高位必須253.負(fù)數(shù)真值與原反補(bǔ)轉(zhuǎn)換真值→機(jī)器數(shù):先轉(zhuǎn)為原碼→反碼→補(bǔ)碼。負(fù)數(shù)真值→原碼:將絕對值除2取余,最高位寫1負(fù)數(shù)真值→反碼:原碼數(shù)值位取反,符號位不變負(fù)數(shù)真值→補(bǔ)碼:在反碼最低位上加1例:-120→11111000B→10000111B→10001000B機(jī)器數(shù)→真值:機(jī)器數(shù)的最高位為1原碼→真值:數(shù)值位按冪展開,加負(fù)號反碼→真值:數(shù)值位每位取反后按冪展開,加負(fù)號補(bǔ)碼→真值:數(shù)值位取反加1,按冪展開,加負(fù)號對任意二進(jìn)制數(shù)B,等式/(B-1)=/B+1成立.例:C8→-72(原碼)→-56(反碼)→-57(補(bǔ)碼)253.負(fù)數(shù)真值與原反補(bǔ)轉(zhuǎn)換真值→機(jī)器數(shù):先轉(zhuǎn)為原碼→261.2.4機(jī)器數(shù)和真值關(guān)系真值機(jī)器數(shù)12-12無符號數(shù)0000,1100帶符號數(shù)原碼0000,11001000,1100反碼0000,11001111,0011補(bǔ)碼0000,11001111,0100真值機(jī)器數(shù)無符號數(shù)原碼反碼補(bǔ)碼0000,1111151515151111,0001241-113-14-15同一個(gè)真值有不同的機(jī)器數(shù)表示:同一個(gè)機(jī)器數(shù)可以表示不同的真值:261.2.4機(jī)器數(shù)和真值關(guān)系真值12-12無符號數(shù)000271.2.5為什么用補(bǔ)碼1.減法轉(zhuǎn)換為加法:A-B=A+(-B)2.更重要的原因是:帶符號數(shù)和無符號數(shù)的加減運(yùn)算規(guī)則相同,可簡化CPU硬件。求補(bǔ)碼:真值轉(zhuǎn)換為機(jī)器數(shù),
正數(shù):十進(jìn)制轉(zhuǎn)為二進(jìn)制負(fù)數(shù):對應(yīng)正數(shù)的二進(jìn)制取反加1求補(bǔ):取反加1;正轉(zhuǎn)為負(fù),負(fù)轉(zhuǎn)為正對任意二進(jìn)制數(shù)B:
0-B=2n-B=/(B-1)=/B+1271.2.5為什么用補(bǔ)碼1.減法轉(zhuǎn)換為加法:A-B=A281.3微機(jī)基本原理微機(jī)基本組成結(jié)構(gòu)指令執(zhí)行過程281.3微機(jī)基本原理微機(jī)基本組成結(jié)構(gòu)291.3.1微機(jī)基本結(jié)構(gòu)框圖CPU存儲器I/O接口I/O設(shè)備AB地址總線數(shù)據(jù)總線
DB控制總線
CB三條總線連接三大部件AB位數(shù)決定存儲容量,DB位數(shù)決定一次傳送數(shù)據(jù)位數(shù)控制總線主要有:M/IO、/RD(讀)、/WR(寫)數(shù)字電子計(jì)算機(jī)291.3.1微機(jī)基本結(jié)構(gòu)框圖CPU存儲器I/O接口I/O301.3.2指令執(zhí)行過程馮諾依曼型計(jì)算機(jī):存儲程序計(jì)算機(jī)一條指令的執(zhí)行過程分4個(gè)步驟:取指、取數(shù)、譯碼操作(運(yùn)算)、存數(shù)指令的執(zhí)行時(shí)間問題程序裝入主存,運(yùn)行,控制權(quán)交回系統(tǒng)。高級語言程序由有序排列的語句組成;匯編語言程序由有序排列的指令組成。程序的運(yùn)行過程就是指令執(zhí)行的重復(fù)過程301.3.2指令執(zhí)行過程馮諾依曼型計(jì)算機(jī):存儲程序計(jì)算機(jī)31
取指、取數(shù)過程①AB送出地址;②CB送出M/IO、/RD;③存儲器從DB送機(jī)器碼或數(shù)據(jù);④CPU從DB上讀入。CPU存儲器I/O接口ABDBCB①②③④31取指、取數(shù)過程①AB送出地址;CPU存儲32
存數(shù)過程I/O接口的操作:輸入、輸出原理與存儲器讀、寫相同AB送出地址;DB送出數(shù)據(jù);CB送出M/IO、/WR;存儲器從DB讀入數(shù)據(jù)CPU存儲器I/O接口ABDBCB①②③④32存數(shù)過程I/O接口的操作:輸入、輸出AB331.48086CPUCPU是微機(jī)的核心,最關(guān)鍵的部件。重點(diǎn)掌握:與匯編語言編程密切相關(guān)的內(nèi)容內(nèi)部寄存器及其用法標(biāo)志寄存器331.48086CPUCPU是微機(jī)的核心,最關(guān)鍵的部件341.4.1微處理器概述8位:8080、8085、8088Intel80x86系列:向上兼容16位:8086、(80186)、8028632位:80386、80486、Pentium、……微控制器(單片機(jī))控制應(yīng)用MCS51、PIC8位為主DSP芯片信號處理TMS32016位為主嵌入式微處理器移動(dòng)設(shè)備ARM32位為主通用微處理器臺式微機(jī)Z80、80X8632位為主CPU→微處理器,應(yīng)用不同有4個(gè)分支:341.4.1微處理器概述8位:8080、8085、808351.4.28086內(nèi)部結(jié)構(gòu)寄存器組段寄存器指令指針總線控制邏輯指令隊(duì)列總線接口單元BIU執(zhí)行單元EU標(biāo)志寄存器ALU外部總線內(nèi)部總線地址加法器控制單元20位地址16位數(shù)據(jù)元件級、門電路級、框圖級前后聯(lián)系理解!351.4.28086內(nèi)部結(jié)構(gòu)寄存器組段寄存器總線控制邏輯361.4.38086寄存器AHALBHBLCHCLDHDLSIDIBPSPAX累加器AccumulatorBX基址寄存器BaseCX計(jì)數(shù)寄存器CountDX數(shù)據(jù)寄存器DataCSDSSSESIPFLAGS源變址寄存器SourceIndex目的變址寄存器DestinationIndex基址指針BasePointer堆棧指針StackPointer代碼段寄存器CodeSegment數(shù)據(jù)段寄存器DataSegment堆棧段寄存器StackSegment擴(kuò)展段寄存器ExtraSegment指令指針I(yè)nstructionPointer標(biāo)志寄存器數(shù)據(jù)寄存器變址指針通用寄存器段寄存器32位:EAXEBXECXEDXESIEDIEBPESPEIPEFLAGS段寄存器FSGS
16位8位8位PC程序計(jì)數(shù)器控制寄存器361.4.38086寄存器AHALBHBLCHCLDHD371.4.4標(biāo)志寄存器15~1211109876543210OFDFIFTFSFZFAFPFCFOVDNEINGZRACPECYNVUPDIPLNZNCPONC10條件標(biāo)志:6個(gè),在運(yùn)算器中控制標(biāo)志:3個(gè),控制電路中IF:中斷允許標(biāo)志,CPU可屏蔽中斷用DF:方向標(biāo)志,串操作指令用TF:跟蹤(單步、陷井)標(biāo)志,調(diào)試程序用在調(diào)試軟件DEBUG中用2個(gè)字母表示371.4.4標(biāo)志寄存器15~1211109876543238
條件標(biāo)志(1)PF:奇偶標(biāo)志,用于傳送數(shù)據(jù)時(shí)的校驗(yàn)計(jì)算結(jié)果的低8位1的個(gè)數(shù)為偶數(shù),則PF=1
否則,PF=0ZF:零標(biāo)志,用于減運(yùn)算時(shí)判斷相等邏輯運(yùn)算時(shí)判斷全0
計(jì)算結(jié)果為0,則ZF=1;不為0,則ZF=0AF:輔助進(jìn)位/借位標(biāo)志,用于BCD碼計(jì)算加運(yùn)算時(shí)D3位向D4位有進(jìn)位或減運(yùn)算時(shí)D3位向D4位有借位,則AF=1
否則AF=038條件標(biāo)志(1)PF:奇偶標(biāo)志,用于傳送數(shù)39
條件標(biāo)志(2)CF:進(jìn)位/借位標(biāo)志,
用于無符號數(shù)加/減運(yùn)算,
多字節(jié)運(yùn)算的進(jìn)位/借位傳遞計(jì)算時(shí)最高位有進(jìn)位/借位,則CF=1
否則CF=0SF:符號標(biāo)志,用于帶符號數(shù)運(yùn)算計(jì)算結(jié)束為負(fù)則SF=1,為正則SF=0OF:溢出標(biāo)志,用于帶符號數(shù)運(yùn)算計(jì)算結(jié)果超出帶符號數(shù)的表示范圍,則OF=1
否則OF=08位:-128~127;16位:-32768~32767CFCF39條件標(biāo)志(2)CF:進(jìn)位/借位標(biāo)志,SF40
標(biāo)志位判斷舉例(加)
1111,0100+1111,01001,1110,1000
-12+)-12-24
244+244488=232+256PF=1,ZF=0,AF=0CF=1,SF=1,OF=01110,1000=-241110,1000=232CPU運(yùn)算:分析:帶符號:無符號:帶符號數(shù)的符號位也當(dāng)成數(shù)值位參加計(jì)算!40標(biāo)志位判斷舉例(加)1111,41
標(biāo)志位判斷舉例(減)
1111,0100-0000,11000,1110,1000
-12-)+12-24
244-12232PF=1,ZF=0,AF=1CF=0,SF=1,OF=01110,1000=-241110,1000=232CPU運(yùn)算:分析:帶符號:無符號:特別注意區(qū)別CF和OF?。?!41標(biāo)志位判斷舉例(減)1111,42CF、OF判斷舉例CF=0,SF=1,OF=11110,1000=-241110,1000=232CPU運(yùn)算:
0111,0100+0111,01000,1110,1000
+116+)+116+232
116+116232分析:帶符號:無符號:計(jì)算機(jī)中無符號數(shù)和帶符號數(shù)的運(yùn)算問題42CF、OF判斷舉例CF=0,SF=1,O43
理解機(jī)器數(shù)運(yùn)算問題標(biāo)志位是加減計(jì)算結(jié)果的一部分無符號數(shù)運(yùn)算看CF,帶符號數(shù)運(yùn)算看SF、OF編程者知道是帶符號數(shù)還是無符號數(shù)∵CPU不知道是帶符號數(shù)還是無符號數(shù)∴兩種情況要各算一遍,提供結(jié)果給編程者按前例的分析,帶符號數(shù)若用補(bǔ)碼表示,實(shí)際上只算一遍,硬件只有一套這是帶符號數(shù)用補(bǔ)碼表示的根本原因!43理解機(jī)器數(shù)運(yùn)算問題標(biāo)志位是加減計(jì)算結(jié)果的441.4.5判斷OF三方法OF標(biāo)志最復(fù)雜、最重要,理解帶符號及其計(jì)算。(難點(diǎn))三種方法,等效人工判斷、計(jì)算機(jī)判斷以加法為例,減法同理可推441.4.5判斷OF三方法OF標(biāo)志最復(fù)雜、最重要,451.按OF定義判斷被加數(shù)、加數(shù)轉(zhuǎn)為真值后相加,再用真值的和判斷。-128~127;-32768~32767這是人工的方法,計(jì)算機(jī)中不可能用!前面3個(gè)例子都是用了這種方法缺點(diǎn):計(jì)算過程麻煩,容易出錯(cuò)451.按OF定義判斷被加數(shù)、加數(shù)轉(zhuǎn)為真值后相462.按符號位判斷被加數(shù)、加數(shù)的符號、和的符號:正+正=正:OF=0;正+正=負(fù):OF=1負(fù)+負(fù)=負(fù):OF=0;負(fù)+負(fù)=正:OF=1正+負(fù)=正,負(fù):OF=0前面的例子用這種方法判斷結(jié)果一樣這是人工的方法,看似繁瑣,實(shí)際最簡單計(jì)算機(jī)中也可用,但硬件不夠簡化!462.按符號位判斷被加數(shù)、加數(shù)的符號、和的符47OF的數(shù)學(xué)意義000H40H6480H-128-64C0H7FH127-1FFH機(jī)器數(shù):00H→40H→7FH→80H→C0H→FFH→00H064127-128-64-10左半圓正數(shù),右半圓負(fù)數(shù)。因?yàn)锳LU位數(shù)有限,計(jì)算機(jī)8位+8位=8位兩個(gè)數(shù)相加實(shí)際上:從一個(gè)點(diǎn)順時(shí)針走到另一個(gè)點(diǎn)。47OF的數(shù)學(xué)意義040H6480H-6448最高位、次高位的進(jìn)位:都有或都沒有進(jìn)位,則OF=0一個(gè)有一個(gè)沒有,OF=1前面的例子用這種方法判斷結(jié)果一樣關(guān)鍵是理解符號位的特殊性是CPU中硬件采用的方法,人工也可采用。也可轉(zhuǎn)化為雙符號位法。
←←
1,1111,0100
+1,1111,01001,1110,10003.按最高次高位進(jìn)位判斷48最高位、次高位的進(jìn)位:←←491.4.6標(biāo)志位小結(jié)人工判斷標(biāo)志位是為了掌握其原理,程序運(yùn)行時(shí)標(biāo)志位是由硬件自動(dòng)判斷的,編程的任務(wù)是根據(jù)這些標(biāo)志位做不同的處理。充分利用標(biāo)志位編出高水平算法是匯編語言程序設(shè)計(jì)的重要技巧。不同CPU標(biāo)志位不同,但原理完全相同!標(biāo)志位是一切邏輯推理的基礎(chǔ)!現(xiàn)代CPU增加了很多控制標(biāo)志位,但條件標(biāo)志位數(shù)量沒增加,沒有新的概念和原理491.4.6標(biāo)志位小結(jié)人工判斷標(biāo)志位是為了掌握其原理,501.5DEBUG操作(一)系統(tǒng)的內(nèi)部命令,不必復(fù)制或安裝。主要功能:顯示修改寄存器值,顯示修改內(nèi)存單元內(nèi)容單步運(yùn)行程序,斷點(diǎn)運(yùn)行程序顯示程序,修改部分指令命令:一個(gè)字母,后跟參數(shù)P18表1.8通過實(shí)驗(yàn)熟練掌握!!!501.5DEBUG操作(一)系統(tǒng)的內(nèi)部命令,不必復(fù)制或安511.6判斷標(biāo)志位實(shí)驗(yàn)預(yù)習(xí):人工計(jì)算和判斷標(biāo)志位;用ADDAL,BL,8位加,標(biāo)志位;用SUBAL,BL,8位減,標(biāo)志位。16位加減,判斷CF、SF、OF思考題前3題必做。511.6判斷標(biāo)志位實(shí)驗(yàn)預(yù)習(xí):人工計(jì)算和判斷標(biāo)志位;521.7BCD碼及計(jì)算∵計(jì)算機(jī)只能用二進(jìn)制∴對十進(jìn)制:十進(jìn)制→二進(jìn)制,計(jì)算后→十進(jìn)制有否更簡單的方法表示和計(jì)算十進(jìn)制數(shù)?計(jì)算機(jī)如何表示十進(jìn)制數(shù)?BCD碼計(jì)算機(jī)如何計(jì)算十進(jìn)制數(shù)?計(jì)算后調(diào)整521.7BCD碼及計(jì)算∵計(jì)算機(jī)只能用二進(jìn)制531.7.1BCD碼二進(jìn)制編碼的十進(jìn)制數(shù)真值98壓縮型10011000B=98H非壓縮型0000100100001000B=0908H比較:用無/帶符號二進(jìn)制表示=62H機(jī)器數(shù)98H表示的真值:無符號數(shù)152,帶符號(補(bǔ)碼)數(shù)-104壓縮型BCD碼980=0000B1=0001B2=0010B3=0011B4=0100B5=0101B6=0110B7=0111B8=1000B9=1001BP3表1.2531.7.1BCD碼二進(jìn)制編碼的十進(jìn)制數(shù)真值98541.7.2BCD碼的運(yùn)算加:先按二進(jìn)制加(ADD),再調(diào)整(DAA、AAA)減:先按二進(jìn)制減(SUB),再調(diào)整(DAS、AAS)乘:先按二進(jìn)制乘(MUL),再調(diào)整(AAM)除:先調(diào)整(AAD),再按二進(jìn)制除(DIV)調(diào)整指令共有6條,見P23表1.12分別與相應(yīng)的二進(jìn)制運(yùn)算指令配合,兩條指令執(zhí)行的總效果是:對BCD碼運(yùn)算,得的結(jié)果也是BCD碼.541.7.2BCD碼的運(yùn)算加:先按二進(jìn)制加(ADD),再55BCD碼加舉例DAA壓縮型BCD碼加調(diào)整AAA非壓縮型BCD碼加調(diào)整跟在以AL為目的的ADD/ADC指令之后AL=45H,BL=67H;必須是壓縮型BCD碼ADDAL,BL;AL=0ACH,CF=0,AF=0DAA;AL=12H,CF=1,AF=1AL=05H,BL=05H;必須是非壓縮型BCD碼ADDAL,BL;AL=0AH,CF=0,AF=0AAA;AL=00H,CF=1,AF=155BCD碼加舉例DAA壓縮型BCD碼加調(diào)56BCD碼減舉例DAS壓縮型BCD碼減調(diào)整AAS非壓縮型BCD碼減調(diào)整跟在以AL為目的的SUB/SBB指令之后AL=47H,BL=65H;必須是壓縮型BCD碼SUBAL,BL;AL=0E2H,CF=1,AF=0DAS;AL=82H,CF=1,AF=0AL=05H,BL=09H;必須是非壓縮型BCD碼SUBAL,BL;AL=0FCH,CF=1,AF=1AAS;AL=06H,CF=1,AF=156BCD碼減舉例DAS壓縮型BCD碼減調(diào)57BCD碼乘除舉例AAM非壓縮型BCD碼乘調(diào)整,跟在8位MUL之后AAD非壓縮型BCD碼除調(diào)整,
放在16位除8位的DIV指令之前AL=05H,BL=09H;必須是非壓縮型BCD碼MULBL;AH=00H,AL=2DHAAM;AH=04H,AL=05HAH=05H,AL=02H,BL=06H;必須是非壓縮型BCD碼AAD;AH=00H,AL=34HDIVBL;AL=08H,AH=04H57BCD碼乘除舉例AAM非壓縮型BCD碼581.8BCD碼運(yùn)算實(shí)驗(yàn)預(yù)習(xí):人工計(jì)算,DAA、AAM、AAD用ADDAL,BL,DAA,二進(jìn)制加,BCD碼加用MULBL,AAM,二進(jìn)制乘,BCD碼乘用AAD,DIVBL,BCD碼除AAA、DAS、AAS的驗(yàn)證思考題:帶符號BCD碼?581.8BCD碼運(yùn)算實(shí)驗(yàn)預(yù)習(xí):人工計(jì)算,DAA、AAM、59第二章匯編語言程序設(shè)計(jì)入門2.1尋址方式2.2數(shù)據(jù)傳送指令2.3匯編語言源程序結(jié)構(gòu)2.4匯編語言程序上機(jī)過程2.5指令錯(cuò)誤分析及尋址方式實(shí)驗(yàn)59第二章匯編語言程序設(shè)計(jì)入門2.1尋址方式602.1尋址方式
指令由操作碼和操作數(shù)兩部分組成尋址方式:如何指定操作數(shù)ADDAL,[BX]操作數(shù)組合三種情況:雙操作數(shù)、單操作數(shù)、無操作數(shù)(隱含)雙:目的操作數(shù),源操作數(shù)操作數(shù)存放的三個(gè)位置:CPU中、存儲器中、I/0接口中兩種性質(zhì)的操作數(shù):用來運(yùn)算的數(shù)據(jù)、轉(zhuǎn)移的目的地址602.1尋址方式指令由操作碼和操作數(shù)兩部分組成尋址方式612.1.1隱含尋址指令只有操作碼,沒指定操作數(shù),根據(jù)操作碼就可以確定相應(yīng)的操作數(shù).例:BCD碼運(yùn)算調(diào)整指令,
乘法、除法指令的其中一個(gè)操作數(shù)612.1.1隱含尋址指令只有操作碼,沒指定操作數(shù),622.1.2立即尋址指令中直接給操作數(shù),立即(數(shù))尋址用data表示,
8位或16位例:ADDAL,50HADDAL,CNT;CNT是符號常量執(zhí)行過程不需取數(shù)的時(shí)間只能用在源操作數(shù)622.1.2立即尋址指令中直接給操作數(shù),立即(數(shù))尋址632.1.3寄存器尋址指令中給出寄存器名稱,其內(nèi)容是操作數(shù)用reg表示,
AX,BX,CX,DX,SI,DI,BP,SP
AH,AL,BH,BL,CH,CL,DH,DL例:ADDAL,BL機(jī)器碼中寄存器編號用3位編碼,字或字節(jié)用1位編碼。632.1.3寄存器尋址指令中給出寄存器名稱,其內(nèi)容是操作642.1.4段寄存器尋址指令中給出段寄存器名稱,其內(nèi)容是操作數(shù)用segreg表示,DS、ES、SS、CS例:MOVDS,AX機(jī)器碼中段寄存器編號用2位編碼,只有MOV,PUSH,POP指令可用此尋址方式642.1.4段寄存器尋址指令中給出段寄存器名稱,其內(nèi)容是652.1.5I/O端口尋址操作數(shù)在I/O接口電路中,僅IN,OUT指令直接I/O端口尋址:用port表示,8位間接I/O端口尋址:用DX表示,16位例:INAL,50H;50H不是立即尋址!OUTDX,AL;DX不是寄存器尋址!端口=存儲單元,端口號=存儲單元地址652.1.5I/O端口尋址操作數(shù)在I/O接口電路中,僅I662.1.6轉(zhuǎn)移地址尋址轉(zhuǎn)移類指令中用直接轉(zhuǎn)移:用標(biāo)號直接指定目的地址間接轉(zhuǎn)移:用寄存器/內(nèi)存內(nèi)容指定目的地址段內(nèi):目的地址與轉(zhuǎn)移指令在同一段中段間:目的地址與轉(zhuǎn)移指令不在同一段中例:JMPNEXT;NEXT是一個(gè)標(biāo)號
JMPBX;BX的內(nèi)容是目的地址662.1.6轉(zhuǎn)移地址尋址轉(zhuǎn)移類指令中用672.1.7存儲器操作數(shù)尋址操作數(shù)在存儲器中,指令中指定其地址是用得最多,最靈活的一種尋址方式物理地址20位,邏輯地址16位物理地址=段地址×10H+偏移地址例:16661H=1234H×10H+4321H用mem表示偏移地址,BX,BP,SI,DI,方括號段地址固定搭配,DS,SS(,ES,CS)段首址=段地址×10H,能被16整除
12340H+4321H16661H實(shí)地址模式保護(hù)模式虛擬86模式672.1.7存儲器操作數(shù)尋址操作數(shù)在存儲器中,指令中指定681.直接尋址用變量名指定操作數(shù)的地址例:ADDAL,[Xval]
;方括號可省略Xval是變量名,注意與立即尋址的區(qū)別!ADDAL,[20H],20H會被匯編成立即數(shù)段地址固定搭配DS,偏移地址也稱為有效地址EA物理地址=DS×10H+EADS:[EA]681.直接尋址用變量名指定操作數(shù)的地址692.寄存器間接尋址用一16位寄存器指定操作數(shù)地址BX、SI、DI、BP之一BX、SI、DI搭配DS;BP搭配SSDS:[BX]/[SI]/[DI],或SS:[BP]例:ADDAL,[BP]ADD[SI],AX692.寄存器間接尋址用一16位寄存器指定703.寄存器相對尋址一16位寄存器加位移量指定操作數(shù)地址BX、SI、DI、BP之一;位移量為8位或16位帶符號數(shù),D8、D16。BX、SI、DI搭配DS;BP搭配SS例:ADDAL,[BP+5]若用SI、DI也稱為變址尋址;若用BX、BP也稱為基址尋址。703.寄存器相對尋址一16位寄存器加位移714.基址變址尋址基址寄存器加變址寄存器指定操作數(shù)地址基址:BX、BP之一;變址:SI、DI之一BX搭配DS;BP搭配SSDS:[BX+SI/DI],SS:[BP+SI/DI]例:ADDAL,[BP+SI]714.基址變址尋址基址寄存器加變址寄存器725.相對基址變址尋址基址加變址加位移量指定操作數(shù)地址基址:BX、BP之一;變址:SI、DI之一位移量為8位或16位帶符號數(shù),D8、D16。BX搭配DS;BP搭配SSDS:[BX+SI/DI+D8/D16]SS:[BP+SI/DI+D8/D16]例:ADDAL,[BP+SI-5]725.相對基址變址尋址基址加變址加位移量736.存儲器操作數(shù)使用共5種,物理地址由地址加法器自動(dòng)計(jì)算段替換,例:DS:[BP]、ES:[BX]多字節(jié):低地址低字節(jié),高地址高字節(jié)最低字節(jié)的地址就是多字節(jié)數(shù)的地址規(guī)則字:從偶地址開始存放,一個(gè)總線周期非規(guī)則字:從奇地址開始存放,兩個(gè)總線周期數(shù)組操作:首地址,前一元素、后一元素等效寫法:[BUF+BX+SI]、BUF[BX][SI]
BUF[BX+SI]雙操作數(shù)不能同為存儲器操作數(shù)尋址方式越復(fù)雜,則執(zhí)行時(shí)間越長736.存儲器操作數(shù)使用共5種,物理地址由742.2數(shù)據(jù)傳送指令每條指令都要了解六個(gè)方面的內(nèi)容:掌握:1、基本功能用途2、尋址方式組合3、對標(biāo)志位影響有影響無影響不確定一般了解:4、執(zhí)行時(shí)間5、字節(jié)數(shù)6、機(jī)器碼格式指令系統(tǒng)分六大類指令:1、數(shù)據(jù)傳送2、算術(shù)運(yùn)算3、邏輯運(yùn)算和移位4、程序流程控制5、串操作6、CPU控制742.2數(shù)據(jù)傳送指令每條指令都要了解六個(gè)方面的內(nèi)容:掌握752.2.1通用數(shù)據(jù)傳送指令MOVdst,src;復(fù)制:目的←源合法尋址方式組合分為四種情況:
①reg/mem,data②reg,memmem,reg③reg,reg④
segreg,reg/mem
reg/mem,segreg其它雙操作數(shù)與這4種組合比較使用最頻繁指令data不能為目的字節(jié)/字類型必須匹配MOVBYTEPTR[BX],20HCS不能為目的IP源目的都不行752.2.1通用數(shù)據(jù)傳送指令MOVdst,src;復(fù)762.2.2交換指令XCHGdst,src;dst←→src,操作數(shù)組合:MOV指令4種中的②③兩種,即:reg,memmem,regreg,reg762.2.2交換指令XCHGdst,src;ds772.2.3堆棧操作指令堆棧:FILO(先進(jìn)后出)的存儲區(qū)域入棧:PUSHsrc;SP←SP-2,SS:[SP]←src出棧:POPdst;dst←SS:[SP],SP←SP+2
src、dst=reg16、mem16、
segreg,(POPCS除外)772.2.3堆棧操作指令堆棧:FILO(先進(jìn)后出)的存儲78
堆棧操作舉例54300H……5431CH78H5431DH56H5431EH34H5431FH12H54320H\\\\\\設(shè):SS=5430HSP=0020HAX=1234HBX=5678H執(zhí)行:PUSHAX
PUSHBX
POPAX
POPBX結(jié)果:AX=5678HBX=1234H頂?shù)譙P=20HSP=1EHSP=1CH78堆棧操作舉例54300H……5431CH792.2.4查表指令也稱為換碼指令,表格最大256字節(jié)XLAT;AL←DS:[BX+AL]XLATsrc_tablesrc_table是表格首地址的變量名,可省略缺省段寄存器是DS,可以段替換特殊的尋址方式,或隱含尋址累加器專用指令792.2.4查表指令也稱為換碼指令,表格最大256字節(jié)802.2.5輸入輸出指令輸入輸出直接間接直接間接字節(jié)INAL,portINAL,DXOUTport,ALOUTDX,AL字INAX,portINAX,DXOUTport,AXOUTDX,AX累加專用指令唯一能對I/O接口中操作數(shù)操作的指令與MOV指令原理一樣802.2.5輸入輸出指令輸入輸出直接間接直接間接字節(jié)IN812.2.6地址傳送指令1、有效地址傳送指令
LEAreg16,mem;reg16←mem的偏移地址例:LEABX,Xval等效于MOVBX,offsetXval
LEASI,[BX+DI];SI←BX+DI2、地址指針傳送指令
LDSreg16,mem32;reg16←[mem32]
DS←[mem32+2]
LESreg16,mem32;reg16←[mem32]ES←[mem32+2]812.2.6地址傳送指令1、有效地址傳送指令2、地址指針822.2.7標(biāo)志位傳送指令隱含尋址,唯一對FLAGS操作的指令取標(biāo)志:LAHF;AH←FLAGS低8位置標(biāo)志:SAHF;FLAGS低8位←AH標(biāo)志入棧:PUSHF;SP←SP-2,SS:[SP]←FLAGS標(biāo)志出棧:POPF;FLAGS←SS:[SP],SP←SP+2822.2.7標(biāo)志位傳送指令隱含尋址,唯一對FLAGS操作832.2.8數(shù)據(jù)傳送指令對標(biāo)志位的影響POPF、SAHF對標(biāo)志位有影響其余數(shù)據(jù)傳送指令均對標(biāo)志位無影響理解數(shù)據(jù)傳送指令與總線信號關(guān)系:M/IO、/RD、/WRMOVAL,[BX];M,/RDMOV[BX],AL;M,/WRINAL,DX;IO,/RDOUTDX,AL;IO,/WR832.2.8數(shù)據(jù)傳送指令對標(biāo)志位的影響POPF、SAHF842.3匯編語言源程序結(jié)構(gòu)分段結(jié)構(gòu)偽指令段名標(biāo)號宏名DATA
SEGMENT
定義變量DATA
ENDSEXTRA
SEGMENT
定義變量EXTRA
ENDSSTACK
SEGMENT
定義堆棧STACK
ENDSMAC1
MACRO
宏定義體ENDMCODE
SEGMENTASSUMECS:CODE,DS:DATAES:EXTRA,SS:STACKSTART:……;段寄存器初始化
CALLSUB1
MAC1
;宏調(diào)用
……MOVAH,4CH;返回DOSINT21HSUB1
PROC
……RETSUB1
ENDPCODE
ENDSEND
START842.3匯編語言源程序結(jié)構(gòu)分段結(jié)構(gòu)DATASEGMEN852.3.1分段結(jié)構(gòu)一般分4個(gè)段,SEGMENT、ENDS數(shù)據(jù)段、擴(kuò)展段、堆棧段:定義數(shù)據(jù)代碼段:①ASSUME確定各段的性質(zhì)②起始地址定義標(biāo)號,最后ENDSTART③段寄存器賦初值,CS除外④MOVAH,4CH/INT21H返回系統(tǒng)宏定義MACRO/ENDM,宏調(diào)用子程序(過程),PROC/ENDP一般放在主程序后程序的層次結(jié)構(gòu)用鋸齒狀表示852.3.1分段結(jié)構(gòu)一般分4個(gè)段,SEGMENT、END862.3.2語句格式三種語句:
指令語句:匯編時(shí)能生成機(jī)器碼
偽指令語句(指示性語句):提供匯編、鏈接信息
宏指令語句語句格式:
標(biāo)號:操作碼目的操作數(shù),源操作數(shù);注釋
變量偽操作操作數(shù),……,操作數(shù);注釋標(biāo)號:宏指令名實(shí)際參數(shù);注釋862.3.2語句格式三種語句:872.3.3變量和標(biāo)號標(biāo)識符:變量、標(biāo)號、符號常量、段名、過程名、宏名保留字:指令操作碼、偽指令操作碼、寄存器名等
大小寫不敏感標(biāo)號只能在代碼段中定義,變量可在任何段中定義變量和標(biāo)號的三種屬性:段地址、偏移地址、類型變量類型:BYTE、WORD、DWORD等標(biāo)號類型:NEAR、FAR指令偽指令中,當(dāng)變量、標(biāo)號當(dāng)操作數(shù)用變量匯編成直接尋址或相對尋址標(biāo)號在跳轉(zhuǎn)指令中用,直接尋址872.3.3變量和標(biāo)號標(biāo)識符:變量、標(biāo)號、符號常量、段名882.3.4操作數(shù)、表達(dá)式和操作符操作數(shù):寄存器、變量、標(biāo)號、常量、表達(dá)式表達(dá)式:用操作符連接變量、寄存器、常量等匯編時(shí)對表達(dá)式進(jìn)行計(jì)算,數(shù)值表達(dá)式:立即數(shù)、位移量、常數(shù)的位置地址表達(dá)式:存儲器操作數(shù)的位置操作符:算術(shù)、邏輯、關(guān)系、分析、屬性882.3.4操作數(shù)、表達(dá)式和操作符操作數(shù):寄存器、變量、89
操作符算術(shù):+、-、*、/、MOD
地址±常數(shù),同一段中的地址1-地址2邏輯:NOT、AND、OR、XOR、SHR、SHL
只能對數(shù)值操作,不能對地址操作關(guān)系:EQ、NE、GT、LT、GE、LE,假=0,真=FF或FFFF
同一段中的兩地址可比較,比地址不是比內(nèi)容分析:SEG、OFFSET、TYPE、LENGTH、SIZE
段,偏移地址類型*個(gè)數(shù)=總字節(jié)數(shù)
變量:1,2,4
標(biāo)號:-1,-2屬性:HIGH、LOW、SHORT、PTR、THIS、段操作符
高字節(jié),低字節(jié),短,變類型,變類型,段替換自行實(shí)驗(yàn)試用!以后陸續(xù)會有一些應(yīng)用的例子。89操作符算術(shù):+、-、*、/、MOD902.3.5常用偽指令定義符號,也稱表達(dá)值賦值偽指令:名稱EQU表達(dá)式;不可重新定義名稱=表達(dá)式;可重新定義方便程序修改,使用常數(shù)、表達(dá)式意義清晰。數(shù)據(jù)定義:按地址順序存入各段變量偽操作符表達(dá)式,表達(dá)式,……變量偽操作符重復(fù)次數(shù)DUP(表達(dá)式,……)DB(字節(jié))、DW(字)、DD(雙字)、DQ(8)、DT(10)DW可定義偏移地址,DD可定義段地址和偏移地址可用?表示一個(gè)未置初值的數(shù)據(jù)902.3.5常用偽指令定義符號,也稱表達(dá)值賦值偽指令:91匯編語言程序設(shè)計(jì)方法(1)分析問題,明確要求(2)建立數(shù)學(xué)模型(3)確定算法和處理方案(4)畫流程圖(5)編制程序:劃分模塊,分配寄存器、存儲單元(6)上機(jī)調(diào)試(含匯編連接):模塊調(diào)試、整體調(diào)試(7)試運(yùn)行和分析結(jié)果(8)整理文檔,交付使用強(qiáng)調(diào):程序調(diào)試的重點(diǎn)性!上機(jī)91匯編語言程序設(shè)計(jì)方法(1)分析問題,明確要求上機(jī)922.4上機(jī)過程1、編輯:EDIT文件名.ASM2、匯編:MASM文件名;
用.ASM(源文件)生成.OBJ(目標(biāo)文件),也可生成.LST(列表)、.CRF(交叉引用)3、連接:LINK文件名;
用.OBJ文件生成.EXE(可執(zhí)行文件)
也可生成.MAP(存儲映象),還可使用.LIB(庫文件)4、調(diào)試:DEBUG文件名.EXE
按每個(gè)模塊(子程序)的輸入輸出關(guān)系檢查
最關(guān)鍵的一步,花費(fèi)最多時(shí)間。922.4上機(jī)過程1、編輯:EDIT文件名.ASM932.5指令錯(cuò)誤分析及尋址方式實(shí)驗(yàn)預(yù)習(xí):1.判斷指令錯(cuò)誤類型;
2.偽指令數(shù)據(jù)分配,指令執(zhí)行結(jié)果必做:1.編輯,匯編:讀懂錯(cuò)誤信息!2.完整程序,觀察數(shù)據(jù)如何存儲,
各種尋址方式執(zhí)行結(jié)果。選做:1.生成并觀察LST、CRF、MAP文件
2.對LEA、LDS、LES指令驗(yàn)證
3.驗(yàn)證各指令對標(biāo)志位的影響情況
4.驗(yàn)證各種操作符思考:1.以后指令有錯(cuò)必須搞清,不得重犯!2.以后指令格式、功能之惑都可驗(yàn)證!驗(yàn)證也是一種學(xué)習(xí)過程!932.5指令錯(cuò)誤分析及尋址方式實(shí)驗(yàn)預(yù)習(xí):1.判斷指令錯(cuò)誤94
尋址方式實(shí)驗(yàn)程序(1)DATASEGMENTA1DW1234HA2DB-1,0ABHDW-5A3DB56,56H,“ABcd$”DATAENDSEXTRASEGMENTB1DB1,2,3,4
B3EQUTHISBYTEB2DWA2DDA3DB(A3-A2)/2DB$-B1DBLENGTHBTMEXTRAENDSSTACKSEGMENTBTMDW16DUP(?)STACKENDS94尋址方式實(shí)驗(yàn)程序(1)DATASEGME95
尋址方式實(shí)驗(yàn)程序(2)CODESEGMENTASSUMECS:CODE,DS:DATA,ES:EXTRA,SS:STACKSTART:
MOVAX,DATAMOVDS,AXMOVAX,EXTRAMOVES,AXMOVAX,STACKMOVSS,AXMOVSP,SIZEBTM95尋址方式實(shí)驗(yàn)程序(2)CODESEGME96
尋址方式實(shí)驗(yàn)程序(3)MOVAX,A1+3;分析:AH=____,AL=____,驗(yàn)證:AH=____,AL=____MOVAX,B2;分析:AH=____,AL=____,驗(yàn)證:AH=____,AL=____MOVBP,OFFSETA1MOVAX,[BP];分析:AH=____,AL=____,驗(yàn)證:AH=____,AL=____MOVAX,DS:[BP];分析:AH=____,AL=____,驗(yàn)證:AH=____,AL=____MOVAX,ES:[BP];分析:AH=____,AL=____,驗(yàn)證:AH=____,AL=____MOVBX,OFFSETA1MOVAX,[BX+3];分析:AH=____,AL=____,驗(yàn)證:AH=____,AL=____MOVAX,ES:[BX+3];分析:AH=____,AL=____,驗(yàn)證:AH=____,AL=____PUSHAX;分析:SP=____,SS:[SP]=_____,驗(yàn)證:SP=____,SS:[SP]=_____PUSHBX;分析:SP=____,SS:[SP]=_____,驗(yàn)證:SP=____,SS:[SP]=_____POPAX;分析:SP=____,AX=____,驗(yàn)證:SP=____,AX=____POPBX;分析:SP=____,BX=____,驗(yàn)證:SP=____,BX=____MOVBX,OFFSETB2MOVAL,6XLAT;分析:AL=_____,驗(yàn)證:AL=_____XLATB3;分析:AL=_____,驗(yàn)證:AL=_____96尋址方式實(shí)驗(yàn)程序(3)MOVAX,A1+97第三章算術(shù)運(yùn)算程序(引言)程序結(jié)構(gòu):順序、分支、循環(huán)、子程序用:無條件跳轉(zhuǎn)指令、條件跳轉(zhuǎn)指令程序功能:算術(shù)運(yùn)算、代碼轉(zhuǎn)換、系統(tǒng)調(diào)用、表處理、子程序參數(shù)傳遞……編程方法:分配寄存器、存儲單元,……
本書有豐富的實(shí)用的實(shí)例,理解、掌握編程技巧。程序調(diào)試:檢查程序的正確性的過程,必不可少的一步!最重要的一步!97第三章算術(shù)運(yùn)算程序(引言)程序結(jié)構(gòu):順序、分支、循環(huán)、983.1跳轉(zhuǎn)指令3.2算術(shù)運(yùn)算指令3.3多字節(jié)加/減運(yùn)算程序3.4多字節(jié)加/減程序?qū)嶒?yàn)3.5多字節(jié)除法運(yùn)算程序3.6多字節(jié)除法程序?qū)嶒?yàn)3.7多字節(jié)乘法運(yùn)算程序3.8多字節(jié)乘法程序?qū)嶒?yàn)第三章算術(shù)運(yùn)算程序(目錄)加減乘除N!平方開平方……二進(jìn)制BCD碼983.1跳轉(zhuǎn)指令第三章算術(shù)運(yùn)算程序(目錄)加993.1跳轉(zhuǎn)指令實(shí)現(xiàn)分支結(jié)構(gòu)和循環(huán)結(jié)構(gòu)分:無條件跳轉(zhuǎn)、條件跳轉(zhuǎn)、循環(huán)控制對標(biāo)志位均不影響基本功能:修改IP、CS993.1跳轉(zhuǎn)指令實(shí)現(xiàn)分支結(jié)構(gòu)和循環(huán)結(jié)構(gòu)100段內(nèi)直接跳轉(zhuǎn):JMPnear_label;IP←IP+D16段內(nèi)短跳轉(zhuǎn):JMPSHORTshort_label;IP←IP+D8段間直接跳轉(zhuǎn):JMPfar_label;IP←標(biāo)號的偏移地址
CS←標(biāo)號的段地址相當(dāng)于高級語言的GOTO語句3.1.1無條件跳轉(zhuǎn)指令段內(nèi)間接跳轉(zhuǎn):JMPreg16/mem16;IP←reg16/mem16
例:JMPBXJMP[BX]段間間接跳轉(zhuǎn):JMPmem32;IP←[mem32、mem32+1]CS←[mem32+2、mem32+3]100段內(nèi)直接跳轉(zhuǎn):JMPnear_label101
直接跳轉(zhuǎn)指令舉例CODESEGMENTASSUMECS:CODESTART:
JMPSTART;短
JMPEXIT;內(nèi)
JMPEXIT1
JMPSHORTEXIT
JMPNEARPTREXIT
JMPFARPTREXIT;間
JMPFARPTREXIT2EXIT:MOVAH,4CHINT21HORG200HEXIT1:MOVAH,4CHINT21HCODEENDSCODE1SEGMENTASSUMECS:CODE1EXIT2:MOVAH,4CHINT21HCODE1ENDSENDSTART101直接跳轉(zhuǎn)指令舉例CODESEGMENT102
直接跳轉(zhuǎn)指令機(jī)器碼如何察看偏移地址200H開始的指令及CODE1段?102直接跳轉(zhuǎn)指令機(jī)器碼如何察看偏移地址200103
間接跳轉(zhuǎn)指令舉例段內(nèi)間接跳轉(zhuǎn):設(shè):BX=1234H,DS=1000H,(11234H)=5678H,若:執(zhí)行JMPBX,則IP=1234H,即目的地址為1234H;若:執(zhí)行JMP[BX],則IP=5678H,即目的地址為5678H。段間間接跳轉(zhuǎn):設(shè):BX=1234H,DS=1000H,(11234H)=5678H,(11236H)=9ABCH,若:執(zhí)行JMP[BX],則IP=5678H,CS=9ABCH,即程序跳到段地址為9ABCH,偏移地址為5678H的地址處繼續(xù)執(zhí)行。103間接跳轉(zhuǎn)指令舉例段內(nèi)間接跳轉(zhuǎn):段間間接跳104一般格式:Jcccshort_label;條件成立則跳,否則順序執(zhí)行要跟在影響標(biāo)志位的指令之后。D8=-128~127。相當(dāng)于高級語言中的IFTHENELSE結(jié)構(gòu)3.1.2條件跳轉(zhuǎn)指令圖3.2條件跳轉(zhuǎn)指令原理判斷條件?功能YYNNYa.邏輯結(jié)構(gòu)b.程序結(jié)構(gòu)無條件跳轉(zhuǎn)short_label功能N判斷條件?功能N功能Y多分支結(jié)構(gòu)要用多條條件跳轉(zhuǎn)指令組合實(shí)現(xiàn)。104一般格式:Jcccshort_label;條件成立則105JCshort_label;CF=1,則跳=JB/JNAEJNCshort_label;CF=0,則跳=JNB/JAEJZshort_label;ZF=1,則跳=JEJNZshort_label;ZF=0,則跳=JNEJSshort_label;SF=1,則跳JNSshort_label;SF=0,則跳JOshort_label;OF=1,則跳JNOshort_label;OF=0,則跳JPshort_label;PF=1,則跳=JPEJNPshort_label;PF=0,則跳=JPO無AF的條件跳轉(zhuǎn)指令。
單個(gè)標(biāo)志位的條件跳轉(zhuǎn)指令105JCshort_label;CF=1,則跳=JB/106LOOPshort_label;CX←CX-1,若CX≠0則跳轉(zhuǎn)LOOPZshort_label;CX←CX-1,若CX≠0且ZF=1則跳轉(zhuǎn)LOOPEshort_label;LOOPNZshort_label;CX←CX-1,若CX≠0且ZF=0則跳轉(zhuǎn)LOOPNEshort_label;JCXZshort_label;若CX=0則跳轉(zhuǎn)3.1.3循環(huán)控制指令相當(dāng)于高級語言的DOUNTIL結(jié)構(gòu)。106LOOPshort_label;CX←CX-1,107圖3.3循環(huán)指令原理CX=0?循環(huán)體YNa.LOOP指令b.LOOPE指令CX←CX-1short_labelLOOP條件?循環(huán)體CX=0或ZF=0CX←CX-1short_label影響ZFLOOPECX≠0且ZF=1
循環(huán)指令原理控制循環(huán)結(jié)束的條件:計(jì)數(shù)、條件;要注意循環(huán)結(jié)束條件設(shè)置,不能死循環(huán),雙重循環(huán):不能交叉,結(jié)束條件完全無關(guān)。107圖3.3循環(huán)指令原理CX=0?循環(huán)體YNa.LOO1083.2算術(shù)運(yùn)算指令二進(jìn)制、BCD碼:加、減、乘、除3.2.1二進(jìn)制運(yùn)算指令3.2.2BCD碼調(diào)整指令1083.2算術(shù)運(yùn)算指令二進(jìn)制、BCD碼:109一般加/減
ADDdst,src;dst←dst+src
SUBdst,src
;dst←dst-src帶CF加/減:實(shí)際上涉及兩個(gè)CF!
ADCdst,src;dst←dst+src+CF
SBBdst,src;dst←dst-src-CF比較
CMPdst,src;dst-src尋址方式組合:①②③對6個(gè)條件標(biāo)志位均有影響3.2.1二進(jìn)制運(yùn)算指令
加/減指令109一般加/減帶CF加/減:實(shí)際上涉及兩個(gè)CF!比較尋址方1102、判斷兩數(shù)大小:無符號:CF=0,則dst≥src;CF=1,則dst<src
帶符號:正-負(fù)=正:SF=0,OF=0;正-正=正:SF=0,OF=0
負(fù):SF=1,OF=1;
負(fù):SF=1,OF=0負(fù)-正=負(fù):SF=1,OF=0;負(fù)-負(fù)=負(fù):SF=1,OF=0
正:SF=0,OF=1;
正:SF=0,OF=0∴OF、SF相同,則dst≥src;OF、SF不同則dst<srcOFSF=0,則dst≥src;OFSF=1則dst<src1、判斷兩數(shù)是否相等:無符號帶符號方法相同
ZF=1,則dst=src;ZF=0,則dst≠srcCMPdst,src后,根據(jù)標(biāo)志位判斷兩數(shù)相等和大?。?/p>
兩數(shù)比較大小1102、判斷兩數(shù)大小:1、判斷兩數(shù)是否相等:無符號帶符號方111
加1/減1指令I(lǐng)NCdst;dst←dst+1DECdst;dst←dst-1對CF無影響!用于修改地址指針、計(jì)數(shù)dst=reg、mem例:多字節(jié)加/減循環(huán)…….CLCNEXT:MOVAL,[SI]ADCAL,[DI]MOV[BX],ALINCSIINCDIINCBXDECCXJNZNEXT……..CF
xx,
溫馨提示
- 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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 醫(yī)院醫(yī)??颇甓裙ぷ骺偨Y(jié)
- 退役軍人服務(wù)保障體系標(biāo)準(zhǔn)化建設(shè)
- 求職者面試技巧全套教程
- 一般工貿(mào)行業(yè)新員工三級安全培訓(xùn)考試試題及答案
- 建設(shè)工程施工合同糾紛要素式起訴狀模板修改無約束
- 不用熬夜寫!建設(shè)工程施工合同糾紛要素式起訴狀模板現(xiàn)成用
- 保險(xiǎn)講師培訓(xùn)
- 環(huán)境友好催化技術(shù)課件
- 調(diào)色年終總結(jié)和配料(3篇)
- 公務(wù)員法執(zhí)行情況自查報(bào)告
- 枕骨骨折的護(hù)理課件
- TCEC電力行業(yè)數(shù)據(jù)分類分級規(guī)范-2024
- 駱駝的養(yǎng)殖技術(shù)與常見病防治
- GB/T 26951-2025焊縫無損檢測磁粉檢測
- 2025及未來5-10年高壓管匯項(xiàng)目投資價(jià)值市場數(shù)據(jù)分析報(bào)告
- 《國家十五五規(guī)劃綱要》全文
- 腹部手術(shù)圍手術(shù)期疼痛管理指南(2025版)課件
- 2025年衛(wèi)生人才評價(jià)考試(臨床醫(yī)學(xué)工程技術(shù)中級)歷年參考題庫含答案
- 呼吸康復(fù)科普脫口秀
- 2025年《思想道德與法治》期末考試題庫及答案
- 2025初一英語閱讀理解100篇
評論
0/150
提交評論