freepeople性欧美熟妇, 色戒完整版无删减158分钟hd, 无码精品国产vα在线观看DVD, 丰满少妇伦精品无码专区在线观看,艾栗栗与纹身男宾馆3p50分钟,国产AV片在线观看,黑人与美女高潮,18岁女RAPPERDISSSUBS,国产手机在机看影片

正文內(nèi)容

[計(jì)算機(jī)軟件及應(yīng)用]第5章匯編語言程序設(shè)計(jì)(已修改)

2025-10-23 23:20 本頁(yè)面
 

【正文】 教學(xué)目的和要求 : 本章介紹了程序的基本結(jié)構(gòu)和設(shè)計(jì)方法,通過本章的學(xué)習(xí),重點(diǎn)掌握各類程序結(jié)構(gòu)(順序結(jié)構(gòu)、分支結(jié)構(gòu)、循環(huán)結(jié)構(gòu)及子程序結(jié)構(gòu))的特征,以及應(yīng)用場(chǎng)合。 第 5章 匯編語言程序設(shè)計(jì) 匯編語言: 用指令的助記符、符號(hào)地址、標(biāo) 號(hào)、偽指令等符號(hào)書寫的語言。 匯編語言源程序: 用匯編語言編寫的程序。 匯編: 把匯編語言源程序自動(dòng)翻譯成機(jī)器 語言 (目的程序 )的過程。 匯編程序: 完成匯編任務(wù)程序。 匯編語言源程序 匯編 目的程序 匯編程序 匯編語言的語句格式 ? 匯編語言編寫的源程序是由許多語句組成的。每條語句由 1~ 4個(gè)部分組成,格式如下: ? [名字 ] 助記符 [操作數(shù) ] [注釋 ] ? 根據(jù)不同指令功能,其中用方括號(hào)括起來的部分,可以有,也可以沒有。編寫語句時(shí)每部分之間要用空格分開,這些部分可以在一行輸入,以便用戶閱讀源程序。 ? LOOPER: MOV AL, DATA2[SI] ; 取一個(gè)字節(jié)加數(shù) DATA1 DB 0F8H, 60H, 0ACH, 74H, 3BH ;被加數(shù) 0F8H 60H 0ACH DATA1 (1)名字 這是給指令或某一存儲(chǔ)單元地址所起的名稱,常作為一段程序的開頭,一個(gè)數(shù)據(jù)塊的開頭。 在指令語句中這個(gè)名字是一個(gè)標(biāo)號(hào), 語句中的標(biāo)號(hào)實(shí)質(zhì)上是指令的符號(hào)地址。 并非每條指令語句必須有標(biāo)號(hào),但如果一條指令前面有一標(biāo)號(hào),則程序中其他地方就可以引用這個(gè)標(biāo)號(hào)。 標(biāo)號(hào)使用要注意: ①標(biāo)號(hào)可以由字母、數(shù)字和下劃線組合,一個(gè)標(biāo)號(hào)的最大長(zhǎng)度不能超過 31個(gè)字符。 ②標(biāo)號(hào)不能以數(shù)字開頭,但數(shù)字可以出現(xiàn)在標(biāo)號(hào)符的中間或末尾。 標(biāo)號(hào)有三種屬性:段 、 偏移量和類型 。 ① 標(biāo)號(hào)的段屬性是定義標(biāo)號(hào)在程序段的段地址。當(dāng)程序中引用一個(gè)標(biāo)號(hào)時(shí),該標(biāo)號(hào)的段值應(yīng)在 CS寄存器中。 ② 標(biāo)號(hào)的偏移量屬性表示標(biāo)號(hào)所在段的起始地址到定義該標(biāo)號(hào)的地址之間的字節(jié)數(shù)。偏移量是一個(gè) 16位無符號(hào)數(shù)。 ③ 標(biāo)號(hào)的類型屬性有兩種: NEAR和 FAR。前一種標(biāo)號(hào)可以在段內(nèi)被引用,地址指針為 2字節(jié);后一種標(biāo)號(hào)可以在其他段被引用,地址指針為 4字節(jié)。如果定義一個(gè)標(biāo)號(hào)時(shí)后跟冒號(hào),則匯編程序確認(rèn)其類型為 NEAR。 偽指令語句中的名字可以是變量名 、 段名 、 過程名 。與指令語句中的標(biāo)號(hào)不同 , 不同的偽指令對(duì)于是否有名字有不同的規(guī)定 。 偽指令語句的名字后面通常不跟冒號(hào) , 這是它和標(biāo)號(hào)的一個(gè)明顯區(qū)別 。 很多情況下偽指令語句中的名字是變量名。變量名代表存儲(chǔ)器中一個(gè)數(shù)據(jù)區(qū)的名字。例如,例 DATADATA2就是變量名。 變量也有三種屬性:段 、 偏移量和類型 。 ① 變量的段屬性是變量所代表的數(shù)據(jù)區(qū)所在段的段地址 。由于數(shù)據(jù)區(qū)一般在存儲(chǔ)器的數(shù)據(jù)段中 , 因此變量的段地址常常在 DS和 ES寄存器中 。 ② 變量的偏移量屬性是該變量所在段的起始地址與變量的地址之間的字節(jié)數(shù) 。 ③ 變量的類型屬性有 BYTE(字節(jié) )、 WORD(字 )、 DWORD (雙字 )、 QWORD (四字 )、 TBYTE(十字 )等,表示數(shù)據(jù)區(qū)中存取操作對(duì)象的大小。 (2)助記符 助記符是表示不同操作的指令,可以是指令的助記符,也可以是偽指令。 (3)操作數(shù) 操作數(shù)是指令執(zhí)行的對(duì)象。 (4)注釋 在匯編語言源程序中,為了便于理解和閱讀程序,常常加上注釋。注釋要用分號(hào)打頭,在匯編過程中,對(duì)注釋不做處理。 標(biāo)號(hào) 助記符 操作數(shù) 注釋 MOV AL, BL RET 。 子程序返回指令 START: MOV AX, DATA ; 以 START標(biāo)號(hào)為程序開頭 ABC EQU 2021H ; 將 2021H賦值給 ABC 常數(shù) 匯編語言程序中經(jīng)常使用的常數(shù)有以下幾種: ①二進(jìn)制數(shù):以字母 B結(jié)尾的,由 0和 1組成的數(shù)字序列。如:10101011B。 ②八進(jìn)制數(shù):以字母 Q或 O結(jié)尾的 0 ~ 7的數(shù)字序列。如: 23Q,24O。 ③十進(jìn)制數(shù): 0~ 9的數(shù)字序列,可以用字母 D結(jié)尾,也可以省略。如: 183D。 ④十六進(jìn)制數(shù): 以 H字母結(jié)尾的, 由數(shù)字 0 ~ 9和字母 A ~ F組成的序列 3ACFH, 0AFH。 凡是以字母 A~ F為起始的一個(gè)十六進(jìn)制數(shù),必須在其前面加數(shù)字 “ 0”,否則匯編程序會(huì)認(rèn)為是標(biāo)識(shí)符。 ⑤ 實(shí)數(shù):它由整數(shù)、小數(shù)和指數(shù) 3部分組成。如: 5. 421E4 ⑥ 字符串常數(shù):用單引號(hào)括起來的一個(gè)或多個(gè)字符,這些字符以ASCII碼形式存儲(chǔ)在內(nèi)存中。如: ‘ ABC’,在內(nèi)存中就是 41H、42H、 43H。 偽指令 偽指令用來為匯編程序提供某些信息,讓匯編程序在匯編過程中執(zhí)行某些特定的功能。如偽指令可以指定一個(gè)程序的數(shù)據(jù)段從哪里開始,可以指定堆棧區(qū)的大小,等等。 偽指令與指令的本質(zhì)差別是,在匯編過程中偽指令并不形成任何代碼,不直接命令 CPU去執(zhí)行什么操作,偽指令是給匯編程序的命令,在匯編過程中由匯編程序進(jìn)行處理,如分配存儲(chǔ)區(qū)、定義段等。 常用的偽指令有以下幾種 : 1. 標(biāo)號(hào)賦值偽指令 EQU EQU偽指令用來對(duì)一個(gè)標(biāo)號(hào)賦值。例如: ABC EQU 2400H 。使 ABC為數(shù)值 2400H STR EQU 64*1024 2.定義存儲(chǔ)單元的偽指令 DB、 DW、 DD、 DQ、 DT 偽指令 DB和 DW等用來給出程序中所需要的數(shù)據(jù)、字符串、地址表。該類偽指令用來為一個(gè)數(shù)據(jù)項(xiàng)分配存儲(chǔ)單元,用一個(gè)符號(hào)名與這個(gè)存儲(chǔ)單元相聯(lián)系,且為這個(gè)數(shù)據(jù)提供一個(gè)任選的初始值。 DB用來規(guī)定字節(jié), DW用來規(guī)定字, DD用來規(guī)定雙字, DQ用來規(guī)定 4個(gè)字, DT用來規(guī)定 10個(gè)字。例如: DATA DB 24H, 32H 表示從 DATA地址單元開始,連續(xù)存入 24H, 32H,共占用 2個(gè)字節(jié)的地址。 DATA DW 4142H 匯編時(shí)會(huì)把 41H與 42H分別放到與 DATA相聯(lián)系的兩個(gè)連續(xù)的字節(jié)單元中 (一個(gè)字 )。 42H放在地址低字節(jié), 41放在地址高字節(jié)。 DATA DB ?, ? 匯編程序分配兩個(gè)字節(jié)單元,以 DATA地址單元開始的兩個(gè)單元可預(yù)置任何內(nèi)容。 STRING DB ‘ABCD ’ 以 STRING為起始地址單元,為字符串中的每一個(gè)字符分配一個(gè)字節(jié)單元,字符串自左至右以字符的 ASCⅡ 碼按地址遞增的排列順序依次存放 41H, 42H, 43H, 44H。 BUFFER DB 20H DUP(?) DUP為重復(fù)操作符 表示保留 20H個(gè)字節(jié),每個(gè)字節(jié)可預(yù)置任意內(nèi)容。 BUFFER DB 50 DUP(0) 表示以 BUFFER為首地址的 50個(gè)字節(jié)中都存放同一數(shù)據(jù) 00H。 3.定義存儲(chǔ)單元類型的偽指令 BYTE、 WORD、 DWORD 利用這些偽指令,可以對(duì)存儲(chǔ)單元的類型進(jìn)行規(guī)定。例如: MOV BYTE PTR[DI ] , 00H MOV WORD PTR[1000H], 00H JMP DWORD PTR[2021H] 第一個(gè)語句使 DI所指的 1個(gè)單元清 0; 第二個(gè)語句使 1000H所指的 1個(gè)字即 2個(gè)單元清 0: 第三個(gè)語句使程序轉(zhuǎn)移到另外一個(gè)段的某個(gè)單元,轉(zhuǎn)移地址放在 2021H開始的 4個(gè)單元,前兩個(gè)單元中的內(nèi)容作為轉(zhuǎn)移地址的偏移量,后面兩個(gè)單元中的內(nèi)容作為轉(zhuǎn)移地址的段 值。 4.段定義偽指令 SEGMENT、 ENDS、 ASSUME、 ORG 偽指令 SEGMENT和 ENDS總是成對(duì)使用的。用這一對(duì)偽指令可以將匯編語言源程序分成幾個(gè)段,通常分為數(shù)據(jù)段、堆棧段和代碼段。代碼段主要有指令和其他偽指令;對(duì)于數(shù)據(jù)段和附加段主要有定義數(shù)據(jù)區(qū)的偽指令。 例: 數(shù)據(jù)段、堆棧段兩段程序框架。 DATA SEGMENT M1 DW 2478H M2 DW 6758H P1 DW ? P2 DW ? DATA ENDS STACK SEGMENT DW 20 DUP(?) 。定義 20個(gè)字存儲(chǔ)空間 STACK ENDS 偽指令 ASSUME用來告訴匯編程序有關(guān)段寄存器與邏輯段的關(guān)系,哪一個(gè)段為數(shù)據(jù)段,哪一個(gè)段為堆棧段,哪一個(gè)段為代碼段。并沒有給段寄存器賦予實(shí)際的初值,真正將段地址裝入段寄存器還需要由傳送指令在執(zhí)行時(shí)賦值(CS除外 )。例如: CODE SEGMENT ASSUME CS: CODE, DS: DATA, SS: STACK MOV AX, DATA MOV DS, AX MOV AX, STACK MOV SS, AX … CODE ENDS ORG偽指令用來規(guī)定該偽指令后面的源程序或數(shù)據(jù)塊存放的起始地址 例如,在源程序的第一條指令前用了如下偽指令: ORG 2021H 匯編程序?qū)阎噶钪羔?IP的值置成 2021H,即目標(biāo)程序的第一個(gè)字節(jié)放在 2021H處。 5.定義過程的偽指令 PROC、 ENDP 偽指令 PROC和 ENDP總是成對(duì)出現(xiàn)的,這兩條偽指令之間的內(nèi)容就作為一個(gè)過程,即一個(gè)子程序。 格式: 過程名 PROC [ NEAR/FAR] RET 過程名 ENDP ? 其中 PROC偽指令定義一個(gè)過程 (子程序 ),賦予過程一個(gè)名字,并指出該過程的屬性為 NEAR或 FAR。如果沒有特別指明類型,則認(rèn)為過程的類型是 NEAR。 如果對(duì)應(yīng)的子程序頭部標(biāo)有 FAR,則產(chǎn)生一個(gè)段間調(diào)用地 址 ,它包括 16位的段地址和 16位的偏移量;如果子程序頭部標(biāo)有 NEAR,則為段內(nèi)調(diào)用。 當(dāng)一個(gè)程序段被定義為過程后 , 程序中其他地方就可以用 CALL指令調(diào)用這個(gè)過程 。 調(diào)用一個(gè)過程的格式為: CALL 過程名 例: CODE SEGMENT APRC PROC ADD AX, BX : RET APRC ENDP STAT: MOV AX, NUM : CALL APRC :
點(diǎn)擊復(fù)制文檔內(nèi)容
教學(xué)課件相關(guān)推薦
文庫(kù)吧 www.dybbs8.com
公安備案圖鄂ICP備17016276號(hào)-1