3_匯編語言程序格式.ppt_第1頁
3_匯編語言程序格式.ppt_第2頁
3_匯編語言程序格式.ppt_第3頁
3_匯編語言程序格式.ppt_第4頁
3_匯編語言程序格式.ppt_第5頁
已閱讀5頁,還剩91頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

1、1,封面,第三章,匯編語言程序格式,2,第三章匯編語言程序格式,第三章 匯編語言程序格式 概 述 3.1 匯編語言程序的開發(fā) 3.2 參數(shù)、變量和標(biāo)號(hào) 3.3 程序段的定義和屬性 3.4 復(fù)雜數(shù)據(jù)結(jié)構(gòu) 要點(diǎn)及習(xí)題分析,3,概述1,概 述 1.“匯編”的含義?手工匯編 機(jī)器匯編 2.什麼是匯編程序? 3.什麼是偽指令?偽指令的作用; 偽指令與機(jī)器無關(guān),取決于匯編程序的版本,版本越高,提供的偽指令數(shù)目增加,功能增強(qiáng);如MASM6.0提供了.IF/.ENDIF等語句,使匯編語言程序設(shè)計(jì)類似高級(jí)語言的形式。,4,概述2,4.教材的“硬指令”:指的是CPU指令集中的指令。硬指令的條數(shù)和功能取決于CPU,

2、和匯編程序無關(guān);但是,用匯編指令(符號(hào)指令)表示的硬指令,能否被匯編程序識(shí)別并翻譯成機(jī)器指令,則與匯編程序的版本有關(guān),如4.0以下的版本不支持386的32位指令,5.0開始支持32位指令,6.11版支持Pentium(但還不支持MMX指令6.12支持MMX指令)。 本章以MASM6.X為藍(lán)本,介紹常用偽指令、操作符,匯編、連接、運(yùn)行程序的過程,以及修改調(diào)試方法。,回第三章,5,3.1(目錄)匯編語言程序的開發(fā),3.1匯編語言程序的開發(fā) 3.1.1 匯編語言程序的語句格式 1)執(zhí)行性語句 2)說明性語句 3.1.2 匯編語言的程序格式 1)簡化段定義格式 2)完整段定義格式 3.1.3 匯編語言

3、程序的開發(fā)過程 源程序的編輯、匯編、連接、調(diào)試,返回第三章,6,3.1.1匯編語言程序的語句格式,3.1.1 匯編語言程序的語句格式 兩類語句:1)執(zhí)行性語句 2)說明性語句 1)執(zhí)行性語句(硬指令、代碼段) 標(biāo)號(hào)(冒號(hào)是標(biāo)號(hào)的一部分):代表該指令的邏輯地址,為分支、循環(huán)、調(diào)用等指令提供轉(zhuǎn)移的目的地址。是用戶自定義的標(biāo)識(shí)符。定義規(guī)則:最多31個(gè)字母、數(shù)字及特殊符號(hào),不能以數(shù)字打頭;默認(rèn)情況下,不區(qū)別大小寫;不能使用保留字。標(biāo)號(hào)定義只可能出現(xiàn)在代碼段。,標(biāo)號(hào):硬指令助記符 操作數(shù),操作數(shù) ;注釋,7,執(zhí)行性語句,硬指令助記符: 任何一條處理器指令或宏指令。 操作數(shù): 立即數(shù)、寄存器、存儲(chǔ)單元;無

4、操作數(shù)、單操作數(shù)和雙操作數(shù)。 注釋(分號(hào)是注釋的一部分): 增加程序的可讀性。注釋不應(yīng)是指令功能的重復(fù)。如對于指令“mov cx,25”,“25送入寄存器CX”毫無意義,可能應(yīng)該寫成“設(shè)置循環(huán)次數(shù)”。,標(biāo)號(hào):硬指令助記符 操作數(shù),操作數(shù) ;注釋,8,說明性語句,2)說明性語句(偽指令、可位于任何段) 名字 偽指令助記符 參數(shù),參數(shù);注釋 名 字: 可以是變量名、段名、子程序名或宏名,這 些名字既反映邏輯地址,又具有自身的各種屬性;對不同的說明性語句,其中的名字具有不同的屬性,具體內(nèi)容在介紹偽指令時(shí)介紹。名字也可以是一個(gè)常數(shù)或一個(gè)符號(hào)的代號(hào),可稱其為“符號(hào)名”,這種名字僅僅具有標(biāo)識(shí)的作用。 名字

5、與標(biāo)號(hào)的區(qū)別:無冒號(hào);可以在任何段定義(嚴(yán)格來說是變量名和符號(hào)名)。 名字的定義規(guī)則與標(biāo)號(hào)相同。,9,說明性語句(e),偽指令助記符:本章主要內(nèi)容。 參數(shù):偽指令要求的內(nèi)容,常數(shù)、變量、表達(dá)式 注釋:增加可讀性。 兩種語句的四部分要用分割符分開,操作數(shù)和參數(shù)用逗號(hào),其他用空格或制表符。,返回3.1,名字 偽指令助記符 參數(shù),參數(shù);注釋,10,3.1.2程序格式,3.1.2 匯編語言的程序格式 使用匯編語言編寫程序時(shí)必須遵循的語法規(guī)則。 完整的匯編語言源程序由段組成:若干個(gè)代碼段、數(shù)據(jù)段、附加段或堆棧段;獨(dú)立運(yùn)行的程序必須包含一個(gè)代碼段,并指出程序的啟動(dòng)語句;所有的執(zhí)行語句必須位于某一個(gè)代碼段內(nèi)

6、,說明性語句可根據(jù)需要位于任一段內(nèi);堆棧段不是必須的,但最好設(shè)置堆棧段。 編寫匯編語言源程序通常應(yīng)遵循所謂“標(biāo)準(zhǔn)格式”,本書介紹標(biāo)準(zhǔn)格式的兩種表示形式,一種符合MASM 5.0及更新版本的語法規(guī)則,稱為“簡化段定義格式”;另一種符合早期版本的語法規(guī)則,稱為“完整段定義格式”(5.0及以后的版本也支持)。,11,簡化段定義格式,例3.1a 簡化段定義格式 ;lt301a.asm .model small .stack .data String db hello,everybody!,0dh,0ah,$ .code .startup ;說明程序的起點(diǎn),設(shè)置DS、SS mov dx,offset,s

