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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

汇编语言从入门到精通-4标识符和表达式

發布時間:2023/12/20 编程问答 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 汇编语言从入门到精通-4标识符和表达式 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

標識符和表達式

  標識符和表達式是程序設計經常用到的兩個基本概念。在用高級語言進行程序設計時,如果程序要對某個變化的量進行處理時,通常都要對該變化量定義一個具有某種數據類型的符號名,用該符號名也就等于使用了該變化量。在匯編語言中,也是如此,所不同的是它們的說明和引用方式不同。

?

4.1 標識符

  在匯編語言中,標號、內存變量名、子程序名和宏名等都是標識符,它一般最多由31字母數字規定的特殊字符(?@_$)等組成,并且不能用數字開頭。通常情況下,匯編語言不區分標識符中字母的大小寫。

  和高級語言的變量名一樣,一般要求標識符盡可能取得有點含義,這會大大改善程序的可讀性,并有助于對程序的理解。但標識符不能是匯編語言的保留字,匯編語言的保留字主要是指:指令助憶符、偽指令定義符、寄存器名以及一些具有特殊含義的字符串等。

  例如:MSG1、ERRMSG2、ASC1、asc2等是合法的標識符,而1a、ah、mov等就不是合法的標識符。

  試比較ABCDH和0ABCDH之間的差異。前者是標識符,而后者是十六位進制數值。

?

4.2 簡單內存變量的定義

  在編程序時,我們往往要根據程序的需要定義一些內存單元。在高級語言程序中,要給存儲單元取一個符號名,然后通過引用該符號名來訪問其所對應的存儲單元,而在匯編語言程序中要靈活一些,它可以給存儲單元取符號名,也可以不取符號名。當給存儲單元取符號名時,則可通過該符號名來訪問其對應的存儲單元;當不給存儲單元取符號名時,則可通過存儲單元的偏移量(有效地址)來訪問它。

  匯編語言中,常見的數據類型有字節、字和雙字等。下面介紹如何定義各種整型類型的內存變量,有關浮點類型變量的定義方式將在第11章中介紹

4.2.1 內存變量定義的一般形式

  定義數據變量語句是在程序中經常使用的偽指令語句,其一般格式如下:

    [變量名]  數據定義符  表達式1[, 表達式2, …, 表達式n]  ;注釋

  該定義格式的主要解釋如下:

    1、變量名必須是一個合法的標識符,它可以寫,也可以不寫;
    2、 數據定義符用于確定內存單元的數據類型,常用的定義符有:DB、DW和DD等;
    3、 表達式是定義內存單元時的初值表達式,一個定義語句可以有多個初值表達式,各表達式之間必須用逗號‘,’分開;如果某個存儲單元沒有初值表達式,則必須用一個問號‘?’來表示;
    4、 在定義語句的后面可以書寫注釋內容,也可以不寫。

  在定義變量時,雖然可以不寫變量名,但我們建議還是要寫,因為不寫變量名,就意味著只能用內存單元的偏移量來訪問它。這時,一旦內存單元的偏移量發生變化,那么,程序中的所有引用都要修改,這不僅增加了程序維護的工作量,而且也容易因遺漏修改而出錯。

4.2.2 字節變量

  定義字節變量的定義符為DB/BYTE(Define Byte),每個字節只占一個字節單元。其中:BYTEMASM 6.0及其以后版本的數據類型說明符,隨后的其它類型說明符同此說明。

  例如:

    COUNTER  DB 6
          DB 'A', 'D', 0Dh, '$'

     ? TABLE  DB 1, 3, 5, 7, 9, 11

  上面的定義語句經匯編后所產生出的內存單元分配情況如圖4.1所示。圖中的數據是用十六進制表示的(以后也如此,不再說明),由引號括起來的字符在內存中是存放其ASCII碼值。所以,'D'和0Dh是不同的,前者是字符'D',后者是數值12的十六進制編碼。

