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

正文內容

匯編語言入門第五章:匯編語言程序結構-文庫吧

2024-09-24 18:22 本頁面


【正文】 匯編語言程序結構 例 DUP操作可以嵌套 , 例如 ARRAY3 DB 100DUP(0, 2 DUP(1, 2), 0, 3) 則匯編結果如右圖所示: 可以用 DW或 DD偽操作把變量或標號的偏移地址(DW)或整個地址 (DD)存入存儲器。用 DD偽操作存入地址時,第一個字為偏移地址,第二個字為段地址。 例如 PARAMETER_TABLE DW PAR1 DW PAR2 DW PAR3 INTERSEG_DATA DD DATA1 DD DATA2 則匯編后的存儲情況如下圖所示。其中偏移地址或段地址均占有一個宇,其低位字節(jié)占有第一個字節(jié),高位字節(jié)占有第二個字節(jié)。 第一章 基礎知識 第五章 匯編語言程序結構 第一章 基礎知識 第五章 匯編語言程序結構 順便說明一下,這里操作數字段中的變量或標號可以使用表達式如 : 在這種情況下 , 匯編后 , 存儲器中應該存入表達式的值 。 例如 PARAMETER_TABLE DW PAR1+1 DW PAR2+1 說明變量的類型屬性問題 : 在數據定義偽操作前面的變量的值是該偽操作中的第一個數據項在當前段內的第一個字節(jié)的偏移地址 。 此外 , 它還有一個類型屬性用來表示該語句中的每一個數據項的長度 (以字節(jié)為單位表示 ), 因此 DB偽操作的類型屬性為 1,DW為 2, DD為 4, DQ為 8, DT則為 10, 變量表達式的屬性和變量是相同的 。 匯編程序可以用這種隱含的類型屬性來確定某些指令是字指令還是字節(jié)指令。 第一章 基礎知識 第五章 匯編語言程序結構 例如 OPER1 DB ?,? OPER2 DW ?,? … MOV OPER1, 0 MOV OPER2, 0 則第一條指令應為字節(jié)指令,第二條指令則應為字指令。 如果有下列指令序列 : OPER1 DB 1, 2 OPER2 DW 1234H, 2345H … MOV AX , OPER1+1 MOV AL , OPER2 匯編程序在匯編這一段程序時,能發(fā)現兩條 MOV指令的兩個操作數的類型屬性是不相同的: OPERl十 1為字節(jié)類型屬性而 AX為字類型屬性; OPER2為字類型屬性而 AL為字節(jié)類型屬性。 匯編語言將指示由于屬性類型不匹配出錯。 第一章 基礎知識 第五章 匯編語言程序結構 有一個辦法可以指定操作數的類型屬性 ,它優(yōu)先于隱含的類型屬性 , 即可以使用PTR屬性操作符 。 其格式為: type PTR Varible士 constant expression 其 中 類 型 可 以 是 BYTE , WORD 或DWORD(雙字 ), 這樣變量的類型就可以指定了 。 上面例子可以寫為: OPER1 DB 1, 2 OPER2 DW 1234H, 2345H … MOV AX , WORD PTR OPER1+1 MOV AL , BYTE PTR OPER2 通過 PTR屬性操作符就把 OPER1十 1的類型屬性指定為字 , 兩個操作數的屬性就一致了 , 匯編時不會出錯 ,而運行時應把 OPER1十 1的字內容送到 AX, 即把 OPER1十 1的內容送 AL,把 OPER2的第一個字節(jié)的內容運 AH,所以指令執(zhí)行完后 , (AX)= 3402H。 同樣,對于第二條語句( AL) =34H 第一章 基礎知識 第五章 匯編語言程序結構 LABEL偽操作 : 除了用屬性操作符給以定義外 , 還可以用 LABEL偽操作來定義 , 其格式為: name LABEL type ( 1) 對于數據項可以表示為: variable_name LABEL type 其中 , type可以是 BYTE, WORD或 DWORD(雙字 )。 ( 2) 對于可執(zhí)行的代碼 , 則可表示為 label_name LABEL type 其中 , type可以是 NEAR或 FAR。 第一章 基礎知識 第五章 匯編語言程序結構 例如 BYTE_ARRAY LABEL BYTE WORD_ARRAY DW 50 DUP(?) 這樣在 100個字節(jié)數組中的第一個字節(jié)的地址賦于二個不同類型的變量名:字節(jié)類型的變量 BYTE_ARRAY和字類型變量 WORD_ARRAY。 指令 MOV WORD_ARRAY十 2. , 0 把該數組的第 3個和第 4個字節(jié)置 0, 而 MOV BYTE_ARRAY十 2. , 0 則把該數組的第 3個字節(jié)置 0。 例: LABF LABEL FAR LAB: MOV AX, 100 第一章 基礎知識 第五章 匯編語言程序結構 二、表達式賦值偽操作 EQU 有時程序中多次出現同一個表達式.為方便起見可以用賦值偽操作給表達式賦予一個名字,其格式如下: 此后,程序中凡需要用到該表達式之處就可以用表達式名來代替了。 上式中的表達式 可以是任何有效的操作數格式 , 可以是任何可以求出常數值的表達式,也可以是任何有效的助記符。 舉例如下: 第一章 基礎知識 第五章 匯編語言程序結構 必須注意 EQU語句的表達式中如果有變量或標號的表達式,則在該語句前應該先給出它們的定義。 例如,語句 : 則必須放在 DATA_ONE的定義之后才行,否則匯編程序將指示出錯。 另外還有一個與 EQU相類似的 = 偽操作也可以作為賦值偽操作使用 。 它們之間的區(qū)別是 : EQU偽操作中的表達式名是不允許重復定義的 , 而 = 偽操作則允許重復定義 。 例如: EMP = 6 或 EMP EQU 6都可以使數 6賦以符號名 EMP,但是不允許兩者同時使用。 第一個語句后的指令中 EMP值為 7;而第二個語句后的指令中 EMP值為 8。 第一章 基礎知識 第五章 匯編語言程序結構 三、段定義偽操作 存儲器的物理地址是由段地址和偏移地址組合而成的 , 匯編程序在把源程序轉換為目標程序時 , 必須確定標號和變量的偏移地址 , 并且需要把有關信息通過目標模塊傳送給連接程 序 , 以便連接程序把不同的段和模塊連接在一起形成一個可執(zhí)行程序 。 為此 , 需要用段定義偽操作 , 段定義偽操作的格式如下 : 此外,還要明確段和段寄存器的關系,這可用 ASSUME偽操作來實現,其格式為: 其中 assignment說明分配情況,其格式為: 其中段寄存器名必須是 CS、 DS、 ES和 SS中的一個,而段名則必須是由segment定義的段中的段名。 而 ASSUME NOTHING則可取消前面由 ASSUME所指定的段寄存器。 第一章 基礎知識 第五章 匯編語言程序結構 例如: 由于 assume偽操作只是指定某個段分配給那一個段寄存器 , 它并不能把段地址裝入段寄存器中 , 所以在代碼段中 。 還必須把段地址裝入相應的段寄存器中 。為此 , 在上例的程序中 , 分別用兩條 MOV指令完成這一操作 。 如果程序中有堆棧段 , 也需要把段地址裝入 SS中 。 但是 , 代碼段不需要這樣做 , 代碼段的這一操作在程序初始化時完成 。 功能: ? 通知 MASM用指定的段寄存器來尋址對應的邏輯段,即建立段寄存器與段的缺省關系 ? 在明確了程序中各段與段寄存器之間的關系后,匯編程序會根據數據所在的邏輯段,在需要時自動插入段超越前綴。這是 ASSUME偽指令的主要功能 ? ASSUME偽指令并不為段寄存器設定初值,連接程序 LINK將正確設置 CS : IP和 SS : SP 由于數據段通常都需要,所以在樣板源程序中,首先為 DS賦值;如果使用附加段,還要賦值 ES 段寄存器的裝入 ? DS和 ES的裝入 通過寄存器傳送 如: MOV AX, DATA1 MOV DS, AX MOV
點擊復制文檔內容
法律信息相關推薦
文庫吧 www.dybbs8.com
備案圖鄂ICP備17016276號-1