7、tring mov ah,9 int 21h .exit 0 ;程序結(jié)束,形成返回DOS的指令 end,MASM5.0 5.1不支持,MASM5.0 5.1不支持,12,完整段定義格式(e),例3.1b 完整段定義格式 ;lt301b.asmmov ds,ax Stack segment stackmov dx,offset string dw 512 dup(?)mov ah,9 Stack endsint 21h Data segmentmov ax,4c00h String db int 21h Data endscode ends Code segment code end start

8、 assume cs:code,ds:data, ss:stack Start:mov ax,data,返回3.1,13,3.1.3開發(fā)過程(1),3.1.3 匯編語言程序的開發(fā)過程 1. 源程序的編輯 EDIT。擴(kuò)展名必須是 .asm。 2. 源程序的匯編 MASM 6.x版本:ml.exe 如 ml /c lt301a.asm MASM 5.x版本:masm.exe 如 masm lt301a.asm 3. 目標(biāo)文件的連接 將一個(gè)或多個(gè)目標(biāo)文件與庫文件合并成一個(gè)可執(zhí)行文件(.exe,.com) LINK lt301a.obj LINK的一般格式: LINK /參數(shù)選項(xiàng) obj文件列表 ex

9、e文件名,map 文件名,庫文件名,14,開發(fā)過程(2),ML /參數(shù)選項(xiàng) 文件列表 LINK 連接參數(shù)選項(xiàng),4. ML.EXE的用法 ML.EXE可以自動(dòng)調(diào)用LINK程序,實(shí)現(xiàn)匯編和連接自動(dòng)地依次進(jìn)行。其一般格式如下: 常用參數(shù)選項(xiàng)如下(參數(shù)大小寫敏感): /c(小寫):只匯編,不連接。 /Fl 文件名:創(chuàng)建一個(gè)匯編列表文件(.lst)。 /Fr 文件名:創(chuàng)建一個(gè)可在PWB下瀏覽的.SBR文件。 /Fo 文件名:生成指定的.OBJ文件,不用缺省名。 /Fe 文件名:生成指定的.EXE文件,不用缺省名。 /Fm 文件名:創(chuàng)建一個(gè)連接映象文件(.MAP)。 /Sg 在列表文件中,列出由匯編程序產(chǎn)

10、生的指令。,15,文件介紹(3),5. 兩個(gè)文件的介紹(.lst.map) 要生成列表文件和連接映象文件,可以輸入如下形式的命令: ML /Fl /Fm /Sg lt301a.asm(p76) 注釋: 注意大小寫; 參數(shù)/Sg將.startup,.exit等偽指令轉(zhuǎn)換成 硬指令,瀏覽列表文件,瀏覽映象文件,16,程序的調(diào)試(1),6.可執(zhí)行程序的調(diào)試 經(jīng)匯編、連接生成的可執(zhí)行程序在DOS提示符后鍵入文件名即可直接運(yùn)行。如運(yùn)行有錯(cuò)誤,可使用DEBUG程序調(diào)試。 鍵入命令:DEBUG LT301A.EXE 即可將程序調(diào)入內(nèi)存,由DEBUG控制。用戶可使用單步執(zhí)行、斷點(diǎn)執(zhí)行等方法進(jìn)行調(diào)試。 注意尋找

11、數(shù)據(jù)段的方法。,17,程序的調(diào)試(2),7.程序在內(nèi)存中的定位及如何尋找數(shù)據(jù)段 參考:教材P76/例題3.1a:lt301a.asm; 教材P80/lt301a.asm的列表文件; 教材P81/lt301a.asm的影像文件; 教材P82/lt301a.exe由DEBUG裝入內(nèi)存后的反匯編結(jié)果以及使用R命令顯示的寄存器值。 操作步驟: 按P82 DEBUG裝入內(nèi)存后顯示的寄存器值,由DS=ES=14B4H可知,14B4為最低的可用的段地址,即程序段前綴(PSP)的起始地址。 CS=14C4H為代碼段的段地址,即14C40為整個(gè)程序的起始地址;14C40相當(dāng)于影像文件的00000H。,18,程序

12、的調(diào)試(3),在反匯編結(jié)果中,第一條指令為MOV DX,14C6,在影像文件中已經(jīng)顯示DGROUP的“Origin”為0002:0,所以將14C6(14C4+0002)作為DS的值。 數(shù)據(jù)段第一個(gè)數(shù)據(jù)的地址:在影像文件中顯示:DATA段的“Start”為00024H,14C40+00024=14C64,這是數(shù)據(jù)段第一個(gè)數(shù)據(jù)的物理地址,由于DS=14C6,其邏輯地址為14C6:0004,在數(shù)據(jù)段的偏移地址當(dāng)然是0004。從反匯編結(jié)果的第13條指令(MOV DX,0004)也可以看出第一個(gè)數(shù)據(jù)的偏移地址為04。,19,程序的調(diào)試(4)(end),教材82頁SS=14C8: 14C40為整個(gè)程序的起

13、始地址,81頁的影像文件顯示:STACK段的“Start”=00040h, 14c40h+00040h=14c80h,取高4位,即SS=14C8H。這是未調(diào)整的堆棧段的段地址。 82頁顯示SP=0400:影像文件反映起始地址為00040H,末地址為0043FH,長度為0400H(堆棧段默認(rèn)長度1024字節(jié),16進(jìn)制數(shù)為0400);堆棧區(qū)可表示成14C8:003FF。設(shè)置SP=0400,則入棧時(shí)第一個(gè)數(shù)據(jù)將占用14C8:03FE和03FF單元,顯然,SP的值應(yīng)等于堆棧區(qū)的長度值。 SP=0400H是未調(diào)整的堆棧指針。,返回第三章,返回3.1,20,3.2(目錄)參數(shù)、變量和標(biāo)號(hào),3.2 參數(shù)、變

