彙編add指令,彙編的ADD指令

2021-03-04 09:01:07 字數 4421 閱讀 3270

1樓:匿名使用者

指令的執行過程包copy括取指bai令,執行指令。

取指令指的du是從cs:ip處取得指令zhi放入指令佇列;執行指令指譯dao碼、具體操作。

add eax, 12 ;立即數

最快;因為運算元在指令中。直接在加法器中運算add eax, ecx

次之。因為運算元在暫存器。從暫存器取數比從指令中慢add eax, dword ptr [ebp+10]最慢。因為運算元在儲存器。從儲存器取數,需要額外的乙個讀寫週期

2樓:匿名使用者

add eax, dword ptr [ebp+10]這個是最來快的,add eax, ecx這個是最慢的;源add eax, dword ptr [ebp+10]是在新增指標

bai,指標在彙編裡du就相當於匯zhi編指令;add eax, ecx 是在新增乙個變數dao

所以在組合語言中指令一定是比立即數和變數執行速度快的,則立即數又比變數執行快。

希望對你有所幫助!!!

彙編的add指令

3樓:胖大海君

為你解答: 你使用哪個暫存器啊? 就替你選擇使用r5暫存器吧 另外暫存器加1功能

的實現的 最好使用現成的微控制器本身就有的加1指令 inc r5;就可以實現暫存器r5的加1 ;如果使用 add指令 一條完成不了 add指令必須以累加器a做為目的運算元 需要用到

mov a,r5 ;

add a,#1 ;

mov r5,a

三條指令才能實現來 指令**長 執行速度慢.

你的要求是每次按下 p1.3 暫存器內容加1 對吧

參考程式如下:

*** 0000h

ljmp main

*** 0100h

main: mov r5,#0 ; 暫存器清零

setb p1.3 ; 置p1.3口線為讀狀態

ll: jb p1.3, ll ; 等待p1.3鍵按下

lcall ys ; 延時去鍵盤 抖動

setb p1.3 ; 置p1.3口線為讀狀態

jb p1.3, ll ; 判斷p1.3鍵按下否? 如果沒有按下 轉ll繼續 等待p1.3鍵按下

inc r5 ;如果按下p1.3鍵 則入暫存器r5加1

sjmp ll ;迴圈繼續等待p1.3鍵按下

ys: mov r7,#15 ;延時子程式

yy: mov r6,#200

ss; djnz r6, ss

djnz r7,yy

retend

哈哈 幫你做完了 沒有加分沒關係 請替俺選擇(滿意回答)就可以

4樓:匿名使用者

add eax, dword ptr [ebp+10]這個是最快的,add eax, ecx這個是最慢的;add eax, dword ptr [ebp+10]是在新增指標,指標在彙編裡就相當於彙編指令;add eax, ecx 是在新增乙個變數

所以在組合語言中指令一定是比立即數和變數執行速度快的,則立即數又比變數執行快。

希望對你有所幫助!!!

5樓:匿名使用者

指令的執行過程包括取指令,執行指令。

取指令指的是從cs:ip處取得指令放入指令佇列;執行指令指解碼、具體操作。

add eax, 12 ;立即數

最快;因為運算元在指令中。直接在加法器中運算add eax, ecx

次之。因為運算元在暫存器。從暫存器取數比從指令中慢add eax, dword ptr [ebp+10]最慢。因為運算元在儲存器。從儲存器取數,需要額外的乙個讀寫週期

組合語言中add加法指令的問題

6樓:閭丘芷荷乙曾

1.0ac72h只是乙個表示方法,跟ac72h是一樣的含義。ax裡還是儲存16位的值。

之所以在前面多加乙個0,是因為編譯器不識別以字母開頭的立即數。

算是立即數表示的一種規則吧,或者可以理解為是一種語法規則。

只要是十六進位製數的(最後加h),首位又是字母的,必須前面新增個0。

這樣也不容易引起歧義。

如果不習慣加0,那mov

al,dh這個指令怎麼識別呢?

是把8位暫存器dh裡的值交給al?還是把十六進位製數0dh交給al呢。。。

所以建議你養成這樣的習慣。

2.0f表示溢位,實際上是把add指令作為有符號數加法指令。ax開始是正數(最高位0),bx也正數,相加結果超過了能識別的最大正數(7fffh),所以溢位了。

