組合語言equ,關於彙編的EQU

時間 2022-04-30 20:34:31

1樓:飛天一狼

vap1 db 』12345』 ;定義var1為位元組資料型別 5個位元組

vap2 dw 10 dup(?) ;定義var2為字資料型別 10個字

len equ $-var1 ;符號定義 相當於len=$-var1 $為程式指標 這樣就得到了已定義資料的長度 長度為 10*2+5

彙編指令equ的作用?

2樓:迷你手工老張

equ是等值命令,count equ $-offset a 的意思是count=$-offset a。

彙編指令equ的作用如下。

1、用符號名代表字串 。用乙個具有一定含義的符號名定義某乙個較長的字串,在隨後的程式中就用該符號名。例如:

greeting equ "how are you!"

在該定義之後,就可使用符號名greeting來代表字串"how are you!"。

2、用符號名關鍵字或指令助憶符 。用乙個(組)程式設計師自己習慣的符號名來代替組合語言中的關鍵字或指令助憶符。但在此建議不要這樣做,因為程式的編寫者習慣,程式的其他閱讀者可能會覺得很彆扭。

例如:

move equ mov ;給指令mov取另乙個符號名move

counter equ cx ;給暫存器cx取乙個叫「計數器」的符號名

上面的定義只是給原來的助憶符mov和cx起了另乙個別名,而原來助憶符mov和cx仍然可以使用,所以,可編寫如下語句:

move ax, cx ;相當於指令:mov ax, cx

mov counter, bx ;相當於指令:mov cx, bx

擴充套件資料:

彙編指令邏輯運算——

and 與運算。

or 或運算。

xor 異或運算。

not 取反。

test 測試。(兩運算元作與運算,僅修改標誌位,不回送結果)。

shl 邏輯左移。

sal 算術左移。(=shl)。

shr 邏輯右移。( 每位右移, 低位進 cf, 高位補 0)。

sar 算術右移。(每位右移, 低位進 cf, 高位不變)。

rol 迴圈左移。

ror 迴圈右移。

rcl 通過進製的迴圈左移。

rcr 通過進製的迴圈右移。

3樓:優雅的小六

彙編指令equ的作用為:在某些時候程式中多次出現同乙個表示式,為方便起見,可以用賦值偽操作給表示式賦予乙個名字。

equ的指令格式為expression_name equ expression。此後程式中凡需要用到該表示式指出,就可以用表示式名來代替了。可見,equ的引入提高了程式的可讀性,也使其容易修改。

expression_name equ expression中的表示式可以是任何有效的運算元格式,可以是任何可求出常數值的表示式,也可以是任何有效的助記符。

彙編指令中除了equ作賦值操作以外,data指令同樣具有類似的作用。data指令(資料位址賦值命令)的作用為將資料位址或**賦與規定的字元名稱。

雖然equ和data具有相似的作用,但是兩者直接具有以下區別:equ須先定義後使用,而data可無須如此。其次,equ可把彙編符號賦給乙個字元名稱,而data偽指令則不能。

data可用於表示式,而equ不行。

4樓:匿名使用者

$是當前ip指標所指向的位址,$-offset a 是當前ip位址減去a的首位址,也就是前面一句定義的變數的個數。

5樓:匿名使用者

$-offset a 數值賦給count 在此以後程式中就可以用表示式名來代替

6樓:匿名使用者

equ是"等於"$當前的位址,也是就cs:ip指向的位址,

關於彙編的equ

7樓:匿名使用者

這個count作為變數是不佔據記憶體空間的。

用法其實跟c語言裡的巨集定義差不多

#define 符號名 符號值

在程式體裡面使用這個符號

編譯以後直接把符號值替換到這個符號的位置

即如果定義

count equ 1

程式中有指令

mov cx,count

編譯連線以後,你可以在debug中檢視

就成了mov cx,1

8樓:匿名使用者

不給分配空間,count==$-0abh,用count代替這個位址

彙編equ彙編equ什麼意思彙編equ指令

9樓:迷你手工老張

equ是等值命令,count equ $-offset a 的意思是count=$-offset a。

彙編指令equ的作用如下。