14、量和標(biāo)號(hào) 3.2.1 數(shù)值型參數(shù) 常數(shù)、數(shù)值表達(dá)式、運(yùn)算符及運(yùn)算符 的優(yōu)先級(jí) 3.2.2 變量定義偽指令 3.2.3 變量和標(biāo)號(hào)的屬性 變量和標(biāo)號(hào)的三種屬性、屬性操作符,返回第三章,21,3.2.1 數(shù)值型參數(shù),3.2.1 數(shù)值型參數(shù) 參數(shù)可分為兩類:數(shù)值型參數(shù) 地址型參數(shù) 對硬指令:指令的操作對象(一般稱為操作數(shù)),可以是立即數(shù),寄存器和存儲(chǔ)單元,其立即數(shù)要用數(shù)值型參數(shù)表達(dá),地址型參數(shù)如標(biāo)號(hào)或變量的名字。 對偽指令:參數(shù)給匯編程序提供必要的信息,使匯編程序完成匯編。 數(shù)值型參數(shù)含:常數(shù) 數(shù)值表達(dá)式 1.常數(shù):十進(jìn)制(默認(rèn))十六進(jìn)制 二進(jìn)制 八進(jìn)制 字符串常數(shù)(其數(shù)值為ASCII碼值) 符號(hào)常

15、數(shù):表達(dá)一個(gè)數(shù)值的標(biāo)識(shí)符 涉及到的兩條偽指令:,22,數(shù)值型參數(shù),1)基數(shù)控制偽指令(RADIX) RADIX n;n取216內(nèi)的任意整數(shù)。 如“ RADIX 16”,使匯編程序把默認(rèn)的基數(shù)改為16,即沒有加后綴的數(shù)表示十六進(jìn)制數(shù),非十六進(jìn)制數(shù)均應(yīng)加后綴(含十進(jìn)制數(shù))。 2)符號(hào)常數(shù)定義偽指令(EQU、=) EQU 符號(hào)名 EQU 數(shù)值表達(dá)式 符號(hào)名 EQU ;5.X版用雙引號(hào)。 給符號(hào)定義一個(gè)數(shù)值或把符號(hào)定義成另一個(gè)字符串;也可以說使EQU兩邊的項(xiàng)等效,可以互相代換。,23,數(shù)值型參數(shù),例如:Number_1 EQU 2; Loop_count EQU 2*5+Number_1 CallDo

16、s EQU 注釋: 1)程序中使用符號(hào)常數(shù),而不使用具體數(shù)值,可大大提高程序的易讀性,而且使程序易于修改。使用匯編語言編寫程序,通常應(yīng)遵循這一原則。 2)EQU右邊的項(xiàng)允許出現(xiàn)符號(hào),但該符號(hào)必須是已經(jīng)定義或即將定義的。 3)符號(hào)定義后即可在程序中使用,如 MOV CX,Loop_count CallDos,24,數(shù)值型參數(shù),“=” 號(hào)偽指令 其作用同EQU,但用=號(hào)定義的符號(hào)在同一個(gè)程序中可以重復(fù)定義,EQU不可。 如 X=7 ;X EQU 7 正確 X=X+3 ;X EQU X+3 錯(cuò)誤,25,數(shù)值型參數(shù),2.數(shù)值表達(dá)式 常數(shù)、寄存器、變量及標(biāo)號(hào)等用運(yùn)算符連接起來即構(gòu)成表達(dá)式,如細(xì)分,有算術(shù)

17、表達(dá)式、邏輯表達(dá)式、關(guān)系表達(dá)式、地址表達(dá)式等,但是由于前三種表達(dá)式或由它們構(gòu)成的綜合型表達(dá)式其結(jié)果都是數(shù)值,故一律算做數(shù)值表達(dá)式;如果一個(gè)表達(dá)式的結(jié)果從物理意義來說,代表存儲(chǔ)器單元的地址,則稱其為地址表達(dá)式。 常見運(yùn)算符分成五類: 1)算術(shù)運(yùn)算符:+ 、- 、* 、/ 、MOD 2)邏輯運(yùn)算符:AND 、OR 、XOR 、NOT 3)移位運(yùn)算符:SHL 、SHR 4)關(guān)系運(yùn)算符:EQ、NE、GT、LT、GE、LE 5)高低分離符:HIGH、LOW、HIGHWORD、LOWWORD,26,數(shù)值型參數(shù)(end),數(shù)值表達(dá)式作為數(shù)值型參數(shù)可以出現(xiàn)在硬指令語句和偽指令語句中;數(shù)值表達(dá)式的結(jié)果,由匯編程

18、序負(fù)責(zé)計(jì)算,不會(huì)影響目標(biāo)程序的運(yùn)行速度。例如: mov ax,3*4+5 ;mov ax,17 and al,03h and 05h ;and al,01h mov al,0101b shl 2*2 ;mov al,01010000b ;移位對象 SHL/SHR 移位次數(shù) mov bx,(port lt 5)and 20)or(port ge 5)and 30) ;如關(guān)系成立,值為0FFFFH;否則為0。 ;當(dāng)port5時(shí),匯編結(jié)果為mov bx,20 ;當(dāng)port5時(shí),匯編結(jié)果為mov bx,30 dd_value equ 0ffff1234h mov ax,lowword dd_value

19、 ;mov ax,1234h,關(guān)于優(yōu)先級(jí)問題,不同的運(yùn)算符,有不同的優(yōu)先級(jí),由于運(yùn)算符多,優(yōu)先級(jí)層次多,編程時(shí)通常用圓括號(hào)規(guī)定優(yōu)先級(jí)。,返回 3.2,27,3.2.2 變量定義偽指令(1),3.2.2 變量定義偽指令 為變量申請固定長度的存儲(chǔ)空間,并將相應(yīng)存儲(chǔ)單 元初始化。 一般格式: 變量名為用戶自定義的標(biāo)識(shí)符,表示初值表首個(gè) 數(shù)據(jù)的偏移地址,稱為符號(hào)地址。如省略變量名, 匯編程序只為初值表分配空間,無符號(hào)地址。 偽指令助記符:指DB、DW等。 初值表是由逗號(hào)分割開的參數(shù),可以是常數(shù)、表 達(dá)式、問號(hào)、DUP等。問號(hào)(?)表示初值不確定, 即不賦初值;DUP為重復(fù)分配操作符,格式為: 重復(fù)次數(shù)

20、 DUP(被重復(fù)數(shù)據(jù)列表),變量名 偽指令助記符 初值表,28,變量定義偽指令(2),1.字節(jié)定義偽指令DB 使匯編程序以字節(jié)為單位分配一個(gè)或多個(gè)存儲(chǔ)單元, 并將它們按初值表規(guī)定的數(shù)據(jù)初始化。初值表中的每個(gè) 數(shù)據(jù)只能是字節(jié)量或字符串常數(shù)。,data segment x db a,-5 db 2 dup(1,2,?) y db ABC,? data ends,匯編程序的地址計(jì)數(shù)器: 每進(jìn)入一個(gè)新段,地址 計(jì)數(shù)器清零;每分配一 個(gè)單元,地址計(jì)數(shù)器自 動(dòng)加1,指向下一個(gè)待分 配的單元;代表當(dāng)前值。,變量X、Y定義后,即可在指令中使用: MOV AL,X ;直接尋址(MOV AL,0000H) DEC

