日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

c51汇编语言如何定义全局变量_汇编语言期末复习笔记(七)

發(fā)布時(shí)間:2023/12/19 编程问答 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 c51汇编语言如何定义全局变量_汇编语言期末复习笔记(七) 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

第三章 匯編語言程序格式(上)

寫在前面:這一部分開始復(fù)習(xí)匯編語言程序格式,包括參數(shù)的表達(dá)、變量的定義等。如有錯(cuò)誤歡迎指正,感謝!

1.硬指令和偽指令

  • 硬指令:使CPU產(chǎn)生動(dòng)作,并在程序中執(zhí)行時(shí)才處理的語句。
  • 偽指令:不產(chǎn)生CPU動(dòng)作,在程序執(zhí)行前由匯編程序處理的說明性語句,例如:數(shù)據(jù)說明、變量定義等等。
  • 偽指令與具體的處理器類型無關(guān),但與匯編程序的版本有關(guān)。

2.執(zhí)行性語句和說明性語句

  • 執(zhí)行性語句:由硬指令構(gòu)成的語句,它通常對應(yīng)一條機(jī)器指令,出現(xiàn)在程序的代碼段中。
  • 說明性語句:由偽指令構(gòu)成的語句,它通常知識匯編程序如何匯編源程序。

3.標(biāo)號、名字和標(biāo)識符

  • 標(biāo)識符:一般最多由31個(gè)字母、數(shù)字即規(guī)定的特殊符號(如_、$、?、@)組成,不能以數(shù)字開頭。默認(rèn)情況下,匯編程序不區(qū)分大小寫。
  • 標(biāo)號:是反映硬指令位置(邏輯地址)的標(biāo)識符,后跟一個(gè)冒號分隔。
  • 名字:是反映偽指令位置(邏輯地址)和屬性的標(biāo)識符,后跟空格或者制表符分隔,沒有冒號。
  • 一個(gè)程序中,每個(gè)標(biāo)識符的定義時(shí)唯一的,還不能是匯編語言采用的保留字。

4.保留字

保留字是匯編程序已經(jīng)利用的標(biāo)識符,主要有:

  • 硬指令助記符:MOV、ADD等
  • 偽指令助記符:DB、EQU等
  • 操作符:OFFSET、PTR等
  • 寄存器名:AX、CS等
  • 預(yù)定義符號:@data等

5.操作數(shù)和參數(shù)

  • 處理器的指令的操作數(shù)可以是立即數(shù)、寄存器和存儲(chǔ)單元。
  • 偽指令的參數(shù)可以是常數(shù)、變量名、表達(dá)式等,可以有多個(gè),參數(shù)之間用逗號隔開。

6.一個(gè)完整的匯編語言程序

完整的匯編語言程序由段組成。

一個(gè)匯編語言源程序可以包含若干個(gè)代碼段、數(shù)據(jù)段、附加段或堆棧段,段與段之間可隨意排列。

需獨(dú)立運(yùn)行的程序必須包含一個(gè)代碼段,并指示程序執(zhí)行的起點(diǎn),一個(gè)程序只有一個(gè)起始點(diǎn)。

所有的可執(zhí)行語句必須放到某一個(gè)代碼段里面,說明性語句可根據(jù)需要位于任一段內(nèi)。

7.常數(shù)

  • 十、十六、二、八進(jìn)制常數(shù)。
  • 用單引號或者雙引號括起來的每個(gè)字符或者多個(gè)字符,是字符串常數(shù)。
  • 符號常數(shù):

①符號名 EQU 數(shù)值表達(dá)式

②符號名 EQU <字符串>

③符號名 = 數(shù)值表達(dá)式

;符號定義 DosWriteChar equ 2 CarriageReturn = 13 CallDOS equ <int 21h> ;符號應(yīng)用,兩側(cè)等價(jià) mov ah,2 ;mov ah,DosWriteChar mov dl,13 ;mov dl,CarriageReturn int 21h ;CallDOS

8.數(shù)值表達(dá)式

數(shù)值表達(dá)式一般是由運(yùn)算符連接的各種常數(shù)所構(gòu)成的表達(dá)式。

匯編程序在匯編過程中計(jì)算表達(dá)式最終得到一個(gè)數(shù)值。