7樓:革盼秋宇恬

89h+

89h=

112h,而al最大是ffh,產生溢位後就生產丟失現象,只保留低位。

要想不丟失,可改為:

xorah,ah

addax,al

則ax是正確的112h

其他高階語言也一樣,在宣告變數和計算時要考慮數字溢位問題(宣告的是short型變數,給的卻是int型值,得到的也只會是short型的值即丟失或報錯)

8樓:做而論道

無論,是有符號還是無符號的,演算法都是相同的。

即:89h + 89h = (1)12h。

相當於無符號:137 + 137 = 274 = 256 + 18。 256 即為進製 1。

相當於有符號:(-119) + (-119) = +18。 溢位,結果無效。

換乙個數,再試試,有符號數,也可以得出正確的結果。

9樓:匿名使用者

不是的,雖然算數運算指令主要用來對8位無符號資料進行算術操作,但也同樣用於帶符號數的。

在加法運算中,若位7有進製,則進製位cy置1,否則清0;若位3有進製,則半進製位ac置1,否則清0。若看作2個帶符號數相加,還需判斷溢位位ov;若ov為1,表示和數溢位。

例如:a=aeh,r1=81h,執行指令「add a,r1」,則操作如下所示。

1 0 1 0 1 1 1 0

+ )1 0 0 0 0 0 0 1

——————————

1 0 0 1 0 1 1 1 1

結果:a=2fh,cy=1,ov=1,ac=0,p=1。

此例中,若把aeh、81h看作無符號數相加,則結果為12fh(在看作無符號數時,不考慮ov位);若將上述2值看作有符號數,則有「2個負數相加得到正數」的錯誤結論,此時,ov=1,表示有溢位,指出了這一錯誤。

希望能幫到你。

10樓:匿名使用者

無符號數的範圍是0-255,有符號數是-128 - 127.應該預設是無符號數,另外標誌暫存器裡有個of位它是針對有符號數的,如果是mov al,7fh add al,1 of位會置1 顯示有符號數溢位,因為7fh+1=128大於了有符號數的表示範圍。

11樓:夕見的

將al的內容直接相加(注意的是要進行的是十六進位制的加法,而不是十進位制的)後送到al暫存器中

急~~~求助組合語言中mov指令和add指令用法

12樓:匿名使用者

1、linux和windows的**編寫是不一樣的,linux上的彙編風格是at&t風格,而windows上的彙編風格是intel風格。 其中的乙個區別是intel 風格是關於源運算元和目的運算元的。以第乙個為例

//windows上的寫法

mov eax, data4

//linux上的寫法

movl data4, eax

所以,你使用的哪個平台你得鬧明白。

2、如果是彙編**,直接用識別符號就好,還是不同的風格問題,如果按你寫的立即數模式。

//windows上的寫法

mov eax, -1000

//linux上的寫法

movl $-1000, eax

在linux的at&t彙編風格中,它這個立即數是必須要加上$ 表示乙個常量。 這個也是為什麼你在c語言中一般不能使用$來做為識別符號的乙個原因哦。

建議:查一下intel風格和at&t風格的彙編區別點。問題都很簡單,為了更好的幫助你,我上傳了乙份,詳細介紹intel組合語言程式設計的電子書,中文版的,希望能幫到你!

為什麼組合語言中MOV指令佔3位ADD指令佔兩位

不對呀,如果是51的話,mov指令佔一位 兩位 三位的都有,add指令也有佔一位和兩位。如 mov a,r0 佔一位 mov a,20h 佔兩位 mov 30h,40h 佔三位 add a,r1 佔一位 add a,23h 佔兩位 這些都是規定死的東西。屁股太大了乙個座位做不下去的。這個都是inte...

主要的彙編指令有哪些啊,彙編中的常見指令有哪些

ldr 和str 用於字和無符號位元組 指令格式 ldr str rd,62616964757a686964616fe78988e69d8331333264623161 位址 ldr strb rd,位址 ldr rd,位址 載入指定位址的字資料到rd中 str rd,位址 儲存rd中的字資料到指定...

求彙編的基本命令,組合語言指令的基本格式是什麼

裡面。intel 64 and ia 32 architectures software developer s manual volume 2a 和。intel 64 and ia 32 architectures software developer s manual volume 2b 是in...