21、 X+1;直接尋址(DEC BYTE PTR0001H) MOV CH,BX+Y;寄存器相對尋址 MOV Y,AL ;直接尋址(MOV 0008H,AL),29,變量定義偽指令(3),2.定義字單元偽指令DW 功能與DB相同,但以字單元(兩個(gè)字節(jié))為單位分配存儲(chǔ)空間;初值表中的每個(gè)數(shù)據(jù)只能是字量,即16位數(shù)據(jù)。 DATA SEGMENT COUNT DW 8000H;8000H可能是一個(gè)無符號(hào)數(shù)或有符號(hào) ASCII DW AB ;不可多于兩個(gè)字符,區(qū)分高低地址 NUM_1 DW 25H ;DW 0025H MAX EQU 64H ;不占用存儲(chǔ)空間 NUM_2 DW MAX,MAX+6,MAX*

22、2 DUP(?) CON_ADDR DW COUNT;變量中為COUNT的偏移地址 DATA ENDS,30,變量定義偽指令(4),指 令 舉 例: WNUM EQU 5678H;WNUM為符號(hào)常數(shù) COUNT DW 20H;COUNT為變量,設(shè)其偏移地址為10H MOV AX,BX+SI+WNUM;同MOV AX,BX+SI+5678H MOV BX,COUNT ;MOV BX,0010H BX=0020H LEA BX,COUNT ;同LEA BX,0010H BX=0010H MOV BX,OFFSET COUNT;同MOV BX,0010H BX=0010H MOV AX,SI+COU

23、NT ;同MOV AX,COUNTSI ;同MOV AX,SI+0010H,偏移量為符號(hào)常數(shù),偏移量為變量,31,變量定義偽指令(5),3.定義雙字單元偽指令DD 以雙字單元(4字節(jié))為單位分配存儲(chǔ)空間。初值 表中的每個(gè)數(shù)據(jù)是32位數(shù)據(jù),可以是32位有符號(hào)或無符 號(hào)數(shù),也可以用來表示一個(gè)“遠(yuǎn)指針”(高位字表示段地 址,低位字表示偏移地址,可用做段間間接轉(zhuǎn)移)。 vardd dd 0,?,12345678h far_point dd 00400078h(LDS SI,F(xiàn)AR_POINT) 4.其他數(shù)據(jù)定義偽指令 1)DF、DQ、DT 略 2)MASM6.0建議使用:BYTE/WORD/DWORD

24、等 3)SBYTE/SWORD/SDWORD:有符號(hào)數(shù)專用。,32,變量定義偽指令(6),例 3.2 數(shù)據(jù)定義綜合應(yīng)用 .model small CALLDOS equ .stack .code .data .startup bvar db 16 mov bl,bvar wvar dw 4*3 mov ax,word ptr dvar0 dvar dd 4294967295 mov dx,word ptr dvar2 qvar dq ? mov dx,offset msq db 1,2,3,4,5 mov ah, 9 tvar dt 2345 CALLDOS abc db a,b,c .exi

25、t 0 msq db hello,13,10,$ end bbuf db 12 dup(month) dbuf dd 25 dup(?),改變雙字屬性,33,變量定義偽指令(7),5.定位偽指令ORG(/EVEN/ALIGN) 控制數(shù)據(jù)或指令的偏移地址。 1)ORG 參數(shù) 使地址計(jì)數(shù)器指向參數(shù)表達(dá)的偏移地址。 ORG 100H;從0100H單元開始分配存儲(chǔ)器。 ORG$+10;$表示地址計(jì)數(shù)器的當(dāng)前值,$+10 ;表示由當(dāng)前地址向前跳過10個(gè)字節(jié)。 2)EVEN ;使它后面的數(shù)據(jù)或指令從偶地址開始。 3)ALIGN n;使它后面的數(shù)據(jù)或指令從n的整數(shù)倍 ;地址開始(可被n整除)。 n是2的乘方

26、(2,4,8)且小于所在段的定位屬 性值。如“ALIGN 4”,使下一個(gè)地址開始于雙字邊界。,34,變量定義偽指令(8)(end),定位偽指令舉例: DATA SEGMENT D01 DB 1,2,3 ;D01偏移地址為0,=0003H EVEN(ALIGN 2); $為0004H D02 DW 5 ;D02偏移地址為04H, =0006H ALIGN 4 ;最接近6的、可被4整除的數(shù)是8 ; =0008H D03 DD 6 ;D03的偏移地址為08H,=000CH ORG +10H ;000CH+0010H=001CH =001CH D04 DB abc ;D04的偏移地址為001CH =0

27、01FH LEN EQU D04;LEN=001F001C=3 ;變量D04所占的字節(jié)數(shù)。,返回 3.2,35,3.2.3 變量和標(biāo)號(hào)的屬性(1),3.2.3 變量和標(biāo)號(hào)的屬性 變量和標(biāo)號(hào)有三種屬性: 段屬性(段屬性值、段值):所在段的段地址 偏移屬性(偏移值):所在段的段內(nèi)偏移地址 類型屬性 對標(biāo)號(hào)和子程序名:NEAR 或 FAR 對變量:BYTE、WORD、DWORD、FWORD等 注釋:變量的偏移值,有時(shí)也稱“變量的值”。但是最好將二者加以區(qū)別:變量的“偏移值”代表偏移地址;變量的值代表變量中存儲(chǔ)的內(nèi)容。高級(jí)語言中出現(xiàn)變量,通常是引用變量中所存放的數(shù)據(jù),匯編語言中出現(xiàn)變量,根據(jù)指令的不同

