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