1、用符號名代表字串 。用乙個具有一定含義的符號名定義某乙個較長的字串,在隨後的程式中就用該符號名。例如:

greeting equ "how are you!"

在該定義之後,就可使用符號名greeting來代表字串"how are you!"。

2、用符號名關鍵字或指令助憶符 。用乙個(組)程式設計師自己習慣的符號名來代替組合語言中的關鍵字或指令助憶符。但在此建議不要這樣做,因為程式的編寫者習慣,程式的其他閱讀者可能會覺得很彆扭。

例如:

move equ mov ;給指令mov取另乙個符號名move

counter equ cx ;給暫存器cx取乙個叫「計數器」的符號名

上面的定義只是給原來的助憶符mov和cx起了另乙個別名,而原來助憶符mov和cx仍然可以使用,所以,可編寫如下語句:

move ax, cx ;相當於指令:mov ax, cx

mov counter, bx ;相當於指令:mov cx, bx

擴充套件資料:

彙編指令邏輯運算——

and 與運算。

or 或運算。

xor 異或運算。

not 取反。

test 測試。(兩運算元作與運算,僅修改標誌位,不回送結果)。

shl 邏輯左移。

sal 算術左移。(=shl)。

shr 邏輯右移。( 每位右移, 低位進 cf, 高位補 0)。

sar 算術右移。(每位右移, 低位進 cf, 高位不變)。

rol 迴圈左移。

ror 迴圈右移。

rcl 通過進製的迴圈左移。

rcr 通過進製的迴圈右移。

10樓:

在彙編定義變數的時候會用到dup。

變數名 型別 初值表

dup用於把乙個相同值賦值若干次。

重複次數 dup(資料項)

具體比如s db 30 dup(0)

定義乙個位元組型變數,該變數占用30個位元組,所有位元組被初始化成0equ是乙個**替換指令

比如:s equ bx+si

mov cx,[s]

彙編中equ指令和指令的區別,彙編中equ指令和word指令的區別

equ只是做了巨集定義 equ aaa 3 就是告訴編譯器aaa 3而已 word是要實實在在開闢空間的 word aaa 會在這個位址處,開闢4個位元組的空間,存放aaa個人理解,歡迎交流。在彙編定義變數的時候會用到dup。變數名 型別 初值表 dup用於把乙個相同值賦值若干次。重複次數 dup ...

c語言和組合語言的關係,C語言和組合語言的關係?

程式設計師編寫的c語言 首先要經過c語言編譯器,生成彙編 這個過程稱為編譯階斷,當c語言編譯器生成彙編 後,再呼叫彙編器來將彙編 編譯成彙編指令。這是一種站在巨人肩人的作法,最早的c 程式語言也是這樣的實現方法,只不過那時候叫cfront程式,cfront程式的作用是將c 轉換成c語言 類似於乙個文...

C語言與組合語言,C語言和組合語言的區別是什麼?

樓上都不懂。c相對彙編來說的優勢主要在移植性上和開發效率上。程式執行效率不如彙編。所以如果不關注程式執行效率的話,推薦用c.當然,現在絕大部分的處理器都有c編譯器。但是為什麼8086上採用組合語言呢?最主要的的原因是,8086有足夠多的通用暫存器。為什麼有足夠多的通用暫存器就不需要用c了呢?原因在於...

組合語言jz與jnz的區別,組合語言中je 和jne的區別

jnz結果不為零 或不相等 則轉移。jz即零標誌為1就跳轉。jnz 或jne jump if not zero,or not equal 組合語言中的條件轉移指令。結果不為零 或不相等 則轉移。測試條件 zf 0 zf組合語言中的psw標誌暫存器中的一位,而jz則是根據zf決定是否跳轉。若zf 1 ...

組合語言中的機器語言怎麼編寫,組合語言是一種機器語言嗎?怎麼有的說不是有的說是啊

組合語言是從機器語言轉換過來的.最早的計算機系統沒有可用的高階語言,是直接用0101這樣的二進位制編碼來程式設計的,這樣對絕大多數使用者就很不方便,因為這要求對計算機系統的軟體和硬體資源要非常了解才可以.記憶量也很大.到後來,大家就用一些符號來代替一些二進位制 方便識別,比如原來 1011意思是加法...