28、,有時(shí)引用變量的偏移地址,有時(shí)引用變量中存儲(chǔ)的數(shù)據(jù)。對此,應(yīng)特別加以注意。,36,變量和標(biāo)號(hào)的屬性(2),DATA SEGMENT D01 DW 2508H D01_ADR DW D01 DATA ENDS MOV BX,D01 ;同MOV BX,0000H ;指令執(zhí)行后,BX=2508H MOV BX,D01+2 ;同MOV BX,0000+2 MOV BX,SI+D01 ;同MOV BX,SI+0 MOV BX,OFFSET D01;同MOV BX,0000H LEA BX,D01;同MOV BX,0000H;執(zhí)行后 BX=0,引用D01的偏移地址,引用D01存放的數(shù)據(jù),D01出現(xiàn)在表達(dá)式

29、中,引用偏移地址,37,地址操作符(1),地址及類型操作符 1.地址操作符 OFFSET 變量|標(biāo)號(hào);返回變量或標(biāo)號(hào)的偏移地址 SEG 變量|標(biāo)號(hào);返回變量或標(biāo)號(hào)的段地址 設(shè)ARRAY為一變量 MOV AX,SEG ARRAY MOV DS,AX MOV BX,OFFSET ARRAY,“SEG ARRAY”和“OFFSET ARRAY”稱為地址表達(dá)式。前面介紹的算術(shù)運(yùn)算符也可構(gòu)成地址表達(dá)式。 如 “ARRAY2”,“ARRAY-2”。,38,類型操作符(1),2.類型操作符 對變量或標(biāo)號(hào)的類型屬性進(jìn)行操作。 PTR/THIS/LABEL/SHORT/TYPE/SIZEOF/LENGTHOF

30、PTR 類型名 PTR 變量|標(biāo)號(hào);給變量或標(biāo)號(hào)指定類型屬性 BYTE、WORD、DWORD、;NEAR、FAR; STRUCT、RECORD等定義的類型。 例如 MOV AL,BYTE PTR W_VAR MOV AX,WORD PTR B_VAR JMP FAR PTR N_LABEL JMP NEAR PTR F_LABEL,39,類型操作符(2),:給當(dāng)前偏移地址指定一種類型屬性,同時(shí) 定義了一個(gè)名字。 名字 EQU THIS 類型名,d01 dw 2055h ;設(shè)=0008H b_var equ this byte ;不占存儲(chǔ)空間 w_var dw 10 dup(0) ;w_var仍

31、然指向0008H,當(dāng)前偏移地址為0008H,“THIS”給它指定了一個(gè)類 型屬性:BYTE,并借助EQU為它定義了名字:b_var。 第三條語句使0008H單元具有了另一個(gè)名字和另一 種屬性。對0008H單元,兩個(gè)名字、兩種屬性都可用。 注意: 要借助EQU偽指令。 與下一條偽指令合用。,THIS,40,:同“EQU THIS” L1 LABEL FAR ;不占內(nèi)存 L2:MOV AX,2055H MOV指令所占單元(即MOV指令)具有兩個(gè)標(biāo)號(hào)、 兩種屬性。 L1 EQU THIS FAR L2:MOV AX,2055H,LABEL,類型操作符(3),:設(shè)定標(biāo)號(hào)為短轉(zhuǎn)移,只用于JMP指令。 轉(zhuǎn)

32、移范圍為-128+127字節(jié)(相對于JMP的下一條指令) JMP SHORT L1,SHORT,41,類型操作符(4),TYPE 變量/標(biāo)號(hào) ;返回變量或標(biāo)號(hào)的類型屬性值(數(shù)字量) 變量: BYTE WORD DWORD FWORD 返回值 1 2 4 6 標(biāo)號(hào): SHORT NEAR FAR 返回值 FF01H FF02H FF05H MOV AL,TYPE W_VAR ;MOV AL,2 MOV AX,TYPE L2 ;MOV AX,0FF02H,42,類型操作符(5),LENGTHOF 變量;返回變量的數(shù)據(jù)項(xiàng)數(shù) 如 D01 DW 25H,2050H,55AAH LENGTHOF D01=

33、3 MOV CX,LENGTHOF D01;MOV CX,3 SIZEOF 變量;=(LENGTHOF 變量)*(TYPE 變量) SIZEOR D01=32=6 MOV CX,SIZEOF D01;MOV CX,6,43,類型操作符(5),例 3.4 屬性及應(yīng)用 .model small .stack .data V_byte equ this byte V_word dw 3332h,3735h Target dw 5 dup(20h) Crlf db 0dh,0ah, $ Flag db 0 N_point dw offset s_label .code .startup mov al,

34、byte ptr v_word dec al mov v_byte ,al;v_word=3331h,44,類型操作符(6),N_label: cmp flag,1 ;flag單元=0 jz s_label inc flag ;flag=1 jmp short n_label S_label: cmp flag,2 ;flag=1 jz next inc flag ;flag=2 jmp n_point ;等同于jmp s_label Next: mov ax,type v_word ;ax=0002h mov cx,lengthof target;5個(gè)數(shù)據(jù)項(xiàng),cx=5 mov si,offs

35、et target W_again: mov si,ax inc si inc si loop w_again;對target填充5個(gè)字:0002h,45,類型操作符(7)(end),mov cx,sizeof target;cx=10 mov al,? mov di,offset target B_again: mov di,al inc di loop b_again ;對target填充10個(gè)? mov dx,offset v_word mov ah,9 int 21h ;顯示結(jié)果為1357? .exit 0 end,返回 3.2,返回第三章,46,3.3 (目錄)程序段的定義和屬性,3

36、.3 程序段的定義和屬性 3.3.1 DOS的程序結(jié)構(gòu) EXE程序和COM程序 3.3.2 簡化段定義格式 存儲(chǔ)模式/簡化段定義 程序開始/程序結(jié)束/匯編結(jié)束 3.3.3 完整段定義格式 完整段定義/指定段寄存器 段組偽指令/段順序偽指令,返回第三章,47,3.3.1 DOS的程序結(jié)構(gòu)(EXE),3.3.1 DOS的程序結(jié)構(gòu) 1.EXE程序 由多個(gè)段組成;長度可大于64KB; (磁盤上的)EXE文件: 文件頭:控制信息、重定位信息; 裝入模塊:程序本身。,調(diào)整示意圖,48,DOS的程序結(jié)構(gòu)(COM),2.COM程序 代碼段、數(shù)據(jù)段以及堆棧段 (附加段)合并成一個(gè)段,長 度不超過64KB。 磁盤

