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

正文內(nèi)容

匯編語言程序設(shè)計(jì)-在線瀏覽

2024-09-14 17:41本頁面
  

【正文】 第 6章 程序的基本結(jié)構(gòu) 段定義的一般格式如下: 段名 SEGMENT [對(duì)齊類型 ] [組合類型 ] [類別 ] … 段名 ENDS 段屬性“對(duì)齊類型”、“組合類型”和“類別”要按此順序說明,但這些選項(xiàng)可根據(jù)需要選擇書寫。 程序中的段名可以是唯一的,也可以與其它段同名。 當(dāng)同一模塊出現(xiàn)二個(gè)同名段時(shí),則后者的可選項(xiàng)屬性要么與前者相同,要么不寫其屬性而選用前者的段屬性。 段的基本屬性 第 6章 程序的基本結(jié)構(gòu) 程序存儲(chǔ)模式說明偽指令的格式如下: .MODEL 存儲(chǔ)模式 [,語言類型 ] [,操作系統(tǒng)類型 ] [,堆棧類型 ] 程序可選的存儲(chǔ)模式有: TINY、 SMALL、 COMPACT、 MEDIUM、 LARGE、HUGE和 FLAT。 如果用偽指令來指定程序所遵循的語言類型,那么,將不允許子程序的嵌套定義。程序員還可用匯編命令行選項(xiàng)/AT和連接命令選項(xiàng) /TINY來達(dá)到此目的。該存儲(chǔ)類型是獨(dú)立匯編語言源程序常用的存儲(chǔ)模型。在這種模型下,數(shù)據(jù)段寄存器的內(nèi)容保持不變,轉(zhuǎn)移可以是段間轉(zhuǎn)移。 ?LARGE 數(shù)據(jù)段和代碼段都可以有多個(gè),但一個(gè)數(shù)組的字節(jié)數(shù)不能超過 64KB。 ?FLAT FLAT存儲(chǔ)模式在創(chuàng)建執(zhí)行文件時(shí),將使該程序僅含一個(gè)包括程序數(shù)據(jù)和代碼的 32位段,并且只能在 80386及其以后的計(jì)算機(jī)系統(tǒng)中運(yùn)行。 第 6章 程序的基本結(jié)構(gòu) 程序存儲(chǔ)模式說明偽指令的格式如下: .MODEL 存儲(chǔ)模式 [,語言類型 ] [,操作系統(tǒng)類型 ] [,堆棧類型 ] 程序可選的存儲(chǔ)模式有: TINY、 SMALL、 COMPACT、 MEDIUM、 LARGE、HUGE和 FLAT。 如果用偽指令來指定程序所遵循的語言類型,那么,將不允許子程序的嵌套定義。 ?堆棧段定義 .STACK [堆棧字節(jié)數(shù) ] 其中,“堆棧字節(jié)數(shù)”可以不寫,其缺省值為 1024B。 在一個(gè)源程序中,可以有多個(gè)偽指令“ .DATA”定義的數(shù)據(jù)段,這就好象在源程序中定義多個(gè)同段名的數(shù)據(jù)段一樣。 ?遠(yuǎn)程數(shù)據(jù)段定義 .FARDATA [段名 ] / .FARDATA? [段名 ] 其中:“段名”是可選項(xiàng),如果不指定的話,則該段名就取其缺省段名。 偽指令“ .FARDATA?”說明下面是一個(gè)未初始化的、獨(dú)立數(shù)據(jù)段的開始。CODE39。FAR_DATA39。FAR_BSS39。STACK39。DATA39。BSS39。CONST39。 .STARTUP——在代碼段的開始用于自動(dòng)初始化寄存器 DS、 SS和 SP; .EXIT——用于結(jié)束程序的運(yùn)行,它等價(jià)于下列二條語句: MOV AH, 4CH INT 21h 當(dāng)使用匯編程序 TASM時(shí),以上二條偽指令分別改為: STARTUPCODE和EXITCODE。自動(dòng)初始化寄存器 DS、 SS和 SP MOV DX, offset MSG MOV AH, 9H INT 21h .EXIT 0 END 第 7章 子程序和庫 定義子程序的一般格式如下: 子程序名 PROC [NEAR | FAR] … 。返回指令是子程序的出口語句,但它不一定是子程序的最后一條語句; ?子程序名有三個(gè)屬性:段值、偏移量和類型。 第 7章 子程序和庫 在編寫子程序時(shí),除了要考慮實(shí)現(xiàn)子程序功能的方法,還要養(yǎng)成書寫子程序說明信息的好習(xí)慣??蛇x項(xiàng),最好采用寄存器的保護(hù)和恢復(fù)方法 ?所用額外存儲(chǔ)單元 ??蛇x項(xiàng),如果算法簡單,可以不寫 ?調(diào)用時(shí)的注意事項(xiàng) 。可選項(xiàng),為將來的維護(hù)提供信息 ?子程序的編寫日期 。 第 7章 子程序和庫 調(diào)用子程序指令格式如下: CALL 子程序名 /Reg/Mem 子程序的調(diào)用指令分為近 (near)調(diào)用和遠(yuǎn) (far)調(diào)用。 子程序的調(diào)用和返回指令 調(diào)用指令 第 7章 子程序和庫 如果被調(diào)用子程序的屬性是遠(yuǎn)的 , 那么 , CALL指令將產(chǎn)生一個(gè)遠(yuǎn)調(diào)用 。 在此之后 , 再把被調(diào)用子程序入口地址的偏移量和段值分別送給 IP和CS, 這樣完成了子程序的遠(yuǎn)調(diào)用操作 。DISPLAY是子程序名 CALL BX 。WORD1是內(nèi)存字變量,其值是子程序的偏移量 CALL DWORD1 。BX所指內(nèi)存字單元的值是子程序的偏移量 CALL dword ptr [BX] 。為了實(shí)現(xiàn)此功能,指令系統(tǒng)提供了一條專用的子程序返回指令。為了與子程序的遠(yuǎn)、近調(diào)用相對(duì)應(yīng),子程序的返回也分:遠(yuǎn)返回和近返回。 例如: RET 。近返回指令 RETF 。子程序返回后, (SP)←(SP) + 6 第 7章 子程序和庫 例 :編寫一個(gè)子程序 UPPER,實(shí)現(xiàn)把寄存器 AL中存放的字符變大寫。子程序功能:把 AL中存放的字符變大寫 。出口參數(shù): AL 。書寫’ a?的 ASCII碼 61H也可以 JB over CMP AL, ?z? JA over SUB AL, 20H 。 解: 。入口參數(shù): DS:DX存放字符串的首地址,該字符串以 0為結(jié)束標(biāo)志 。算法描述:用 BX來指針來掃描字符串中的字符,如果遇到其結(jié)束標(biāo) 志,則停止掃描字符串操作 StrLen PROC PUSH AX PUSH BX 。增加字符串的長度 INC BX 。恢復(fù)在子程序開始時(shí)所保存的寄存器內(nèi)容 POP AX RET StrLen ENDP 第 7章 子程序和庫 一方面,由于 CPU中的寄存器在任何程序中都是“可見”的,一個(gè)程序?qū)δ臣拇嫫髻x值后,在另一個(gè)程序中就能直接使用,所以,用寄存器來傳遞參數(shù)最直接、簡便,也是最常用的參數(shù)傳遞方式。 例 ,子程序處理的數(shù)據(jù)被保存在寄存器 AL中。子返回時(shí), (AL)=?B? … MOV AL, ?2? CALL UPPER 。 例如: (BX)=123,顯示: 00123; (BX)=234,顯示: 00234; 解: 見書,略。 例 ,所處理的數(shù)據(jù)不是直接傳給子程序,而是把存儲(chǔ)它們的地址告訴子程序。該字符串的首地址用 DS:DX來指定 (以 0為字符串結(jié)束 ),各類字符個(gè)數(shù)分別存放 BX、 CX和 DI中。 例 :顯示出任意字符串中數(shù)字字符、字母和其它字符的個(gè)數(shù)。 第 7章 子程序和庫 堆棧是一個(gè)特殊的數(shù)據(jù)結(jié)構(gòu),它通常是用來保存程序的返回地址。 具體做法如下: 堆棧傳遞參數(shù) ?當(dāng)用堆棧傳遞入口參數(shù)時(shí),要在調(diào)用子程序前把有關(guān)參數(shù)依次壓棧,子程序從堆棧中取到入口參數(shù); ?當(dāng)用堆棧傳遞出口參數(shù)時(shí),要在子程序返回前,把有關(guān)參數(shù)依次壓棧 (這里還需要做點(diǎn)額外操作,要保證返回地址一定在棧頂 ),調(diào)用程序就可以從堆棧中取到出口參數(shù)。把 n個(gè)字的參數(shù)壓棧 CALL SUBPRO 。把 n個(gè)字的參數(shù)壓棧 CALL SUBPRO 。保護(hù)寄存器 BP MOV BP, SP 。保護(hù)其它寄存器的指令 MOV Paran, [BP+4] … MOV Para1, [BP+4+2*(n1)] … SUB1 ENDP 從堆棧中取入口參數(shù) 第 7章 子程序和庫 ?段間調(diào)用子程序 在段間調(diào)用子程序時(shí), CALL指令會(huì)把返回地址的偏移量和段寄存器 CS的內(nèi)容都?jí)簵!? 當(dāng)前 BP所指向的堆棧單元與最后一個(gè)參數(shù)Paran之間隔著 BP的原值、返回地址的偏移量和段地址,所以,二者之間相差 6個(gè)字節(jié)。這樣編寫的好處是該子程序可以被任何其它程序來調(diào)用。 利用堆棧來保存和恢復(fù)寄存器內(nèi)容方法的一般形式如下: XXXXX PROC PUSH REG1 。子程序的處理功能語句 POP REGn 。 利用堆棧來實(shí)現(xiàn)此項(xiàng)功能時(shí) ,應(yīng)注意以下幾點(diǎn): ?用堆棧保存和恢復(fù)寄存器的內(nèi)容,要注意堆?!跋冗M(jìn)后出”的操作特點(diǎn) ?通常情況下不保護(hù)入口參數(shù)寄存器的內(nèi)容,當(dāng)然,也可以根據(jù)事先的約定而對(duì)它們加以保護(hù) ?如果用寄存器帶回子程序的處理結(jié)果,那么,這些寄存器一定不能加以保護(hù) ?整個(gè)子程序的執(zhí)行幾乎肯定要改變標(biāo)志位,可用 PUSHF和 POPF來保護(hù)和恢復(fù)標(biāo)志位,但一般在子程序中不保護(hù)標(biāo)志位,除非有此特殊需要 第 7章 子程序和庫 子程序名 PROC [distance] [langtype] [visibility] [prologuearg] [USES 寄存器列表 ] [,參數(shù) [:數(shù)據(jù)類型 ]]... [LOCAL varlist] 子程序的程序體 子程序名 ENDP 定義子程序時(shí),可使用參數(shù)表來直接指明其所要的參數(shù),但程序員必須先用.MODEL偽指令,或使用 langtype參數(shù)來說明本子程序所使用的程序設(shè)計(jì)語言類型。這樣,在調(diào)用時(shí),系統(tǒng)可以自動(dòng)進(jìn)行類型檢查,也可以使用更方便的調(diào)用偽指令I(lǐng)NVOKE來調(diào)用該子程序。 子程序位距描述符告訴匯編程序該子程序是在本段之內(nèi) (Near),還是在本段之外 (Far)。該語言類型說明可使匯編語言程序與其它語言程序達(dá)到共享的目的。 若在程序和命令行中都說明了語言類型,那么,前者的說明優(yōu)先。它共有三個(gè)屬性值: PRIVATE、 PUBLIC和 EXPORT。 若程序員不要匯編程序自動(dòng)產(chǎn)生“起始”和“結(jié)束”代碼,則可用 NONE來代替說明語句中的宏名,即: OPTION PROLOGUE : NONE OPTION EPILOGUE : NONE 子程序的 ” 起始 ” 和 ” 結(jié)束 ” 操作 第 7章 子程序和庫 保護(hù)寄存器說明子句的說明格式: USES 寄存器列表 該說明子句要求匯編程序?yàn)槠渖杀Wo(hù)和恢復(fù)寄存器的指令序列: ?在進(jìn)入子程序執(zhí)行指令之前,把寄存器列表中的寄存器壓進(jìn)堆棧; ?在結(jié)束子程序時(shí),把先前壓進(jìn)堆棧的寄存器彈出,以達(dá)到保護(hù)寄存器的目的。若有多個(gè)寄存器名,則在寄存器名之間要用“ 空格 ”來分開。 第 7章 子程序和庫 子程序參數(shù)是用來向子程序傳遞信息的數(shù)據(jù)。為了能說明子程序的參數(shù),程序員必須事先指定參數(shù)所遵循的語言類型或使用“語言類型”參數(shù)。 VARARG數(shù)據(jù)類型允許向子程序傳遞“個(gè)數(shù)”不定的參數(shù),其參數(shù)之間要用逗號(hào)“,”來分開。其規(guī)定隱含地說明了在參數(shù)表中只能有一個(gè)用 VARARG說明的參數(shù)。 子程序的參數(shù)傳遞 第 7章 子程序和庫 子程序原型的說明格式如下: 子程序名 PROTO [distance] [langtype] [, [parameter]:tag]... 該說明語句告訴匯編程序該子程序的若干屬性,如:位距、語語言類型、參數(shù)個(gè)數(shù)及其類型等。 如果對(duì)所有基于堆棧的過程都定義一個(gè)原型,那么,就可把這些原型存放在一個(gè)獨(dú)立的包含文件 (用偽指令 INCLDUE來裝入 )中。 該原型說明語句中參數(shù) distance、 langtype、 parameter和 tag等的含義與前面的敘述相一致。 調(diào)用偽指令 INVOKE的使用格式如下: INVOKE expression [, arguments] 其中: expression —— 地址表達(dá)式,通常為子程序名; arguments —— 傳遞給子程序的參數(shù)列表,各參數(shù)之間用”,”分開, 參數(shù)可以是寄存器、表達(dá)式或 ADDR 標(biāo)識(shí)符等。 在參數(shù)傳遞時(shí),匯編程序?qū)⒏鶕?jù)子程序的原型進(jìn)行數(shù)據(jù)類型檢查。 子程序的調(diào)用偽指令 第 7章 子程序和庫 例如: INVOKE TEST, AX,
點(diǎn)擊復(fù)制文檔內(nèi)容
環(huán)評(píng)公示相關(guān)推薦
文庫吧 www.dybbs8.com
備案圖鄂ICP備17016276號(hào)-1