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

正文內(nèi)容

匯編語(yǔ)言之程序的基本結(jié)構(gòu)-wenkub

2023-04-24 01:49:29 本頁(yè)面
 

【正文】 …MOVAX, 4C00HINT21H。一個(gè)數(shù)據(jù)段的定義例子:DATA1SEGMENTword1DW1, 9078H, ?byte1DB21, 39。 [組合類型]段的長(zhǎng)度是指該段所占的字節(jié)數(shù):、如果段是數(shù)據(jù)段,則其長(zhǎng)度是其所有變量所占字節(jié)數(shù)的總和;、如果段是代碼段,則其長(zhǎng)度是其所有指令所占字節(jié)數(shù)的總和。 段的定義微機(jī)系統(tǒng)的內(nèi)存是分段管理的,為了與之相對(duì)應(yīng),匯編語(yǔ)言源程序也分若干個(gè)段來(lái)構(gòu)成。在掌握了這些基本內(nèi)容之后,就需要學(xué)習(xí)如何把它們組成一個(gè)完整的匯編語(yǔ)言程序。 源程序的基本組成匯編語(yǔ)言源程序的組成部分有:模塊、段、子程序和宏等。8086CPU有四個(gè)段寄存器,在該系統(tǒng)環(huán)境下運(yùn)行的程序在某個(gè)時(shí)刻最多可訪問(wèn)四個(gè)段,而80386及其以后的CPU都含有六個(gè)段寄存器,于是,在這些系統(tǒng)環(huán)境下開發(fā)的運(yùn)行程序在某個(gè)時(shí)刻最多可訪問(wèn)六個(gè)段。在定義段時(shí),每個(gè)段都有一個(gè)段名。 [類別]…。World39。調(diào)用DOS功能,結(jié)束程序的運(yùn)行CODE1ENDS 段寄存器的說(shuō)明語(yǔ)句在匯編語(yǔ)言源程序中可以定義多個(gè)段,每個(gè)段都要與一個(gè)段寄存器建立一種對(duì)應(yīng)關(guān)系。例如,ASSUMEASSUMEDATA1SEGMENT。編寫代碼段CODE1ASSUMECS:CODE1, DS:DATA1, ES:DATA2。(4)MOVES, AX。(6)MOVAX, DATA3MOVDS, AXMOVBL, byte2。ENDS語(yǔ)句(1)和(6)分別說(shuō)明了段和段寄存器之間的對(duì)應(yīng)關(guān)系,其中語(yǔ)句(6)重新說(shuō)明語(yǔ)句(1)所指定的對(duì)應(yīng)關(guān)系。語(yǔ)句(7)和(8)是調(diào)用中斷21H的4CH號(hào)功能來(lái)結(jié)束本程序的執(zhí)行,程序的返回代碼由寄存器AL來(lái)確定。除了要生成COM型執(zhí)行文件的源程序外,一個(gè)完整的源程序一般最好定義堆棧段。 (其中:xxxx是錯(cuò)誤號(hào))在源程序中,可用以下方法來(lái)定義堆棧段。 WORDSTACK1ENDS??稍诖a段的段指定語(yǔ)句中一起說(shuō)明CLI。定義一個(gè)堆棧段,其段名為STACK1  DB 256 DUP(?)STACK1ENDS上述段定義說(shuō)明了該段是堆棧段,系統(tǒng)會(huì)自動(dòng)把段寄存器SS和棧頂寄存器SP與該堆棧段之間建立相應(yīng)的關(guān)系,并設(shè)置其初值,而不用在代碼段對(duì)它們進(jìn)行賦值。 在屏幕上顯示字符串“HELLO,WORLD.”解:可運(yùn)行下面的控件,用鼠標(biāo)左鍵單擊程序中的某一行,可閱讀其含義;單擊“內(nèi)存”可切換內(nèi)存內(nèi)容的顯示方式。 程序的基本結(jié)構(gòu)在學(xué)習(xí)高級(jí)語(yǔ)言程序設(shè)計(jì)時(shí),我們知道了程序的三大主要結(jié)構(gòu):順序結(jié)構(gòu)、分支結(jié)構(gòu)和循環(huán)結(jié)構(gòu)。由于存在這些轉(zhuǎn)移語(yǔ)句,就使得:匯編語(yǔ)言源程序的基本結(jié)構(gòu)顯得不太明確。另外,在編程序時(shí),還要妥善保存已得到的處理結(jié)果,為后面的進(jìn)一步處理直接提供前面的處理結(jié)果,從而避免不必要的重復(fù)操作。(DX:AX)(Y+2:Y)ADDAX, 24DADCDX, 0。解:方法1:用匯編語(yǔ)言指令簡(jiǎn)單“直譯”上面的 交換數(shù)據(jù)方法DATA1SEGMENT…word1DW ?word2DW ?tempDW ?…DATA1ENDSCODE1SEGMENT…MOVAX, word1MOVtemp, AX。方法2:用匯編語(yǔ)言指令的特點(diǎn)來(lái)直接編譯DATA1SEGMENT…word1DW ?word2DW ?…DATA1ENDSCODE1SEGMENT…MOVAX, word1XCHGAX, word2MOVword1, AX。在程序中,當(dāng)需要進(jìn)行邏輯分支時(shí),可用每次分二支的方法來(lái)達(dá)到程序最終分多支的要求,也可是用地址表的方法來(lái)達(dá)到分多支的目的。這種分支方式不僅不利于程序的閱讀,而且也不便將來(lái)的維護(hù)。 (a) if … endif結(jié)構(gòu)(b) if…else…endif結(jié)構(gòu) 分支結(jié)構(gòu)的二種結(jié)構(gòu) 已知字節(jié)變量CHAR1,編寫一程序段,把它由小寫字母變成大寫字母。解:DATA1SEGMENT…XDW ?YDW ?…DATA1ENDSCODE1SEGMENT…MOVAX, XCMPAX, 0JGEcase23ADDAX, 10。把計(jì)算結(jié)果保存到變量Y中…CODE1ENDS 把下列C語(yǔ)言的語(yǔ)句改寫成等價(jià)的匯編語(yǔ)言程序段(不考慮運(yùn)算過(guò)程中的溢出)。else a = 21。C%2==0,也就是:看C的最低位是否為0JNZ_ELSEMOVA, 62DJMPNEXT_ELSE:case 1:case 2:b = a + 43。case 4:b。}解:DATA1SEGMENT…ADW ?BDW ?TableDW case0. case12, case12, case3DW case4, case567, case567, case567MSGDB 39。BX, 1。如果這二個(gè)要求有一個(gè)不滿足,或很難構(gòu)造,則無(wú)法使用該方法。分支偽指令的具體格式如下:格式1:.IF condition    。條件condition2成立時(shí)所執(zhí)行的指令序列.ENDIF其中:條件表達(dá)式“condition”的書寫方式與C語(yǔ)言中條件表達(dá)式的書寫方式相似,也可用括號(hào)來(lái)組成復(fù)雜的條件表達(dá)式。(邏輯與)、||(邏輯或)等。 AX != BX    。匯編程序在對(duì)“條件表達(dá)式”進(jìn)行代碼轉(zhuǎn)換時(shí)將進(jìn)行代碼優(yōu)化處理,以便盡可能生成最好的指令代碼。 amp。AX 0  ADD AX, 10。把計(jì)算結(jié)果保存到變量Y中 根據(jù)當(dāng)前計(jì)算機(jī)的時(shí)間和日期,顯示上午(AM)或下午(PM),以及所在的季節(jié)。(a)、Do—While結(jié)構(gòu)(b)、While結(jié)構(gòu) 常用的循環(huán)結(jié)構(gòu)示意圖一、用循環(huán)指令構(gòu)成循環(huán)結(jié)構(gòu)在編寫循環(huán)結(jié)構(gòu)的程序片段時(shí),我們可以多種方法來(lái)循環(huán)結(jié)構(gòu)。解:DATA1SEGMENTdataDW 90, 95, 54, 65, 36, 78, 66, 0, 99, 50, 1AverageDW 0DATA1ENDSCODE1SEGMENTASSUME CS:CODE1, DS:DATA1START:MOVAX, DATA1MOVDS, AXXORAX, AXXORDX, DX。把當(dāng)前數(shù)組元素之值加到(DX,AX)中INCCX。這些偽指令的書寫格式和含義與高級(jí)語(yǔ)言中相應(yīng)語(yǔ)句的書寫格式和含義相一致,所以,這些偽指令是很容易掌握的,也是非常有用的。REPEAT型循環(huán)偽指令.REPEAT  循環(huán)體的指令序列.UNTIL condition,那么,該邏輯表達(dá)式的形式只能是:“EXP1==EXP2”或“EXP1!=EXP2”。匯編程序在生產(chǎn)指令代碼時(shí)會(huì)進(jìn)行代碼優(yōu)化,以便盡可能得到最優(yōu)化的指令序列。.WHILE-.-.UNTIL的循環(huán)體內(nèi)使用。939。139。, $MSG3DB 13, 10, Type digits, then press ENTER: $DATA1ENDSCODE1SEGMENTASSUME CS:CODE1, DS:DATA1START:MOVAX, DATA1MOVDS, AXMOVCX, 9MOVAH, 09HMOVDX, OFFSET MSG1.REPEAT INT 21H INC NUM1。當(dāng)前字母向后移.UNTIL NUM2 39。 1。039。如果字符不是數(shù)字字符,則繼續(xù)循環(huán) MOV DL, AL MOV AH, 02H INT 21H。如果源程序中不指定某個(gè)屬性,那么,匯編程序?qū)⑹褂迷搶傩缘娜笔≈怠?同段名的作用DATA1SEGMENT        。第二個(gè)代碼段MOVAX, 4C00HINT21HCODE1ENDSENDSTARTEND在上面的例子中,第二個(gè)數(shù)據(jù)段是第一個(gè)數(shù)據(jù)段的后續(xù),匯編程序把它們是合二為一,上述的代碼段也如此。段對(duì)齊類型PARA是一個(gè)適用于所有段類型的對(duì)齊類型,它也是缺省的對(duì)齊類型。NONE是缺省的組合類型。COMMON表示當(dāng)前段與其它模塊中同名段重疊,也就是說(shuō),它們的起始地址相同。AT 數(shù)值表達(dá)式該數(shù)值表達(dá)式是當(dāng)前段所指定的絕對(duì)起始地址的段地址。典型的類別是Data和Code。 PUBLIC GROUP第一個(gè)數(shù)據(jù)段b1DB 10hDATA1ENDSDATA2SEGMENT。(2)把數(shù)據(jù)段DATA1的段值賦給段寄存器DS…MOVBL, b1。(6)引用DS來(lái)訪問(wèn)DATA2中的變量b2…CODE1ENDSENDSTART在上例中,語(yǔ)句(1)說(shuō)明DS與DATA1建立聯(lián)系,語(yǔ)句(2)對(duì)DS賦值,語(yǔ)句(3)用DS來(lái)訪問(wèn)DATA1段的變量名。方法2:用二個(gè)段寄存器對(duì)應(yīng)二個(gè)數(shù)據(jù)段DATA1SEGMENTb1DB 10hDATA1ENDSDATA2SEGMENTb2DB 23hDATA2ENDSCODE1SEGMENTASSUME CS:CODE1, DS:DATA1, ES:DATA2START:MOVAX, DATA1MOVDS, AX引用DS來(lái)訪問(wèn)DATA1中的變量b1
點(diǎn)擊復(fù)制文檔內(nèi)容
公司管理相關(guān)推薦
文庫(kù)吧 www.dybbs8.com
備案圖片鄂ICP備17016276號(hào)-1