37、上的COM文件是內(nèi)存的完 全映象,不含附加信息。,CS=DS=ES=SS,1)所有段地址都指向PSP的段 地址; 2)執(zhí)行起點(diǎn):CS:0100 處。 3)SP自動(dòng)設(shè)為0FFFEH(64K的 最后一個(gè)字單元。且將0FFFEH 和0FFFFH單元設(shè)為0。,返回 3.3,49,3.3.2 簡化段定義格式,3.3.2 簡化段定義格式 簡化段定義標(biāo)準(zhǔn)格式: .model small .stack .data .code .startup .exit 0 end,;子程序代碼,;程序代碼,;數(shù)據(jù)定義,程序開始偽指令,程序結(jié)束偽指令,存儲(chǔ)模式偽指令,匯編結(jié)束偽指令,50,存儲(chǔ)模式,1. 存儲(chǔ)模式偽指令 .m

38、odel 存儲(chǔ)模式,語言類型,系統(tǒng)類型,堆棧選項(xiàng) 使用簡化段定義格式時(shí),必須使用。 必須位于所有段定義語句之前。 7種不同的存儲(chǔ)模式: 只介紹下面兩種 TINY(微型模式) SMALL(小型模式),默認(rèn)參數(shù): DOS、SS=DS,混合編程時(shí)使用,51,TINY 模式,微型模式是MASM 6.0才引入的 用于創(chuàng)建COM類型程序 用微型模式編寫匯編語言程序時(shí),所有的段地址寄存器都被設(shè)置為同一值 這意味著代碼段、數(shù)據(jù)段、堆棧段都在同一個(gè)段內(nèi),不大于64KB;訪問操作數(shù)或指令都只需要使用16位偏移地址,TINY 微型模式,52,SMALL 模式,一般的程序(例如本書的絕大多數(shù)程序示例和習(xí)題)都可用這種

39、模式 在小型模式下,一個(gè)程序至多只能有一個(gè)代碼段和一個(gè)數(shù)據(jù)段,每段不大于64KB 這里的數(shù)據(jù)段是指數(shù)據(jù)段、堆棧段和附加段的總和,它們共用同一個(gè)段基址,總長度不可超過64KB;因此小模式下程序的最大長度為128KB 訪問操作數(shù)或指令都只需要使用16位偏移地址;這意味著諸如指令轉(zhuǎn)移、程序調(diào)用以及數(shù)據(jù)訪問等都是近屬性(NEAR),即小型模式下的調(diào)用類型和數(shù)據(jù)指針缺省分別為近調(diào)用和近指針,SMALL小型模式,53,簡化段定義,2.簡化段定義偽指令 .stack 大小:創(chuàng)建堆棧段,段名:STACK .STACK 512;創(chuàng)建512字節(jié)的堆棧段。 .STACK ;創(chuàng)建1024字節(jié)(默認(rèn))的堆棧段。 .DA

40、TA ;創(chuàng)建數(shù)據(jù)段,段名:_DATA .DATA ? ;數(shù)據(jù)段,無初值變量專用(_BSS) .CONST ;只讀的常量數(shù)據(jù)段(CONST) .CODE 段名;創(chuàng)建代碼段,在SMALL模式下, 默認(rèn)的段名為:_TEXT 沒有段定義結(jié)束語句,下一個(gè)段的開始,就是本段的結(jié)束。,54,預(yù)定義符號(hào), 關(guān)于預(yù)定義符號(hào) 前面已經(jīng)介紹,用簡化段定義格式定義段時(shí),各段 都有默認(rèn)的段名,如_text、_data等。為方便編程時(shí)引 用,MASM設(shè)置了一些預(yù)定義符號(hào),如 CODE、DATA、 STACK等,這些預(yù)定義符號(hào)可以在程序中使用。 如: MOV AX,STACK MOV SS, AX MOV AX, DATA

41、 MOV DS, AX 其中DATA是數(shù)據(jù)段段組的名字,即將數(shù)據(jù)段、 無初值數(shù)據(jù)段、常量數(shù)據(jù)段和堆棧段合并成一個(gè)段組 (DGROUP),該段組命名為DATA。,55,程序開始,3.程序開始偽指令 .STARTUP ;按CPU類型、存儲(chǔ)模式、操作系統(tǒng) 和堆棧類型,產(chǎn)生程序開始執(zhí)行的代碼;指定了程 序開始執(zhí)行的起點(diǎn)。在DOS環(huán)境下,設(shè)置DS,調(diào)整SS 和SP的值。 在SMALL模式,8086CPU,匯編得到的啟動(dòng)代碼: mov dx,dgroup shl bx,1 ;(SS-DS)*16 mov ds,dx;設(shè)置DS shl bx,1 ;=數(shù)據(jù)占用的 mov bx,ss cli ;字節(jié)數(shù) sub

42、bx,dx;SS-DS mov ss,dx;使SS=DS shl bx,1 add sp,bx;SP+字節(jié)數(shù) shl bx,1 sti,56,數(shù)據(jù)段、堆棧段調(diào)整示意圖,數(shù)據(jù)段、堆棧段調(diào)整示意圖:,MOV AX,DGROUP MOV DS,AX,使SS=DS SP+(SS-DS)*16SP,57,程序結(jié)束,4.程序結(jié)束偽指令 .EXIT 返回?cái)?shù)碼 產(chǎn)生終止程序執(zhí)行返回操作系統(tǒng)的指令代碼,可 選參數(shù)為返給操作系統(tǒng)的一個(gè)數(shù)碼,通常用0表示沒有 錯(cuò)誤,因而通常的用法是:.EXIT 0 。 產(chǎn)生代碼:mov ax,4c00h int 21h 5.匯編結(jié)束偽指令 END 標(biāo)號(hào) 標(biāo)號(hào)指出程序的開始執(zhí)行點(diǎn)。當(dāng)

43、不使用.STARTUP 時(shí),主程序的END偽指令必須給出標(biāo)號(hào);非主程序模塊 一定不能給。,58,COM程序示例,例 3.5 COM程序示例 .model tiny ;只能是TINY模式 .code ;只有一個(gè)代碼段 .startup ;等效于ORG 100H mov dx,offset string mov ah,09 int 21h ;顯示信息 mov ah,01 int 21h ;等待按鍵 mov ah,02 mov dl,07 ;“鳴笛”的ASCII碼 int 21h ;鳴笛 .exit 0 string db Press any key to continue !$ end ;數(shù)據(jù)安排

