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...