由于在程序運(yùn)行前就得到了數(shù)值,所以程序運(yùn)行速度沒有變慢,但可讀性增強(qiáng)了。

MASM對除偽指令外各種匯編時(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

用于比較和測試符號數(shù)值。

MASM用0FFFFH(補(bǔ)碼-1)表示條件為真。用0000H表示條件為假。

  • 高低分離符:HIGH LOW HIGHWORD LOWWORD
mov ax,3*4+5 ;mov ax,17 or al,03h and 45h ;or al,01h mov al,0101b shl (2*2) ;mov al,0101 0000b mov bx,((PORT LT 5)AND 20) OR ((PORT GE 5)AND 30) ;當(dāng)PORT<5,mov bx,20 否則 mov bx,30 mov ah,HIGH 8765h ;mov ah,87h dd_value equ 0ffff1234h mov ax,LOWWORD dd_value ;mov ax,1234h

10.運(yùn)算符的優(yōu)先級

11.地址性參數(shù)

  • 指令參數(shù)還有地址型,它的主要形式是標(biāo)號和名字(變量名、短命、過程名等)。
  • 硬指令的操作數(shù)有存儲(chǔ)單元;存儲(chǔ)單元就應(yīng)該用地址性參數(shù)(存儲(chǔ)器操作數(shù))表示。

12.變量定義偽指令

變量定義偽指令為變量申請固定長度的存儲(chǔ)空間,并可同時(shí)將相應(yīng)的存儲(chǔ)單元初始化。

變量名 偽指令助記符 初值表
  • 變量名:為用戶自定義的標(biāo)識符,表示初值表首元素的邏輯地址,用這個(gè)符號表示地址,常稱為符號地址。變量名可以沒有,沒有的時(shí)候匯編程序直接為初值表分配空間,無符號地址。設(shè)置變量名方便存取它指示的存儲(chǔ)單元。
  • 初值表:用逗號分隔的參數(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á)的偏移地址。
;ORG 參數(shù) ORG 100h ;從100h處安排程序或者指令 ORG $+10 ;使偏移地址+10,即跳過當(dāng)前偏移地址,$在MASM中表示偏移地址值 EVEN ;從偶地址開始 ALIGN ;從n的整數(shù)倍地址開始

13.變量和標(biāo)號的屬性

標(biāo)號和名字一經(jīng)定義便具有以下兩類三種屬性:

  • 地址屬性:

①段值:標(biāo)號和名字對應(yīng)存儲(chǔ)單元的段地址。

②偏移值:標(biāo)號和名字對應(yīng)存儲(chǔ)單元的偏移地址。

  • 類型屬性:

標(biāo)號、子程序名的類型可以是NEAR、FAR,分別表示段內(nèi)或者段間。變量名的類型可以是BYTE、WORD、DWORD等。

14.地址操作符

取得名字或者標(biāo)號的段地址和偏移地址兩個(gè)屬性。

  • []將括起的表達(dá)式作為存儲(chǔ)地地址。
  • $當(dāng)前偏移地址。
  • :采用指定的段地址寄存器。
  • OFFSET返回名字或者標(biāo)號的偏移地址。
  • SEG返回名字或者標(biāo)號的段地址。
org $+10 array db 45,45h.codemov ax,seg arraymov ds,axmov bx,offset array ;等價(jià)于 lea bx,arraymov cl,array+4 ;等效于 mov cl,array[4]mov ax,es:[2000h]

15.類型操作符

類型操作符對名字或標(biāo)號的類型屬性進(jìn)行有關(guān)設(shè)置。

  • 類型名 PTR 名字/標(biāo)號

PTR操作符使名字或標(biāo)號具有指定的類型,臨時(shí)改變名字或者標(biā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)號
  • THIS 類型名

利用THIS說明的操作數(shù)具有匯編時(shí)的當(dāng)前邏輯地址,但具有指定的類型。即THIS說明的操作數(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_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)號

指定標(biāo)號作為-128~+127字節(jié)范圍內(nèi)的短轉(zhuǎn)移。超出范圍則出錯(cuò)。

  • TYPE 名字/標(biāo)號

返回表明名字或標(biāo)號類型的一個(gè)字量數(shù)值。對于字節(jié)、字和雙字分別返回1,2,4;對短、近和遠(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汇编语言如何定义全局变量_汇编语言期末复习笔记(七)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。