44、在代碼后面,返回 3.3,59,3.3.3 完整段定義格式,3.3.3 完整段定義格式 1.段定義偽指令 段名 SEGMENT 定位 組合 段字 類別 段名 ENDS 定位屬性:指定邏輯段的起始地址 BYTE:為下一個(gè)可用的字節(jié)地址(xxxx xxxxB) WORD:為下一個(gè)可用的偶數(shù)地址(xxxx xxx0B) DWORD:下一個(gè)可被4整除的地址(xxxx xx00B) PARA:下一個(gè)可被16整除的地址(xxxx 0000B) PAGE:下一個(gè)可被256整除的地址(0000 0000B),60,完整段定義格式,默認(rèn)的定位屬性為PARA。簡化段定義中,代碼段和 數(shù)據(jù)段默認(rèn)的定位屬性為WORD

45、,堆棧段為PARA。 組合屬性:指定段與段之間的關(guān)系。 通常在多模塊設(shè)計(jì)時(shí)使用,單模塊下,除堆棧段必 須使用組合屬性 STACK 外,其它段使用默認(rèn)值即可。 完整段定義時(shí),默認(rèn)的組合屬性為PRIVATE,意思是各段 相互獨(dú)立,不與其它段合并,各段都有自己的段地址; 簡化段定義時(shí),默認(rèn)的組合屬性為PUBLIC,意思是告訴 連接程序把本段與所有同名的其它段相鄰地連接在一起, 并合并為同一個(gè)段,共用一個(gè)段地址。,61,段字屬性、類別屬性,段字屬性(use16use32): MASM5.0以后版本增加。對8086使用默認(rèn)值(16位段),對32位CPU默認(rèn)采用32位段,當(dāng)然,也可以設(shè)置成16位段。 類別

46、屬性:類別名。類別名相同的段相鄰連接但各有各的段地址。通常使用code,date和stack等類別名,以保持所有代碼和數(shù)據(jù)的連續(xù)。 注釋:要把多個(gè)段(如代碼段)連接成一個(gè)物理段,即共用一個(gè)段地址,僅僅使類別名相同是作不到的,類別名相同,只能作到“相鄰連接”。詳細(xì)內(nèi)容在第五章介紹。,62,指定段寄存器,2.指定段寄存器偽指令 ASSUME 段寄存器:段名,段寄存器:段名 建立段寄存器與段之間的缺省關(guān)系,改變這種缺省關(guān)系可使用段跨越前綴。 如 ASSUME CS:CODE,DS:DATA ASSUME 段寄存器:NOTHING 對指令給出的段寄存器取消已經(jīng)指定的缺省關(guān)系。 注意:ASSUME偽指令

47、并不能為段寄存器賦值。,63,段組偽指令,3.段組偽指令 組名 GROUP 段名,段名 將多個(gè)同類但不同名的段合并為一個(gè)不超過64KB 的物理段,并使用組名統(tǒng)一訪問它??衫斫鉃榻M合屬 性PUBLIC的補(bǔ)充。 .MODEL SMALL具有下面語句的作用: dgroup GROUP _data,_bss,stack,64,段順序偽指令,4.段順序偽指令 設(shè)置段在內(nèi)存中的實(shí)際存放順序。 .SEG ;按源程序中的書寫順序。 .DOSSEG ;按DOS標(biāo)準(zhǔn)中規(guī)定的順序,即代碼段、 ;數(shù)據(jù)段、堆棧段。 .ALPHA ;按段名的字母順序。 完整段定義格式默認(rèn)為SEG; 簡化段定義格式默認(rèn)為DOSSEG。,6

48、5,例 3.7/1,例 3.7: 按要求寫出適當(dāng)?shù)亩味x:數(shù)據(jù)段起始于字邊界,連接時(shí)同名邏輯段連接成一個(gè)物理段,類別名為data;堆棧設(shè)置在數(shù)據(jù)段內(nèi),起始地址為DS:100處,大小為200個(gè)字,sp指向棧頂;堆棧區(qū)后面為100個(gè)字的數(shù)組array;代碼段cseg將100個(gè)字壓入自設(shè)的堆棧。 dsegsegment word public data org 100h dw 200 dup(?) topsp equ this word array dw 100 dup(5868h) dsegends,66,例 3.7/2,csegsegment code assume cs:cseg,ds:dse

49、g,ss:dseg start:mov ax,dseg mov ds,ax mov ss,ax mov sp,offset topsp mov ah,4ch int 21h csegends end start,67,例3.6/1,例3.6 在程序中使用段組合 stacksegsegment stack db 256 dup(?) stacksegends data1 segment word public const const1dw 100 data1 ends data2 segment word public vars var1dw ? data2 ends datagroup gro

50、up data1,data2;進(jìn)行段組合 codeseg segment para public code assume cs:codeseg,ds:datagroup,ss:stackseg,68,/2,start:mov ax,datagroup mov ds,ax ;對段組尋址 mov ax,const1;相當(dāng) mov ax,0000, ax=100 mov var1,ax ;var1=100 mov ax,offset var1;ax=2 mov ax,offset data1;后跟段組中的某個(gè)段名, 表示該段最后一個(gè)字節(jié)后面字節(jié)相對于段組的偏移地 址,也就是var1的偏移地址,ax=

51、2 mov ax,offset data2;取的是var1后面一個(gè)字 節(jié)的偏移地址:ax=4,69,/3(end),assume ds:data2 mov ax,data2 mov ds,ax mov ax,var1 ;ax=100 mov ax,offset var1;ax=2,仍然是相對段組 ;的偏移地址 mov ax,4c00h int 21h codeseg ends end start,返回 3.3,返回第三章,70,3.4 (目錄)復(fù)雜數(shù)據(jù)結(jié)構(gòu),3.4 復(fù)雜數(shù)據(jù)結(jié)構(gòu) DB、DW 等偽指令用來定義變量,變量的數(shù)據(jù)類型 是單一的字節(jié)、兩字節(jié)、四字節(jié)等,稱其為簡單數(shù)據(jù)結(jié) 構(gòu);將若干簡單數(shù)

