版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、何謂計(jì)算機(jī)? 計(jì)算機(jī)是一種能夠自動進(jìn)行算術(shù)和邏輯運(yùn)算的電子裝置。 關(guān)鍵詞:電子裝置、運(yùn)算、自動 計(jì)算機(jī)特點(diǎn):二進(jìn)制、高速計(jì)算機(jī)的編碼系統(tǒng)。 運(yùn)算是計(jì)算機(jī)的核心功能。它所有的擴(kuò)展功能都和編碼有關(guān)。 計(jì)算機(jī)中只能存儲和處理二進(jìn)制數(shù)碼,一些數(shù)據(jù)、字符、漢字、圖像聲音等信息在計(jì)算機(jī)中都是用規(guī)定好的二進(jìn)制組合代碼來表示的,稱為計(jì)算機(jī)的編碼系統(tǒng)。 計(jì)算機(jī)硬件由運(yùn)算器、控制器、存儲器、輸入設(shè)備、輸出設(shè)備五大基本部件組成:計(jì)算機(jī)分類: 超級計(jì)算機(jī)、大型計(jì)算機(jī)、小型計(jì)算機(jī)、微型計(jì)算機(jī)或個人計(jì)算機(jī) 嵌入式計(jì)算機(jī)微型計(jì)算機(jī)或個人計(jì)算機(jī)是目前發(fā)展最快, 應(yīng)用最普及的計(jì)算機(jī)。CPU是電腦的核心,即中央處理器。微型計(jì)算機(jī)
2、的應(yīng)用:1、科學(xué)計(jì)算2、信息處理3、計(jì)算機(jī)輔助技術(shù)4、過程控制 5、人工智能6、網(wǎng)絡(luò)通信總線是計(jì)算機(jī)系統(tǒng)模塊化的產(chǎn)物。分時和共享是總線的兩個基本特性。系統(tǒng)總線包括:地址總線、數(shù)據(jù)總線、控制總線。微型計(jì)算機(jī)的性能指標(biāo):1. 運(yùn)算速度2. 字長(目前常用的微型機(jī)都是32位或64 位。) 3. 存儲器的容量常見的寄存器有:緩沖寄存器、移位寄存器、計(jì)數(shù)器、累加器。微型計(jì)算機(jī)的軟件系統(tǒng): 計(jì)算機(jī)軟件是指支持計(jì)算機(jī)運(yùn)行的各種程序,以及開發(fā)、使用和維護(hù)這些程序的各種技術(shù)資料的總稱。計(jì)算機(jī)的硬件和軟件二者缺一不可,否則不能正常工作 系統(tǒng)軟件的主要功能是簡化計(jì)算機(jī)操作,充分發(fā)揮硬件功能,支持應(yīng)用軟件的運(yùn)行并提供
3、服務(wù)。 應(yīng)用軟件處于軟件系統(tǒng)的最外層,直接面向用戶,為用戶服務(wù)。應(yīng)用軟件是為了解決各類應(yīng)用問題而編寫的程序,包括用戶編寫的特定程序,以及商品化的應(yīng)用軟件和套裝軟件。程序設(shè)計(jì)語言,是人機(jī)交流信息的一種特定語言。在編寫程序時用指定的符號來表達(dá)語義。8086 微處理器的內(nèi)部結(jié)構(gòu)1. 構(gòu)成:8086 由執(zhí)行部件(EU)和總線接口部件(BIU)組成。2.功能:執(zhí)行部件(EU)負(fù)責(zé)指令的執(zhí)行,總線接口部件(BIU)負(fù)責(zé)對總線的操作,進(jìn)行與存儲器或IO 接口的數(shù)據(jù)交互。3. EU各部分功能 4個通用數(shù)據(jù)寄存器 AX 用作累加器; BX 一般用作基地址寄存器; CX 通常用作計(jì)數(shù)器; DX 多用作輔助累加器。
4、 4個專用地址指針寄存器 SP 堆棧指針寄存器; BP 基地址指針寄存器; SI 源變址寄存器; DI 目的變址寄存器。 算術(shù)邏輯單元(ALU): ALU 執(zhí)行16位的算術(shù)與邏輯操作。 標(biāo)志寄存器(FR):16位寄存器,其中有7位未用。4. 總線接口部件BIU 1.功能:BIU 控制完成全部總線操作,自動從存儲器取出指令并根據(jù)EU的命令控制數(shù)據(jù)在CPU 和存儲器或IO 接口之間傳送。2.工作過程:BIU 將邏輯地址轉(zhuǎn)換成物理地址,如果是存儲器訪問,BIU 通過地址加法器將16 位段寄存器提供的段地址移位,和16 位偏移地址寄存器的地址相加,得到20 位的存儲器地址,再根據(jù)總線操作類型讀取指令或
5、讀寫操作數(shù)。BIU得到指令以后,將其送入6 字節(jié)的指令隊(duì)列,以備EU 順序取出執(zhí)行。3.構(gòu)成: 段寄存器、指令指針寄存器、地址加法器、指令隊(duì)列、總線控制邏輯 4個16位的段寄存器 CS 代碼段寄存器,存放程序段地址; DS 數(shù)據(jù)段寄存器,存放數(shù)據(jù)段地址; ES 擴(kuò)展段寄存器,存放輔助數(shù)據(jù)段地址 SS 堆棧段寄存器,存放堆棧段地址。 指令指針寄存器(IP) 用于存放程序段的偏移量地址(16位)。地址加法器 根據(jù)邏輯地址計(jì)算出20 位物理地址。指令隊(duì)列 存放多條指令用于指令預(yù)取。(6字節(jié))總線控制邏輯 實(shí)現(xiàn)對總線操作的控制,產(chǎn)生控制號。指令流水線:串行操作和并行操作8086 的存儲器組織1.存儲空
6、間:8086 有20 根地址線,可以尋址MB 的存儲器空間。 對應(yīng)存儲器的地址編碼為 00000 H FFFFF H。 2.存儲器分段:為了能夠利用16 位寄存器訪問MB 的內(nèi)存空間。3.存儲器地址 物理地址:每個存儲器單元由20條地址線的一個惟一編碼與之對應(yīng)。這個 編碼也叫存儲單元的地址。這種實(shí)際的存儲器編碼地址稱為物理 地址或絕對地址。 段基址:段的起始地址的高16 位稱段基址。 偏移地址:段內(nèi)的相對地址,相對于段起始地址的偏移值,稱偏移地址。 邏輯地址:段基址和偏移地址都不是絕對地址, 而是一個相對的地址,通常稱 這種程序中編排的地址為邏輯地址。 邏輯地址表示格式: 段基址:偏移地址 物
7、理地址形成: 把段基址存放到段寄存器中,偏移地址存放到偏移量寄存器中, 經(jīng)過20位的加法器就可以形成任意一個20 位的物理地址。4.數(shù)據(jù)的存放 在計(jì)算機(jī)的存儲器中存放著三類信息: 代碼:指令的機(jī)器碼, 指示CPU 執(zhí)行 什么操作。 數(shù)據(jù):數(shù)值和字符, 程序加工的對象; 暫存數(shù)據(jù)(堆棧數(shù)據(jù)):臨時保存的返回地址和中間結(jié)果。 為了避免混淆, 這三類信息通常分別存放在各自的存儲器區(qū)域內(nèi)。用段寄存器指示這些存儲區(qū)域的起始地址。一般每個段落中存放著同類性質(zhì)的信息。8086約定用四個段寄存器存放段基址。 CS16 位代碼段寄存器 DS16 位數(shù)據(jù)段寄存器 ES16 位附加段寄存器(第二數(shù)據(jù)段) SS16
8、位堆棧段寄存器5.各類數(shù)據(jù)物理地址 CS、DS、SS 和其他寄存器組合指向存儲單元的示意圖例5.3 如果在一個程序段開始執(zhí)行之前, (CS)=1003H,(IP)=1007H,給定一個數(shù)據(jù)的偏移地址是0047H, 且(DS)=1101H。試問:(1 ) 該程序段的第一個字的物理地址是多少?(2 ) 數(shù)據(jù)在內(nèi)存中的物理地址是多少?解:邏輯地址表示格式是:段地址:偏移地址。根據(jù)物理地址的定義式, 得(1 ) 物理地址= ( CS)×10H+1007H=(1003H×10H)+1007H =11037H(2 ) 物理地址= (DS)×10H+0027H =(1101H&
9、#215;10H)+0047H=11057H【評注】 物理地址是惟一的。 對應(yīng)同一個物理地址, 可以有不同的邏輯地址。 分清段內(nèi)偏移地址的來源及其相匹配的段地址。例5.4 若某數(shù)據(jù)區(qū)的開始地址為A7F0H: 2B40H , 則該數(shù)據(jù)區(qū)的首字單元和32 個字的末字單元的物理地址分別為多少?解:首地址為(0A7F0×10H ) + 2B40H = 0AAA40H 末地址為0AAA40H + (20H -1 )×2 = 0AAA7EH【評注】數(shù)據(jù)區(qū)最后一個字的地址為:首地址+ ( 字?jǐn)?shù)- 1) ×2。例5.5 如果一個堆棧從地址3250H : 0000H 開始, 最先存
10、入字的偏移地址為0100H, SP 的內(nèi)容為0052H , 問:(1 ) 棧頂?shù)刂肥鞘裁?(2 ) 棧底地址是什么?(3 ) 存入數(shù)據(jù)1234H 和5678H 后, SP 的值是多少?解:堆棧的最高地址叫棧底, 堆棧指針SP 總是指向棧頂。棧頂?shù)刂肥亲詈笠粋€存入的數(shù)據(jù)地址。棧頂?shù)刂? (SS)×10H + (SP) =3250H×10H + 0052H = 32552H棧底地址= (SS)×10H + 0100H = 32600H8086CPU 中堆棧存取必須以字為單位。存入數(shù)據(jù)1234H 和5678H , 即兩個字壓入堆棧后, SP 減4 , SP 的內(nèi)容為:
11、( SP ) -字?jǐn)?shù)×2 = 0052H - 2×2 = 004E H。SS 的內(nèi)容不變。例5.6 數(shù)據(jù)總線和地址總線在結(jié)構(gòu)上有什么不同之處? 如果一個系統(tǒng)的數(shù)據(jù)和地址合用一套總線或者合用部分總線, 那么,要靠什么來區(qū)分地址和數(shù)據(jù)?解:從結(jié)構(gòu)上看, 數(shù)據(jù)總線是雙向的, 即數(shù)據(jù)既可以從CPU送到其他部件, 也可以從其他部件送到CPU; 地址總線是專門用來傳送地址信息的, 而地址總是從CPU 送出去的, 所以地址總線是單向的。如果采用地址總線和數(shù)據(jù)總線復(fù)用技術(shù), 則需在總線周期中依靠時序、并配合一定的控制信號來區(qū)分?!驹u注】在 8086/ 8088CPU 中就采用了地址總線和數(shù)
12、據(jù)總線復(fù)用的技術(shù), 在總線周期中, T1 狀態(tài)時復(fù)用總線充當(dāng)?shù)刂房偩€, 并為了告示地址已準(zhǔn)備好, 可以被鎖存,CPU 此時還會送出高電平的ALE 信號。從總線周期的T2 狀態(tài)開始, 復(fù)用線充當(dāng)數(shù)據(jù)總線。例5.7 在總線周期的T1 , T2 , T3 , T4 狀態(tài), 8086CPU 分別執(zhí)行什么動作? 什么情況下需要插入等待狀態(tài)TW ? 等待狀態(tài)TW在哪兒插入? 怎樣插入?解T1 , T2 , T3 , T4 狀態(tài)構(gòu)成基本總線周期:(1 ) 在T1 狀態(tài), CPU 往多路復(fù)用總線上發(fā)出地址信息, 以指出要尋址的存儲單元或外設(shè)端口地址。(2 ) 在T2 狀態(tài), CPU 從總線上撤消地址, 而且將
13、總線的低16位浮置成高阻狀態(tài), 為傳輸數(shù)據(jù)作準(zhǔn)備。(說明: 在寫總線周期的T2 狀態(tài), CPU 在撤消地址后直接輸出數(shù)據(jù), 而不用經(jīng)過高阻狀態(tài))??偩€的最高4 位用來輸出本總線周期狀態(tài)信息。(3 ) 在T3 狀態(tài), 多路總線的高4 位繼續(xù)提供狀態(tài)信息, 而多路總線的低16 位上出現(xiàn)由CPU 寫出的數(shù)據(jù)或者CPU 從存儲器或I/ O 端口讀入的數(shù)據(jù)。(4 ) 在T4 狀態(tài), 總線周期結(jié)束。當(dāng)指定的存儲器或外設(shè)完成數(shù)據(jù)傳送時, 便在“READY”信號線上發(fā)出“準(zhǔn)備好”信號, CPU 接收到這一信號后, 會自動脫離TW 狀態(tài)而進(jìn)入T4 狀態(tài), 結(jié)束總線周期。當(dāng)外設(shè)或存儲器速度較慢, 不能及時地配合C
14、PU 傳送數(shù)據(jù)時, 需在總線周期中插入等待狀態(tài)TW 。這時, 外設(shè)或存儲器應(yīng)通過“READY”信號線在T3 狀態(tài)啟動之前向CPU 發(fā)一個“ 數(shù)據(jù)未準(zhǔn)備好”信號, 于是CPU 會在T3之后插入1 個或多個等待狀態(tài)TW 。當(dāng)指定的存儲器或外設(shè)完成數(shù)據(jù)傳送時, 便在“READY”信號線上發(fā)出“準(zhǔn)備好”信號, CPU 接收到這一信號后, 會自動脫離TW 狀態(tài)而進(jìn)入T4 狀態(tài), 結(jié)束總線周期。指令的組成指令由操作碼和操作數(shù)兩部分組成。操作碼說明計(jì)算機(jī)要執(zhí)行哪種操作。操作數(shù)是指令執(zhí)行的參與者。操作數(shù)分為四種類型:立即數(shù)、寄存器操作數(shù)、存儲器操作數(shù)、外設(shè)端口操作數(shù)尋找操作數(shù)的過程就是尋址方式:立即數(shù)尋址方式
15、、寄存器尋址方式、存儲器尋址方式、外 設(shè)端口尋址方式注意:(1 )立即數(shù)只能作為源操作數(shù), 不能作為目標(biāo)操作數(shù)。 (2 )立即數(shù)不能直接傳送到段寄存器, 但可通過其他寄存器或堆棧傳送。 (3 )MOV 指令的兩個操作數(shù)類型必須相同。 例如: MOV AL, BX 是錯誤的指令。 (4 )CPU 中的寄存器除IP外都可通過MOV 指令訪問。 (5 )CS 只能作為源操作數(shù), 不能作為目標(biāo)操作數(shù)。 (6 )段寄存器之間不能直接傳送, 兩個內(nèi)存單元之間不能直接傳送。 例如: MOV BX , SI 是錯誤的指令。 (7) PUSH CS 是合法指令, 而POP CS 卻是非法指令, 因?yàn)?086 指
16、令系統(tǒng)中不允許CS寄存器作為目標(biāo)操作數(shù), 執(zhí)行POP CS 將改變代碼段寄存器CS 的內(nèi)容, 會導(dǎo)致CPU 從新的CS 和IP 給出的與程序毫不相干的地址中去取下一條指令, 從而使程序錯誤地運(yùn)行。 (8 )堆棧操作遵循“ 后進(jìn)先出”的原則。保存內(nèi)容和恢復(fù)內(nèi)容時, 要按照對稱的次序執(zhí)行。非法傳送 兩個操作數(shù)的類型不一致 絕大多數(shù)雙操作數(shù)指令,除非特別說明,目的操作數(shù)與源操作數(shù)必須類型一致,否則為非法指令MOV AL,050AH;050Ah為字,而AL為字節(jié)寄存器有明確的字節(jié)或字類型,有寄存器參與的指令其操作數(shù)類型就是寄存器的類型對于存儲器單元與立即數(shù)同時作為操作數(shù)的情況,必須顯式指明;byte
17、ptr指示字節(jié)類型,word ptr指示字類型 兩個操作數(shù)不能都是存儲器 8086指令系統(tǒng)不允許兩個操作數(shù)都是存儲單元(除串操作指令),要實(shí)現(xiàn)這種傳送,可通過寄存器間接實(shí)現(xiàn) MOV AX,buffer1 ;AXbuffer1(將buffer1內(nèi)容送AX) MOV buffer2,AX ;buffer2AX ;這里buffer1和buffer2是兩個字變量 ;實(shí)際表示直接尋址方式 段寄存器的操作有一些限制 不允許立即數(shù)傳送給段寄存器 MOV DS,100H ;立即數(shù)不能傳送段寄存器 不允許直接改變CS值 MOV CS,SI ;不允許使用的指令 不允許段寄存器之間的直接數(shù)據(jù)傳送 MOV DS,ES
18、 ;不允許段寄存器間傳送例:將從DATA1開始的存儲區(qū)域中的100個數(shù)存入DATA2開始的存儲區(qū)中 MOV SI,OFFSET DATA1 ; SI作源操作數(shù)地址指針 (OFFSET為運(yùn)算符, DATA1為變量。 OFFSET DATA1表示傳送的是地址) MOV DI,OFFSET DATA2;DI作目的操作數(shù)地址指針 MOV CX,100;置計(jì)數(shù)器初值NEXT:MOV AL,SI MOV DI,AL;傳送一個字節(jié)數(shù)據(jù) INC SI ;源操作數(shù)地址指針加1 INC DI;目的操作數(shù)地址指針加1 DEC CX;計(jì)數(shù)器減1,CX(CX1) JNZ NEXT;若CX0則轉(zhuǎn)NEXT HLT;停機(jī)輸入
19、輸出尋址方式直接尋址:只用于尋址00HFFH前256個端口,操作數(shù)i8表示端口號。間接尋址:可用于尋址全部64K個端口,DX寄存器的值就是端口號。對大于FFH的端口只能采用間接尋址方式。例:有兩組50個字節(jié)的數(shù)據(jù),分別放在自FIRST和SECOND開始的存儲區(qū)中,試比較兩組數(shù)據(jù)是否相同,若相同,AL為0;若不同,AL為0FFH。 MOV SI,OFFSET FIRST ;SI作為第一組數(shù)的地址指針 MOV DI,OFFSET SECOND;DI作為第二組數(shù)的地址指針 MOV CX,50;置計(jì)數(shù)器初值 P: MOV AL,SI;從第一組數(shù)中取出一個數(shù)送AL CMP AL,DI;與第二組數(shù)中相同位
20、置的數(shù)比較 JZ NEXT;若相等,繼續(xù)比較 MOV AL,0FFH;若不等,AL為0FFH JMP STOP;跳出循環(huán)NEXT:INC SI;第一組數(shù)指針加1 INC DI;第二組數(shù)指針加1 DEC CX;計(jì)數(shù)值減1 JNZ P;若沒有比較完,則跳至P MOV AL,0;比較完了,都相等,則AL為0 STOP: HLT 程序設(shè)計(jì)語言可分為三種:機(jī)器語言、匯編語言、高級語言例:實(shí)現(xiàn)1100 的累加, 并將和存入SUM。ADDCOUNT EQU 100 ;為定義符號常量ADDCOUNTMYDATA SEGMENT ; 定義數(shù)據(jù)段SUM DW 0 ; 定義變量SUM, 并置初值為0STR1 DB
21、OK ! ; 定義字符串變量STR1MYDATA ENDS ; 定義數(shù)據(jù)段結(jié)束MYCODE SEGMENT ; 定義代碼段 ASSUME CS: MYCODE, DS : MYDATA ; 聲明代碼段、數(shù)據(jù)段為哪一個段START : MOV AX, MYDATA ; 初始化DS為MYDATA MOV DS, AX XOR AX, AX MOV CX, ADDCOUNTADDUP: ADD AX, CX ; CX 用于累加次數(shù)計(jì)數(shù), 完成1100 的累加 DEC CX JNZ ADDUP MOV SUM, AX MOV AH , 9 ; 向屏幕輸出OK !MOV DX, OFFSET STR1
22、INT 21H MOV AH , 4CH ; 退出程序返回DOS INT 21HMYCODE ENDS ; 定義代碼段結(jié)束 END START ; 定義該程序模塊結(jié)束掌握基本指令:MOVXCHGXLAT、PUSHPOP、LEA;CLCSTCSTC、CLDSTD;ADDADCINC、SUBSBBDECCMPNEG、CBWCWD匯編語言源程序的一般格式段結(jié)構(gòu):匯編語言源程序一般包括數(shù)據(jù)段、堆棧段、附加數(shù)據(jù)段和代碼段, 即程序由段結(jié)構(gòu) 組成。數(shù)據(jù)段:用于存放變量、數(shù)據(jù)和結(jié)果。堆棧段:用于執(zhí)行壓棧、出棧操作, 以便子程序調(diào)用時保存現(xiàn)場和恢復(fù)現(xiàn)場, 也用于傳遞數(shù)。代碼段:則是所編制的執(zhí)行程序或常數(shù)表格。
23、代碼段必不可少, 其他段不需要時可以省略。 匯編源程序一般由若干段組成, 每個段都有一個名字(叫段名) , 以SEGMENT 作為段的開始, 以ENDS 作為段的結(jié)束, 這兩者( 偽指令) 前面都要冠以相同的名字。 從性質(zhì)上可分為代碼段、堆棧段、數(shù)據(jù)段和附加段四種, 但代碼段與堆棧段是不可少的, 數(shù)據(jù)段與附加段可根據(jù)需要設(shè)置。在本例中, 一共定義了3 個段: 1 個數(shù)據(jù)段、1 個堆棧段和1 個代碼段。這3 個段的段名分別為DATA, STACK 和CODE, 均由用戶自己設(shè)定。在代碼段中, 用ASSUME 命令 (偽命令) 告訴匯編程序, 在各種指令執(zhí)行時所要訪問的各段寄存器將分別對應(yīng)哪一段。
24、程序中不必給出這些段在內(nèi)存中的具體位置, 而由匯編程序自行定位。各段在源程序中的順序可任意安排, 段的數(shù)目原則上也不受限制, 段名可以任選。 源程序的每一段是由若干行匯編語句組成的, 每一行只有一條語句, 且不能超過128 個字符, 但一條語句允許有后續(xù)行, 最后均以回車作結(jié)束。整個源程序必須以END 語句來結(jié)束,它通知匯編程序停止匯編。END 后面的標(biāo)號START 表示該程序執(zhí)行時的起始地址。匯編語言語句格式匯編語言源程序:由一系列語句組成。 語句:包括指令語句與偽指令語句。指令語句:是機(jī)器指令的符號表示, 經(jīng)過匯編后產(chǎn)生對應(yīng)的機(jī)器碼, 指定CPU何 種操作, 在執(zhí)行程序時被執(zhí)行。偽指令語句
25、:即偽指令語句只是給匯編程序提供一些控制信息,如定義符號, 分配存儲單元, 初始化存儲器等, 而本身并不生成目標(biāo)代碼。1、 標(biāo)號和名字(1) 標(biāo)號及其屬性 標(biāo)號是指令的符號地址, 表示“ :”后面的指令所在的存儲器中的首地址, 用來作為匯編語言源程序中轉(zhuǎn)移、調(diào)用以及循環(huán)等指令的操作數(shù)程序轉(zhuǎn)移的目標(biāo)地址。 三種屬性:段地址、段內(nèi)偏移地址以及類型。 段地址: 標(biāo)號所在段的段地址( 16 位數(shù)) , 是標(biāo)號所在段起始地址的前16 位。 段內(nèi)偏移地址: 它是標(biāo)號與段起始地址之間 相距的字節(jié)數(shù), 為一16 位無符號數(shù)。 類型: 類型表示該標(biāo)號所代表的指令的轉(zhuǎn)移范圍, 分NEAR 與FAR 兩種。 NEA
26、R 類型的標(biāo)號僅在同一段內(nèi)使用, 用2 字節(jié)指針給出偏移地址屬性; FAR 類型的標(biāo)號無此限制, 必須用4 字節(jié)指針指出其段基地址及段內(nèi)偏移地址。(2) 標(biāo)號的定義 標(biāo)號的組成: 標(biāo)號用一標(biāo)識符定義, 即以字母開頭, 由字母、數(shù)字、特殊字符(如?、* 、下劃線、S| 、 等)組成的字符串表示,標(biāo)號的最大長度不超過31個字符,標(biāo)號最好具有一定含義的英文單詞或單詞縮寫表示, 以便于閱讀。 在指令的助記符之前, 使用標(biāo)號并緊跟一個冒號“ :”, 表示該標(biāo)號被定義為一個類型為NEAR 的標(biāo)號。(3)名字2、指令助記符 指令助記符和偽指令助記符。3、參數(shù) 不同的語句,要求有不同的參數(shù)。 參數(shù)可分為三類:
27、常量、操作數(shù)和表達(dá)式。4、注釋 以“ ; ”開始, 用來簡要說明該指令在程序中的作用, 以提高程序的可讀性。常量:固定值稱為常量, 在匯編期間它的值已完全確定, 且在程序運(yùn)行中它的值不會發(fā)生改變。常量可以是數(shù)據(jù)和字符。常量有“數(shù)字常量”和“字符串常量”等。 (1)數(shù)字( 整數(shù))常量:如 01001001B、1538D、1538、0ABCDH (2)字符串常量:用單引號括起來的一個或多個字符。這些字符以ASCII 碼形式存儲在內(nèi)中。 如AB, 在內(nèi)存中就是41H , 42H;操作數(shù):操作數(shù)可以是常量、寄存器名和存儲器操作數(shù)。 存儲器操作數(shù)是存儲器地址,用于指令語句的各種尋址方式。在匯編語言中一般
28、不用物理地址,而用符號地址,具體有標(biāo)號和變量兩種。1) 變量:變量是指存放在某些存儲單元的數(shù)據(jù),在程序運(yùn)行期間隨時可以修改。為了便于對變量的訪問, 常以變量名的形式出現(xiàn)在程序中, 變量名可以看做是存放數(shù)據(jù)的存儲單元的符號地址。a.變量的定義與預(yù)置:給變量分配存儲單元, 且對這些存儲單元賦予一個符號名變量名, 同時將這些存儲單元預(yù)置初值。b.變量屬性:經(jīng)過定義的變量有3 個屬性, 段屬性(SEG) : 表示變量所在邏輯段的段基址。 偏移量屬性(OFFSET): 表示變量在邏輯段離段起始點(diǎn)的字節(jié)數(shù)。 類型屬性(TYPE):表示變量占用存儲單元的字節(jié)數(shù)。 變量的類型屬性由變量定義偽指令DB、DW、D
29、D 規(guī)定, 分別對應(yīng)字節(jié)類型(BYTE)、字類型 (WORD)、雙字類型( DOUBLEWORD)。c.變量與標(biāo)號 標(biāo)號是給指令性語句所在單元地址取的名字,它表明該指令在存儲器中的位置, 可作為轉(zhuǎn)移類指令(包括子程序調(diào)用) 的操作數(shù)。標(biāo)號與變量類似, 都是存儲單元的符號地址。只是標(biāo)號對應(yīng)的存儲單元中存放的是指令; 而變量所對應(yīng)的存儲單元中存放的是數(shù)據(jù)。 屬性:段屬性;偏移量屬性;類型屬性表達(dá)式:將常量、操作數(shù)用運(yùn)算符連接起來形成表達(dá)式,在匯編時分別產(chǎn)生一個數(shù)值或 一個地址。運(yùn)算符:在匯編語言中運(yùn)算符分為6 類運(yùn)算符, 分別是:算術(shù)運(yùn)算符、 邏輯運(yùn)算符、關(guān)系 運(yùn)算符、 分析運(yùn)算符、合成運(yùn)算符、
30、分離運(yùn)算符。表達(dá)式分類: 數(shù)值表達(dá)式和地址表達(dá)式, 在匯編過程中分別產(chǎn)生一個數(shù)值或一個地址。注意:表達(dá)式的運(yùn)算不是在執(zhí)行程序時進(jìn)行的,而是由匯編程序在匯編時預(yù)先對他進(jìn)行運(yùn)算。DOS 常用中斷調(diào)用1) 返回DOS 向量號 21H 功能號 4CH 例: MOV AH , 4CH INT 21H2) 鍵盤輸入并顯示 向量號 21H 功能號 1 功能:從鍵盤輸入一個字符, 將 其ASCII 碼保存在AL 中, 輸 入字符回顯在CRT 上。 例 MOV AH , 1 INT 21H 中斷返回時, 輸入字符的ASCII 碼 被存放在AL 中, 該字符并顯示在屏幕上。3) 鍵盤輸入但不顯示輸入字符 向量號
31、21H 功能號 8 功能:輸入一字符, 其ASCII 碼存放在AL 中, 但不顯示。這種功能往往在設(shè)置口令時使用。 例 MOV AH , 8 INT 21H4)顯示一字符 向量號 21H 功能號 2 入口參數(shù): DL= 待顯示字符的ASCII碼 功能:顯示DL 中的字符。 例 顯示字符“*”: MOV AH , 2 MOV DL ,* INT 21H5)在打印機(jī)上打印一字符 向量號 21H 功能號 5 入口參數(shù): DL= 待打印字符的ASCII碼 例 打印數(shù)字9: MOV AH , 5 MOV DL ,9 INT 21H6)顯示以“”結(jié)尾的字符串 向量號 21H 功能號 9 入口參數(shù): DS:
32、 DX 指向字符串的首地址7)字符串輸入 向量號 21H 功能號 0AH 入口參數(shù): DS: DX 指向輸入緩沖區(qū)。 輸入緩沖區(qū)格式如下: 第1 字節(jié)為預(yù)定的最大輸入字符數(shù)。 第2 字節(jié)空出, 待中斷服務(wù)程序填入鍵盤連續(xù)輸入到回車前實(shí)際輸入字符數(shù)。 第3 字節(jié)及以后字節(jié), 待中斷服務(wù)程序填入輸入字符串的ASCII 碼。例:編寫一個實(shí)現(xiàn)把一位十六進(jìn)制數(shù)轉(zhuǎn)換為對應(yīng)ASCII 碼的程序。分析: 十六進(jìn)制數(shù)與對應(yīng)ASCII碼的關(guān)系如下 0 1 2 3 4 5 6 7 8 9 30H 31H 32H 33H 34H 35H 36H 37H 38H 39H A B C D E F 41H 42H 43H
33、44H 45H 46H這種對應(yīng)關(guān)系可表示為一個分段函數(shù): Y= X + 30H ( 0<=X<=9 ) X + 37H (0AH<=X<=0FH )所以, 程序要根據(jù)十六進(jìn)制數(shù)碼值是否超過9 而進(jìn)行分支。源程序如下: DATA SEGMENT XX DB 4 ; 假設(shè)的十六進(jìn)制數(shù)ASCII DB ? ; 存放對應(yīng)的ASCII 碼 DATA ENDS CODE SEGMENT ASSUME CS : CODE, DS :DATASTART :MOV AX, DATAS MOV DS, AX MOV AL, XX AND AL, 0FH ; 確保在0 至F 之間CMP AL
34、, 9 JA LAB1 ; 超過9 轉(zhuǎn)移到LAB1 , 加37H ADD AL, 30H ; 否則, 加30H JMP LAB2LAB1:ADD AL, 37HLAB2: MOV ASCII , AL MOV AH , 4CH INT 21HCODE ENDS END START例:從TABLE單元開始存放著一個班級學(xué)生的成績(用$表示結(jié)束)。60分以下為差,6069分為及格,7079分為中,8089分為良,90100分為優(yōu)。 試統(tǒng)計(jì)各個分?jǐn)?shù)段的人數(shù)。 DATA SEGMENTTABLEDB 86,96,80,77DB49,88,68,73DB 88,69,$ SORTDB 5 DUP(0)D
35、ATA ENDSCODESEGMENTASSUMECS:CODE,DS:DATASTART:MOVAX,DATAMOVDS,AXMOVSI,OFFSET TABLENEXT:MOVAL,SIINCSICMPAL,$ JZOVER CMPAL,60JBECMPAL,70JBDCMPAL,80JBCCMPAL,90JBBINCSORT;優(yōu)+1JMPNEXTE:INCSORT+4;差+1JMPNEXTD:INCSORT+3;及格+1JMPNEXTC:INCSORT+2;中+1JMPNEXTB:INCSORT+1;良+1JMPNEXTOVER:MOVAH,4CHINT21H CODEENDSENDST
36、ART 例: 試編寫程序段, 實(shí)現(xiàn)符號函數(shù)。分析: 變量X 的符號函數(shù)可表示為:Y = 1 X > 0 0 X = 0 - 1 X < 0DATA SEGMEN TX DW - 3Y DW ?DATA ENDSCODE SEGMENT ASSUME CS : CODE, DS :DATASTART :MOV AX, DATA MOV DS, AX MOV AX, X OR AX, AXJE ZERO ; X = 0 , 則轉(zhuǎn)ZERO JNS PLUS ; X 為正數(shù), 則轉(zhuǎn)PLUS MOV BX,0FFFFH ; X 為負(fù)數(shù),則-1送BX JMP CONT1ZERO: MOV BX
37、, 0 JMP CONT1PLUS: MOV BX, 1CONT1:MOV Y, BX MOV AH , 4CH INT 21HCODE ENDS END START例:從BUF單元開始有9個有符號的16位數(shù),求正數(shù)的個數(shù)并顯示到顯示器上。DATASEGMENTBUF DW 9DUP(?)DATAENDSCODESEGMENTASSUMECS:CODE,DS:DATASTART:MOVAX,DATA MOVDS,AX MOVSI,OFFSET BUF;置數(shù)據(jù)指針SI MOVDL,0;計(jì)數(shù)器清零 MOVCX,9;置循環(huán)次數(shù)LP: MOVAX,SI ;取數(shù)送AX TEST AX,8000H ;檢測
38、AX的最高位 JNZNEXT;若最高位為1則轉(zhuǎn)NEXT INC DL;否則,計(jì)數(shù)器加1NEXT:INC SI INC SI ;修改指針 LOOP LP;若CX10,轉(zhuǎn)LP ORDL,30H;否則,將DL內(nèi)的數(shù)據(jù)轉(zhuǎn)換為ASC碼 MOVAH,2INT21H ;INT 21H軟中斷功能調(diào)用,顯示DL中的數(shù)據(jù) MOV AH,4CH INT21H;返回DOSCODE ENDSEND START例: 從 STRIN 單元開始有一字符串, 以作為結(jié)束標(biāo)志, 求字符串的長度。程序如下:DATA SEGMENTSTRIN DB ASDFGHJ123KJCOUNT DW ?DATA ENDSCODE SEGMEN
39、TASSUME CS : CODE, DS :DATA; START :MOV AX, DATA MOV DS, AX MOV BX, OFFSET STRIN ; 置地址指針 MOV CX, 0 ; 置計(jì)數(shù)器初值為0 LP : MOV AL, BX ; 取一個字符到AL 中 CMP AL, ; 是嗎? JE DONE ; 是則結(jié)束 INC CX ; 不是則計(jì)數(shù)加1 INC BX ; 地址加1 JMP LP ; 繼續(xù) DONE: MOV COUNT , CX ; 計(jì)數(shù)送COUNT 單元 MOV AH , 4CH INT 21H CODE ENDS END START例: 從 STRIN 單元開
40、始有一字符串, 以作為結(jié)束標(biāo)志, 求字符串的長度。程序如下:DATA SEGMENTSTRIN DB ASDFGHJ123KJCOUNT DW ?DATA ENDSCODE SEGMENTASSUME CS : CODE, DS :DATA; START :MOV AX, DATA MOV DS, AX MOV BX, OFFSET STRIN ; 置地 址指針 MOV CX, 0 ; 置計(jì)數(shù)器初值為0 LP : MOV AL, BX ; 取一個字符到AL 中 CMP AL, ; 是 嗎? JE DONE ; 是則結(jié)束 INC CX ; 不是則計(jì)數(shù)加 1 INC BX ; 地址加1 JMP L
41、P ; 繼續(xù) DONE: MOV COUNT , CX ; 計(jì)數(shù)送 COUNT 單元 MOV AH , 4CH INT 21H CODE ENDS END START例:延時顯示7個MAIN DATASEGMENTTABLE DB MAIN DATAENDSCODESEGMENTASSUMECS:CODE,DS:DATASTART:MOVAX,DATAMOVDS,AXMOVCX,0007HA2:MOVDX, OFFSET TABLEMOVAH,09HINT21HCALL DELAYLOOPA2MOVAH,4CHINT21HDELAYPROC NEARPUSH CXPUSHAX MOVCX,00
42、40HA3:MOVAX,0560HA4:DECAXJNZA4LOOPA3POPAXPOPCXRET DELAYENDP CODEENDSENDSTART例:將內(nèi)存區(qū)域中的兩個單字節(jié)相加,結(jié)果送入第3字節(jié),并將結(jié)果轉(zhuǎn)換成十進(jìn) 制數(shù)(兩位數(shù))送顯示器顯示。DATASEGMENTLISTDB16,48,?DATAENDSCODESEGMENTASSUMECS:CODE,DS:DATASTART:MOVAX,DATAMOVDS,AXCALLADSUB;相加,存結(jié)果CALLOUTPR;顯示結(jié)果MOVAH,4CHINT21H;返回DOSADSUB PROCMOVAL,LISTADDAL,LIST+1MOV
43、LIST+2,ALRETADSUBENDPOUTPRPROCMOVAL,LIST+2MOVAH,0MOVBL,10DIVBLMOVDL,ALMOVBH,AHCALLDISPLMOVDL,BHCALLDISPLRETOUTPR ENDPDISPL PROC ORDL,30HMOVAH,2INT21HRETDISPL ENDPCODE ENDSEND START 存儲器的分類按存取方式:(1)隨機(jī)存儲器(RAM):讀/寫存儲器,計(jì)算機(jī)的內(nèi)存、CACHE均屬于RAM(2)只讀存儲器(ROM):只能讀出信息,不能寫入新的內(nèi)容,用于存放固定不變的系統(tǒng)程序或子程序等(3)順序存儲器(SAM):信息排列、尋
44、址操作和讀寫操作均按順序進(jìn)行,如磁帶半導(dǎo)體存儲器的分類例1、某EPROM芯片的外部引線如圖所示,試將此芯片接到C8000H到CFFFFH的內(nèi)存地址上(使用74LS138譯碼器),畫出連接圖。 例2、試判斷下圖所示的譯碼邏輯電路中74LS138譯碼器的輸出Y0、Y4、Y6、Y7所 決定的內(nèi)存地址范圍。例3、某存儲器芯片的選片譯碼器如圖所示,試寫出該芯片所占的內(nèi)存地址范圍 12000H12FFFH13000H13FFFH74LS244輸入實(shí)例輸出實(shí)例基本輸入輸出接口無條件傳送:輸入實(shí)例無條件傳送:輸出實(shí)例無條件傳送:基本輸入輸出接口查詢輸入接口查詢輸出接口8255AA1 、A0 為00 時, 選中
45、A 端口; 為01 時, 選中B 端口; 為10 時, 選中C 端口; 為11 時, 選中控制端口。RD 芯片讀出信號, 低電平有效。WR 芯片寫入信號, 低電平有效。方式選擇控制字端口C 置1/置0 控制字練習(xí):簡單的輸入/輸出,即顯示燈接口具體要求:有12個燈,4個開關(guān),(每次有且只有一個合上)如開關(guān)1合上(為高電平),則前4個燈亮,如開關(guān)2合上(為高電平),則中4個燈亮如開關(guān)3合上(為高電平),則后4個燈亮,如開關(guān)4合上(為高電平),則退出驅(qū)動程序MOVDX,33BHMOV AL,10001000B;初始化8255,設(shè)PC7PC4為輸入,其它為輸出,0方式OUTDX,ALLP0:MOVD
46、X,338HMOVAL,0FFHOUTDX,AL ;給PA口輸出FFH,使 燈滅MOVDX,339HOUTDX,AL ;給PB口輸出FFH,使 燈滅MOVDX,33AHOUTDX,AL ;給PC口輸出FFH,使 燈滅L:MOV DX,33AHIN AL,DX;讀入開關(guān)狀態(tài)MOV AH,AL AND AL,80HJNZ L1;開關(guān)1合,跳轉(zhuǎn)MOV AL,AHAND AL,40HJNZ L2 ;開關(guān)2合,跳轉(zhuǎn)MOV AL,AHAND AL,20HJNZ L3 ;開關(guān)3合,跳轉(zhuǎn)MOVAL,AHAND AL,10HJNZ STOP;開關(guān)4合,跳轉(zhuǎn)JMP LLI:MOVDX,33AHMOV AL,0HOUT DX,AL ;給PC口輸出全0,使 前4燈亮MOV AL,0FHMOV DX,339HOUT DX,AL ;給PB口輸出1,使中 4燈滅MOV DX,338HOUT DX,AL
溫馨提示
- 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)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 二零二五年度門衛(wèi)人員服裝及裝備供應(yīng)合同4篇
- 陶藝課程設(shè)計(jì)思路
- 音樂與影視同步課程設(shè)計(jì)
- 二零二五版辦公大樓智能化會議系統(tǒng)建設(shè)與維護(hù)協(xié)議2篇
- 2024年心理咨詢師之心理咨詢師基礎(chǔ)知識題庫帶答案(輕巧奪冠)
- 2025年度個人增強(qiáng)現(xiàn)實(shí)技術(shù)入股協(xié)議3篇
- 造價課程設(shè)計(jì)江蘇版
- 年度玻璃用助劑市場分析及競爭策略分析報(bào)告
- 年度自動造型線產(chǎn)業(yè)分析報(bào)告
- 專項(xiàng)施工方案的審核人
- 2024-2030年中國海泡石產(chǎn)業(yè)運(yùn)行形勢及投資規(guī)模研究報(bào)告
- 動物醫(yī)學(xué)類專業(yè)生涯發(fā)展展示
- 2024年同等學(xué)力申碩英語考試真題
- 消除“艾梅乙”醫(yī)療歧視-從我做起
- 非遺文化走進(jìn)數(shù)字展廳+大數(shù)據(jù)與互聯(lián)網(wǎng)系創(chuàng)業(yè)計(jì)劃書
- 科普知識進(jìn)社區(qū)活動總結(jié)與反思
- 現(xiàn)金日記賬模板(帶公式)
- 消化內(nèi)科??票O(jiān)測指標(biāo)匯總分析
- 混凝土結(jié)構(gòu)工程施工質(zhì)量驗(yàn)收規(guī)范
- 肝性腦病患者的護(hù)理措施課件
- 三字經(jīng)全文帶拼音完整版可打印
評論
0/150
提交評論