c51汇编语言如何定义全局变量_汇编语言期末复习笔记(七)
第三章 匯編語(yǔ)言程序格式(上)
寫在前面:這一部分開始復(fù)習(xí)匯編語(yǔ)言程序格式,包括參數(shù)的表達(dá)、變量的定義等。如有錯(cuò)誤歡迎指正,感謝!
1.硬指令和偽指令
- 硬指令:使CPU產(chǎn)生動(dòng)作,并在程序中執(zhí)行時(shí)才處理的語(yǔ)句。
- 偽指令:不產(chǎn)生CPU動(dòng)作,在程序執(zhí)行前由匯編程序處理的說(shuō)明性語(yǔ)句,例如:數(shù)據(jù)說(shuō)明、變量定義等等。
- 偽指令與具體的處理器類型無(wú)關(guān),但與匯編程序的版本有關(guān)。
2.執(zhí)行性語(yǔ)句和說(shuō)明性語(yǔ)句
- 執(zhí)行性語(yǔ)句:由硬指令構(gòu)成的語(yǔ)句,它通常對(duì)應(yīng)一條機(jī)器指令,出現(xiàn)在程序的代碼段中。
- 說(shuō)明性語(yǔ)句:由偽指令構(gòu)成的語(yǔ)句,它通常知識(shí)匯編程序如何匯編源程序。
3.標(biāo)號(hào)、名字和標(biāo)識(shí)符
- 標(biāo)識(shí)符:一般最多由31個(gè)字母、數(shù)字即規(guī)定的特殊符號(hào)(如_、$、?、@)組成,不能以數(shù)字開頭。默認(rèn)情況下,匯編程序不區(qū)分大小寫。
- 標(biāo)號(hào):是反映硬指令位置(邏輯地址)的標(biāo)識(shí)符,后跟一個(gè)冒號(hào)分隔。
- 名字:是反映偽指令位置(邏輯地址)和屬性的標(biāo)識(shí)符,后跟空格或者制表符分隔,沒有冒號(hào)。
- 一個(gè)程序中,每個(gè)標(biāo)識(shí)符的定義時(shí)唯一的,還不能是匯編語(yǔ)言采用的保留字。
4.保留字
保留字是匯編程序已經(jīng)利用的標(biāo)識(shí)符,主要有:
- 硬指令助記符:MOV、ADD等
- 偽指令助記符:DB、EQU等
- 操作符:OFFSET、PTR等
- 寄存器名:AX、CS等
- 預(yù)定義符號(hào):@data等
5.操作數(shù)和參數(shù)
- 處理器的指令的操作數(shù)可以是立即數(shù)、寄存器和存儲(chǔ)單元。
- 偽指令的參數(shù)可以是常數(shù)、變量名、表達(dá)式等,可以有多個(gè),參數(shù)之間用逗號(hào)隔開。
6.一個(gè)完整的匯編語(yǔ)言程序
完整的匯編語(yǔ)言程序由段組成。
一個(gè)匯編語(yǔ)言源程序可以包含若干個(gè)代碼段、數(shù)據(jù)段、附加段或堆棧段,段與段之間可隨意排列。
需獨(dú)立運(yùn)行的程序必須包含一個(gè)代碼段,并指示程序執(zhí)行的起點(diǎn),一個(gè)程序只有一個(gè)起始點(diǎn)。
所有的可執(zhí)行語(yǔ)句必須放到某一個(gè)代碼段里面,說(shuō)明性語(yǔ)句可根據(jù)需要位于任一段內(nèi)。
7.常數(shù)
- 十、十六、二、八進(jìn)制常數(shù)。
- 用單引號(hào)或者雙引號(hào)括起來(lái)的每個(gè)字符或者多個(gè)字符,是字符串常數(shù)。
- 符號(hào)常數(shù):
①符號(hào)名 EQU 數(shù)值表達(dá)式
②符號(hào)名 EQU <字符串>
③符號(hào)名 = 數(shù)值表達(dá)式
;符號(hào)定義 DosWriteChar equ 2 CarriageReturn = 13 CallDOS equ <int 21h> ;符號(hào)應(yīng)用,兩側(cè)等價(jià) mov ah,2 ;mov ah,DosWriteChar mov dl,13 ;mov dl,CarriageReturn int 21h ;CallDOS8.數(shù)值表達(dá)式
數(shù)值表達(dá)式一般是由運(yùn)算符連接的各種常數(shù)所構(gòu)成的表達(dá)式。
匯編程序在匯編過(guò)程中計(jì)算表達(dá)式最終得到一個(gè)數(shù)值。
由于在程序運(yùn)行前就得到了數(shù)值,所以程序運(yùn)行速度沒有變慢,但可讀性增強(qiáng)了。
MASM對(duì)除偽指令外各種匯編時(shí)處理的指令統(tǒng)稱為操作符。
9.運(yùn)算符
- 算術(shù)運(yùn)算符:+ - * / MOD
- 邏輯運(yùn)算符:AND OR XOR NOT
- 移位運(yùn)算符:SHL SHR
- 關(guān)系運(yùn)算符:EQ NE GT LT GE LE
用于比較和測(cè)試符號(hào)數(shù)值。
MASM用0FFFFH(補(bǔ)碼-1)表示條件為真。用0000H表示條件為假。
- 高低分離符:HIGH LOW HIGHWORD LOWWORD
10.運(yùn)算符的優(yōu)先級(jí)
11.地址性參數(shù)
- 指令參數(shù)還有地址型,它的主要形式是標(biāo)號(hào)和名字(變量名、短命、過(guò)程名等)。
- 硬指令的操作數(shù)有存儲(chǔ)單元;存儲(chǔ)單元就應(yīng)該用地址性參數(shù)(存儲(chǔ)器操作數(shù))表示。
12.變量定義偽指令
變量定義偽指令為變量申請(qǐng)固定長(zhǎng)度的存儲(chǔ)空間,并可同時(shí)將相應(yīng)的存儲(chǔ)單元初始化。
變量名 偽指令助記符 初值表- 變量名:為用戶自定義的標(biāo)識(shí)符,表示初值表首元素的邏輯地址,用這個(gè)符號(hào)表示地址,常稱為符號(hào)地址。變量名可以沒有,沒有的時(shí)候匯編程序直接為初值表分配空間,無(wú)符號(hào)地址。設(shè)置變量名方便存取它指示的存儲(chǔ)單元。
- 初值表:用逗號(hào)分隔的參數(shù)。主要由數(shù)值常數(shù)、表達(dá)式或?、DUP組成。其中,“?”表示初值不確定,即未賦初值;”DUP“表示重復(fù)初值——重復(fù)次數(shù) DUP(重復(fù)參數(shù))
- DB:定義字節(jié)偽指令
- DW:定義字偽指令
- DD:定義雙字偽指令
- DF、DQ、DT:定義三字、四字、十字節(jié)偽指令
- 定位偽指令:控制數(shù)據(jù)的偏移地址,將當(dāng)前偏移地址指針指向參數(shù)表達(dá)的偏移地址。
13.變量和標(biāo)號(hào)的屬性
標(biāo)號(hào)和名字一經(jīng)定義便具有以下兩類三種屬性:
- 地址屬性:
①段值:標(biāo)號(hào)和名字對(duì)應(yīng)存儲(chǔ)單元的段地址。
②偏移值:標(biāo)號(hào)和名字對(duì)應(yīng)存儲(chǔ)單元的偏移地址。
- 類型屬性:
標(biāo)號(hào)、子程序名的類型可以是NEAR、FAR,分別表示段內(nèi)或者段間。變量名的類型可以是BYTE、WORD、DWORD等。
14.地址操作符
取得名字或者標(biāo)號(hào)的段地址和偏移地址兩個(gè)屬性。
- []將括起的表達(dá)式作為存儲(chǔ)地地址。
- $當(dāng)前偏移地址。
- :采用指定的段地址寄存器。
- OFFSET返回名字或者標(biāo)號(hào)的偏移地址。
- SEG返回名字或者標(biāo)號(hào)的段地址。
15.類型操作符
類型操作符對(duì)名字或標(biāo)號(hào)的類型屬性進(jìn)行有關(guān)設(shè)置。
- 類型名 PTR 名字/標(biāo)號(hào)
PTR操作符使名字或標(biāo)號(hào)具有指定的類型,臨時(shí)改變名字或者標(biāo)號(hào)的類型。
類型名可以是BYTE/WORD/DWORD/FWORD/QWORD/TBYTE或者NEAR/FAR。
array dw 08fbh .code mov al,byte ptr array ;al=fbh jmp far ptr n_label ;n_label是在該段外的標(biāo)號(hào)- THIS 類型名
利用THIS說(shuō)明的操作數(shù)具有匯編時(shí)的當(dāng)前邏輯地址,但具有指定的類型。即THIS說(shuō)明的操作數(shù)具有下一個(gè)要分配的存儲(chǔ)單元的段值和偏移。
my_byte equ THIS byte w_var dw 08fbh ;my_byte指向的存儲(chǔ)單元是W_var .code mov al,my_byte ;al=fbh,按字節(jié)量訪問(wèn)w_varf_jump equ THIS far ;用f_jump為段間轉(zhuǎn)移 n_jump:mov ax,w_var jmp f_jump ;用段間轉(zhuǎn)移轉(zhuǎn)移到n_jump- SHORT 標(biāo)號(hào)
指定標(biāo)號(hào)作為-128~+127字節(jié)范圍內(nèi)的短轉(zhuǎn)移。超出范圍則出錯(cuò)。
- TYPE 名字/標(biāo)號(hào)
返回表明名字或標(biāo)號(hào)類型的一個(gè)字量數(shù)值。對(duì)于字節(jié)、字和雙字分別返回1,2,4;對(duì)短、近和遠(yuǎn)轉(zhuǎn)移分別返回ff01h,ff02h,和ff05h。
mov ax,TYPE w_var ;mov ax,2 mov ax,TYPE n_jump ;mov ax,0ff02h- SIZEOF返回整個(gè)變量占的字節(jié)數(shù)
- LENGTHOF返回整個(gè)變量的數(shù)據(jù)項(xiàng)數(shù)
SIZEOF=LENGTHOF×TYPE
感謝閱讀!
總結(jié)
以上是生活随笔為你收集整理的c51汇编语言如何定义全局变量_汇编语言期末复习笔记(七)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 服务器搭建
- 下一篇: contourf参数 python_Py