52、據(jù)結(jié)構(gòu)的變量組合在一起,形成一個(gè) 復(fù)合型數(shù)據(jù),再給這個(gè)復(fù)合型數(shù)據(jù)起一個(gè)名字,就得到 了一種新的數(shù)據(jù)類型,新數(shù)據(jù)類型的用法和DB、DW等偽 指令的用法相似。 3.4.1 結(jié)構(gòu) 結(jié)構(gòu)類型說明、變量定義、引用 3.4.2 記錄 記錄類型說明、變量定義、引用,回第三章,71,3.4.1結(jié)構(gòu)類型的說明1,3.4.1 結(jié)構(gòu) 1.結(jié)構(gòu)類型的說明 結(jié)構(gòu)名 STRUCT(5.0為STRUC) ;數(shù)據(jù)定義語句 結(jié)構(gòu)名 ENDS 結(jié)構(gòu)名自己定義 結(jié)構(gòu)體為各種數(shù)據(jù)類型的數(shù)據(jù)定義語句 結(jié)構(gòu)體前后為一對偽指令語句,72,結(jié)構(gòu)類型說明2,student struct sid dw ? sname db abcdefgh m

53、ath db 0 english db 0 student ends 說明了一個(gè)結(jié)構(gòu)類型,結(jié)構(gòu)類型名為:student, 為該結(jié)構(gòu)類型的標(biāo)識(shí);結(jié)構(gòu)類型中所含的變量稱為結(jié)構(gòu) 字段;相應(yīng)的變量名 稱為字段名。 顯然,結(jié)構(gòu)中的元素可以是類型不同的變量。 字段數(shù)量不限;字段可以有名或無名; 可以有初值或無初值;可以獨(dú)立存取。,73,結(jié)構(gòu)變量,2.結(jié)構(gòu)變量的定義 結(jié)構(gòu)說明只是說明了一種新的數(shù)據(jù)類型,并沒有定 義采用這種數(shù)據(jù)類型的變量,也就沒有分配內(nèi)存(如同 DB、DW等,未定義變量,也就不分配內(nèi)存)。 使用結(jié)構(gòu)預(yù)置語句定義結(jié)構(gòu)變量: 變量名 結(jié)構(gòu)類型名 ,74,結(jié)構(gòu)變量,結(jié)構(gòu)變量舉例 stu1 stud

54、ent ;定義變量 stu2 student student 100 dup();預(yù)留100個(gè)結(jié)構(gòu)變量空間 初值按結(jié)構(gòu)說明的順序?qū)?yīng);如某字段的值為空, 用逗號(hào)分割;初值表中為空的字段保持結(jié)構(gòu)說明時(shí)指定 的初值。 比較:VAR DB 2,4,6,8 DB 100 DUP(?) “student”的作用和“DB”的作用是相同的。,75,結(jié)構(gòu)變量的引用,3.結(jié)構(gòu)變量及其字段的引用 引用結(jié)構(gòu)變量:結(jié)構(gòu)變量名。 引用結(jié)構(gòu)變量的字段:結(jié)構(gòu)變量名.字段名。 例3.8 定義含有100個(gè)PERSON結(jié)構(gòu)數(shù)組的數(shù)據(jù)段,結(jié)構(gòu) 中包括編號(hào)、姓名、性別和出生日期,并賦值編號(hào)。 .model small .stack

55、256 .data person struct number dw 0 pname db abcdefgh sex db 0 birthday db mm/dd/yyyy person ends ;array:第一個(gè)(person) array person 100 dup();結(jié)構(gòu)數(shù)據(jù)的符號(hào)地址,76,舉例結(jié)構(gòu)變量(e),.code .startup mov bx,offset array mov ax,1 sub si,si mov cx,length array mov dx,type array again:mov bx+si.person.number,ax inc ax add s

56、i,dx loop again .exit 0 end,結(jié)構(gòu)數(shù)據(jù) 的偏移地址,無結(jié)構(gòu)變量名,用結(jié)構(gòu)類型名,返回3.4,77,3.4.2記錄 記錄類型的說明1,3.4.2 記錄 所謂“記錄”,是將一個(gè)字節(jié)或一個(gè)字劃分成若干個(gè) “位段”,并給每個(gè)位段起一個(gè)名字,使得程序中可以使 用名字訪問“位段”。記錄中的基本存儲(chǔ)單位是bit,即 “位段”是由一個(gè)或若干個(gè)二進(jìn)制位組成的。 1.記錄類型的說明 記錄名 RECORD 位段 ,位段 記錄名是該記錄類型的標(biāo)識(shí)(如同DB是字節(jié)類型 的標(biāo)識(shí))。位段說明了該記錄類型的數(shù)據(jù)結(jié)構(gòu)。,78,記錄類型的說明2,位段的格式 位段名:位數(shù)=表達(dá)式 如:year:4,sex

57、:1=0,marriage:1=1 位段名分別為year,sex,marriage; 位數(shù)說明該位段占用的二進(jìn)制位數(shù):year占用4 位,sex占用1位,marriage占用1位; 表達(dá)式給位段賦值,可以省略:位段year沒有賦 值,位段sex被賦值0,位段marriage被賦值1。,79,記錄類型的說明3,year:4,sex:1=0,marriage:1=1 整個(gè)記錄的長度為所有位段占用位數(shù)的和,為1 16位。 記錄長度小于一個(gè)字節(jié)時(shí),按一個(gè)字節(jié)匯編,長度 為916位時(shí),按一個(gè)字匯編。 給位段分配“位”時(shí),位段從最右邊開始,二進(jìn)制位 從最低位開始。如上述3個(gè)位段總長度為6位,按一個(gè)字 節(jié)匯

58、編,marriage占D0,sex占D1,year占D2D5。 不用的D6、D7為0。 完整的記錄說明: person RECORD year:4,sex:1=0,marriage:1=1,80,記錄變量的定義,2.記錄變量的定義 說明了一種新的數(shù)據(jù)類型(記錄類型)之后,即可 定義該類型的變量: 記錄變量名 記錄類型名 位段初值表為各位段賦值,用逗號(hào)分隔,與說明中的位 段次序按順序?qū)?yīng);不賦初值的位段逗號(hào)不可省略,其 值采用說明時(shí)賦的值。 zhang person ;字節(jié)值00101010b wang person ;字節(jié)值00011100b,81,記錄變量引用和記錄操作符,3.記錄變量的引用和記錄操作符 1)記錄變量的引用 MOV AL,zhang / MOV AL,wang 2)記錄操作符 位段名:返回該位段在記錄中的位置,也就是該位 段移到D0的移位次數(shù)。 MOV CL,year;C

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論