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

正文內(nèi)容

[理學(xué)]第4章_匯編程序(已修改)

2024-10-28 21:23 本頁面
 

【正文】 第四章 匯編語言程序設(shè)計(jì) 用匯編語言編寫的程序稱為匯編語言源程序,將匯編語言源程序翻譯成機(jī)器語言的系統(tǒng)程序稱為匯編程序 assembler,翻譯的過程叫做匯編 assemble。匯編程序有兩種: ASM小匯編程序, MASM宏匯編程序。 匯編語言指令到機(jī)器指令的示意圖 匯編語言源程序的結(jié)構(gòu) 數(shù)據(jù)段名 SEGMENT …… 數(shù)據(jù)段名 ENDS 附加數(shù)據(jù)段名 SEGMENT …… 附加數(shù)據(jù)段名 ENDS 堆棧段名 SEGMENT …… 堆棧段名 ENDS 代碼段名 SEGMENT …… 代碼段名 ENDS END 每段以SEGMENT 語句開始 整個(gè)程序以 END 語句結(jié)束 以 ENDS 語句結(jié)束 下面舉例來加以說明: 這是一個(gè)兩個(gè)字相加的程序 DSEG SEGMENT ; 定義數(shù)據(jù)段 DATA1 DW 0F865H ; 定義被加數(shù) DATA2 DW 360CH ; 定義加數(shù) DSEG ENDS ; 數(shù)據(jù)段結(jié)束 ESEG SEGMENT ; 定義附加段 SUM DW 2 DUP(?) ; 定義存放結(jié)果區(qū) ESEG ENDS ; 附加段結(jié)束 CSEG SEGMENT ; 定義代碼段 ASSUME CS: CSEG, DS: DSEG, ES: ESEG START: MOV AX, DSEG MOV DS, AX ;初始化 DS MOV AX, ESEG MOV ES, AX ;初始化 ES LEA SI, SUM ;存放結(jié)果的偏移地址送 SI MOV AX, DATA1 ;取被加數(shù) ADD AX, DATA2 ;兩數(shù)相加 MOV ES: [SI], AX ; 和送附加段的 SUM單元中 HLT CSEG ENDS ;代碼段結(jié)束 END START ;源程序結(jié)束 總結(jié): 標(biāo)號(hào)域 語句中的標(biāo)號(hào)是一個(gè)標(biāo)示符,表示一條指令所在的存儲(chǔ)單元的地址,或叫符號(hào)地址。 操作碼域 : 所有指令的助記符、偽指令等都在操作碼域。 操作數(shù)域: 操作數(shù)以逗號(hào)間隔。操作數(shù)可以是常數(shù)、寄存器、標(biāo)號(hào)、變量、表達(dá)式。 注釋域: 說明。 匯編語言語句類型 語句類型:指令性語句、指示性語句 指令性語句 由指令組成、 CPU可以執(zhí)行; 指示性語句 用來告訴編譯程序 MASM如何對(duì)源程序進(jìn)行匯編,它不生成目標(biāo)代碼,不由 CPU執(zhí)行,所以常稱為 偽操作指令; 例如: START: MOV AX,DATA DATA DB 11H,12H,13H 標(biāo)號(hào) 指令的符號(hào)地址 ,后邊通常加上 “ : ” START是指令性語句的標(biāo)號(hào); 名字 通常表示變量名、段名和過程名,后不加“ : ” 指示性語句中的操作數(shù)可以有多個(gè),相互之間用逗號(hào)分開, DATA是指示性語句的名字。 數(shù)據(jù)項(xiàng)及表達(dá)式 操作數(shù)可以是 寄存器、存儲(chǔ)器單元或數(shù)據(jù)項(xiàng) 。存儲(chǔ)器可以按字節(jié)、字、雙字 Double Word、四字 Quad Word、十字節(jié)操作。而數(shù)據(jù)項(xiàng)又可以是 常量、標(biāo)號(hào)、變量或表達(dá)式 。 常量 :分為數(shù)字常數(shù)和字符串常數(shù)。 B:二進(jìn)制 D:十進(jìn)制,可以省略 H:十六進(jìn)制 字符串常數(shù) 用 ‘’ 單引號(hào)括起來,編譯程序?qū)⑵浞g成 ASCII碼。 Label 指令的標(biāo)號(hào)由程序員確定 : ?不能與指令助記符或偽指令重名; ?不允許由數(shù)字打頭; ?字符個(gè)數(shù)不超過 31個(gè); ?標(biāo)號(hào) 代表存放一條指令的存儲(chǔ)單元的地址; ?標(biāo)號(hào) 可以作為程序轉(zhuǎn)移、過程調(diào)用、循環(huán)控制等指令的操作數(shù); 標(biāo)號(hào)有三種屬性: 段、偏移量、類型 ?偏移量是一個(gè) 16位的無符號(hào)數(shù); ?類型有兩種:近標(biāo)號(hào) NEAR( 2字節(jié))和遠(yuǎn)標(biāo)號(hào)FAR( 4字節(jié)); Variable 變量是存儲(chǔ)器中某個(gè)數(shù)據(jù)區(qū)的名字,在指令中可以作為存儲(chǔ)器操作數(shù)使用;變量也具有三種屬性:段、偏移量、類型 段值: 一般在 DS或 ES寄存器; 變量的 類型: 有 BYTE、 WORD、 DWORD、 QWORD、TBYTE; 常用 數(shù)據(jù)類型偽指令 DB、 DW、 DD、 DQ、 DT來定義。 例如: NUM DB 11H,22H,33H DATA2 DW 100H,200H 變量名與標(biāo)號(hào)名的區(qū)別: 變量名是變量的符號(hào)地址,標(biāo)號(hào)是指令的符號(hào)地址。例如: MOV AX,VAR1 ;( VAR1字變量) MOV BL,VAR2 ;( VAR2字節(jié)變量) JMP DONE …… DONE: ADD AL,5 變量名對(duì)應(yīng)數(shù)據(jù)區(qū)的首地址, 若數(shù)據(jù)區(qū)有多個(gè)數(shù)據(jù),則在對(duì)其他數(shù)據(jù)操作時(shí)需要修改地址: NUM DB 11H,23H,33H ..... MOV AL,NUM+2 表達(dá)式 表達(dá)式不是指令,本身不能執(zhí)行。 表達(dá)式中的運(yùn)算是在匯編時(shí)完成的,而不是在指令執(zhí)行時(shí)完成的。 表達(dá)式常用運(yùn)算符有: 1) 算術(shù)運(yùn)算符 : +、 、 *、 /和 MOD(取余數(shù)) 2) 邏輯運(yùn)算符 : AND、 OR、 XOR、 NOT 3) 關(guān)系運(yùn)算符: EQ(等于 )、 NE(不等于)、 LT(小于 )、 GT(大于 )、 LE(小于等于)、 GE(大于等于) 4) 取值運(yùn)算符 :OFFSET、 SEG 5) 屬性運(yùn)算符: PTR 6) 其他運(yùn)算符: [ ]、: 表達(dá)式中的運(yùn)算符 算術(shù)運(yùn)算符: +、 、 *、 /、求余 (MOD)、它們運(yùn)算的結(jié)果都取整數(shù)。 MOV AL,8+5 MOV AX,NUM+8 2 邏輯運(yùn)算符 與 AND、或 OR、異或 XOR、非 NOT四種,邏輯運(yùn)算符只能用于數(shù)值表達(dá)式,結(jié)果也是數(shù)值。 例: AND AL,0ADH AND 0CCH 注意:邏輯運(yùn)算符與邏輯運(yùn)算指令區(qū)別。 關(guān)系運(yùn)算符 相等 EQ、 不相等 NE、 小于 LT、 大于 GT、 小于等于 LE、 大于等于 GE 例: MOV AX, 4 EQ 3 MOV AX, 4 NE 3 關(guān)系運(yùn)算符可對(duì)兩個(gè)性質(zhì)相同的數(shù)據(jù)進(jìn)行關(guān)系運(yùn)算,如果表達(dá)式成立,則運(yùn)算結(jié)果為真TRUE,輸出結(jié)果為全 1;若表達(dá)式不成立,則表示結(jié)果為假 FALSE,輸出為全 0。 匯編之后: MOV AX, 0 MOV AX, 0FFFFH ? SEG、 OFFSET又稱為數(shù)值返回運(yùn)算符,用以獲取變量或標(biāo)號(hào)的屬性。 例: MOV AX,SEG BUFFER MOV AX,OFFSET BUFFER ? PTR是類型運(yùn)算符: CALL DWORD PTR[BX] MOV AL,BYTE PTR[SI] 取值運(yùn)算符和類型運(yùn)算符 偽指令 偽指令由編譯程序執(zhí)行,不參與程序的運(yùn)行;功能:定義數(shù)據(jù)、 分配 存儲(chǔ)區(qū)、定義段、定義過程等。 常用的偽操作指令: 1. 數(shù) 據(jù)定 義偽 指令 2. 符 號(hào) 定 義偽 指令 3. 設(shè) 定段寄存器 偽 指令 4. 過 程定 義偽 指令 5. 宏命令 偽 指令 6. 模 塊 定 義與連 接 偽 指令 數(shù)據(jù)定義偽指令 數(shù)據(jù)定義偽指令用來定義一個(gè)變量,說明變量的類型,給變量分配存儲(chǔ)空間,并賦初值。一般格式為: [變量名 ] 偽操作助記符 操作數(shù) 1 [,操作數(shù) 2, …] 常用的數(shù)據(jù)定義偽操作有 5種: DB: 定義字節(jié)類型的變量 如: DELY1 DB 11H,22H,33H,44H DELY2 DB ‘HELLO’ DATA1 DB ? DW:定義字類型的變量 DATA2 DW 100H,200H NUM DW 100 5+88 11H 22H 33H 44H ‘ H’ ‘ E’ ‘ L’ ‘ L’ ‘ O’ ... DELY1 DELY2 DD:定義雙字類型的變量 如: DATA3 DD 35F87123H DQ:定義四字類型的變量 DT:定義十字節(jié)類型的變量,每個(gè)操作數(shù) 為 10個(gè)字節(jié)的壓縮 BCD碼; SUM DQ 0011223344556677H 如果一個(gè)變量的操作數(shù)有多個(gè),而且都一樣; 可以使用重復(fù)操作符 DUP 來定義: DATA1 DB 20 DUP(?) DATA2 DB 20 DUP(30) 23H 71H F8H 35H … 77H 66H 55H 44H 33H 22H 11H 00H … DATA3 SUM 符號(hào)定義偽指令 符號(hào)定義偽指令 EQU用于給一個(gè)表達(dá)式賦予一個(gè)名字; 指令格式: 符號(hào)名 EQU 表達(dá)式 例如: DATA EQU 0DH COUNT EQU Ten*2+1024 ADDR EQU ES:[BP+DI+5] 注意:若表達(dá)式中有變量,則應(yīng)在 EQU命令前定義。 例如: P8 EQU DS:[BP+5] 注意:不能重復(fù)定義同一個(gè)符號(hào)。 = 可以對(duì)一個(gè)符號(hào)重復(fù)定義: FACTOR=10H … FACTOR=25H 段定義偽指令 segment 和 ends段定義偽指令,定義源程序中的邏輯段; 指令格式: 段名 SEGMENT [定位類型 ][組合類型 ][?類別 ’ ] …… 段名 ENDS [定位類型 ]: 說明該段對(duì)起始地址的要求 ;有四種選擇 PARA, BYTE, WORD, PAGE PARA表示段必須從能被 16整除的地址開始; [組合類型 ]:在具有多個(gè)模塊的程序中,它指示在匯編后進(jìn)行連接時(shí),該段是否和其它的段進(jìn)行組合 ,如果一個(gè)程序不需要和其他程序組合,也可省略該項(xiàng)。 [類別 ]: 用單引號(hào)擴(kuò)起來的字符串。 ‘ STACK?, ?CODE?, ?DATA?具有相同類別的邏輯段裝入連續(xù)的內(nèi)存區(qū); stack segment para stack ?stack? …… Stack ends 該段是堆棧段,段名為 stack; segment指明堆棧段開始; para說明該段必須從能被 16整除的地址邊界開始; stack指明組合類型; ‘ stack?指明類別是堆棧類。 注意:同一個(gè)段的起始和結(jié)束必須是同一個(gè)
點(diǎn)擊復(fù)制文檔內(nèi)容
教學(xué)課件相關(guān)推薦
文庫吧 www.dybbs8.com
公安備案圖鄂ICP備17016276號(hào)-1