圖4.1 內存單元的分配情況示意圖

  注意:在上例中,說明語句“DB 'A', 'D', 0Dh, '$'”之前并沒有給出變量名,但我們可以從前面的變量名COUNTER一直往后數,或從TABLE往前數,來訪問某存儲單元,因為它們是一片連續的存儲單元,這和高級語言的變量定義有點區別的。在高級語言中,我們一定要用某個標識符來說明變量,也必須用該變量名來訪問其所對應的存儲單元。

  用定義符DB還可定義一種特殊的數據形式——字符串。在定義字符串時,必須用成對的單引號或雙引號把所要的字符括起來,括號內字符的ASCII碼將依次存放在相應的字節單元內。例如:

    MSG1 DB 'I am a student.'

  該說明語句所對應的存儲單元分布如下所示。為了看起來方便,并沒有用字符的ASCII碼來存放在相應的存儲單元內,而直接用該字符,請不要引起誤解。

'I'' ''a''m'' ''a'' ''s''t''u''d''e''n''t'

  上面的例子也可改寫為另一種等價的語句:

    MSG1 DB 'I', ' ', 'a', 'm', ' ', 'a', ' ', 's', 't', 'u', 'd', 'e', 'n', 't', '.'

  顯然,前者的說明要比后者方便得多,所以,在程序中都采用前者的書寫方式。

4.2.3 字變量

  定義字變量的定義符為DW/WORD(Define Word),每個字占用兩個連續的字節單元。

  例如:

    Word1 DW 89H, 1909H, -1
        DW 0abcdH, ?, 0

  上述定義的內存分配如下所示。

89000919FFFFCDAB----0000

  由于字變量的數據是按照“高高低低”的原則存于存儲單元之中的,而字節數據是按照排列順序存于存儲單元中的,所以,它們的存儲方式有所不同。

  試比較下面兩個定義的存儲順序,其中:41H和42H分別是'A'和'B'的ASCII碼。

    B1 DB 'AB'

    W1 DW 'AB'

41h42h42h41h

4.2.4 雙字變量

  定義雙字變量的定義符為DD/DWORD(Define Doubleword),每個雙字變量占用二個連續的字單元(四個字節)。

    DW1 DD 12345678H, ?
    DW2 DD 0abcd1243H

  上述定義的內存分配如下所示。

78563412--------4312CDAB

?

4.2.5 六字節變量
  定義六字節變量的定義符為DF/FWORD(Define Farword)。顧名思義,每個六字節變量占用六個連續的字節。

    DF1  DF 1234567890abH, -1
        DF 1abcd23H

上述定義的內存分配如下所示。

abH90H78H56H34H12H0FFH0FFH0FFH0FFH0FFH0FFH23hH0cdH0abH01H00H00H

(占6個字節)

?

4.2.6 八字節變量
  定義八字節變量的定義符為DQ/QWORD(Define Quadword)。同理,每個八字節變量占用八個連續的字節。

    DQ1 DQ 12345678H, 0H, -1234H
       DQ ?, 1238H, ?

第一個八字節常量12345678H在內存中的分配方式如下所示,其存儲原則與前面相同。其它八字節常量的存儲方式與此一致。

78

56341200000000

(占8個字節)

?

4.2.7 十字節變量
  定義十字節變量的定義符為DT/TBYTE(Define Tenbytes)。同理,每個十字節變量占用十個連續的字節。

    DT1 DT 12345678H, 0H, -1234H
    DT2 DT ?, -1H

第一個十字節常量12345678H在內存中的分配方式如下所示,它同樣按“高高低低”的原則來存儲。其它十字節常量的存儲方式與此一致。

78

563412000000000000

以上六個數據類型是匯編語言中最基本的數據類型,其中,前三個是在程序中經常使用的,后三個的使用頻率不太高。

?

轉載于:https://www.cnblogs.com/little-kwy/p/9744292.html

總結

以上是生活随笔為你收集整理的汇编语言从入门到精通-4标识符和表达式的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。