1樓:胖大海君
為你解答: 你使用哪個暫存器啊? 就替你選擇使用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
哈哈 幫你做完了 沒有加分沒關係 請替俺選擇(滿意回答)就可以
2樓:匿名使用者
add eax, dword ptr [ebp+10]這個是最快的,add eax, ecx這個是最慢的;add eax, dword ptr [ebp+10]是在新增指標,指標在彙編裡就相當於彙編指令;add eax, ecx 是在新增一個變數
所以在組合語言中指令一定是比立即數和變數執行速度快的,則立即數又比變數執行快。
希望對你有所幫助!!!
3樓:匿名使用者
指令的執行過程包括取指令,執行指令。
取指令指的是從cs:ip處取得指令放入指令佇列;執行指令指譯碼、具體操作。
add eax, 12 ;立即數
最快;因為運算元在指令中。直接在加法器中運算add eax, ecx
次之。因為運算元在暫存器。從暫存器取數比從指令中慢add eax, dword ptr [ebp+10]最慢。因為運算元在儲存器。從儲存器取數,需要額外的一個讀寫週期
組合語言中add加法指令的問題
4樓:閭丘芷荷乙曾
1.0ac72h只是一個表示方法,跟ac72h是一樣的含義。ax裡還是儲存16位的值。
之所以在前面多加一個0,是因為編譯器不識別以字母開頭的立即數。
算是立即數表示的一種規則吧,或者可以理解為是一種語法規則。
只要是十六進位制數的(最後加h),首位又是字母的,必須前面新增個0。
這樣也不容易引起歧義。
如果不習慣加0,那mov
al,dh這個指令怎麼識別呢?
是把8位暫存器dh裡的值交給al?還是把十六進位制數0dh交給al呢。。。
所以建議你養成這樣的習慣。
2.0f表示溢位,實際上是把add指令作為有符號數加法指令。ax開始是正數(最高位0),bx也正數,相加結果超過了能識別的最大正數(7fffh),所以溢位了。
5樓:革盼秋宇恬
89h+
89h=
112h,而al最大是ffh,產生溢位後就生產丟失現象,只保留低位。
要想不丟失,可改為:
xorah,ah
addax,al
則ax是正確的112h
其他高階語言也一樣,在宣告變數和計算時要考慮數字溢位問題(宣告的是short型變數,給的卻是int型值,得到的也只會是short型的值即丟失或報錯)
6樓:做而論道
無論,是有符號還是無符號的,演算法都是相同的。
即:89h + 89h = (1)12h。
相當於無符號:137 + 137 = 274 = 256 + 18。 256 即為進位 1。
相當於有符號:(-119) + (-119) = +18。 溢位,結果無效。
換一個數,再試試,有符號數,也可以得出正確的結果。
7樓:匿名使用者
不是的,雖然算數運算指令主要用來對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,表示有溢位,指出了這一錯誤。
希望能幫到你。
8樓:匿名使用者
無符號數的範圍是0-255,有符號數是-128 - 127.應該預設是無符號數,另外標誌暫存器裡有個of位它是針對有符號數的,如果是mov al,7fh add al,1 of位會置1 顯示有符號數溢位,因為7fh+1=128大於了有符號數的表示範圍。
9樓:夕見的
將al的內容直接相加(注意的是要進行的是十六進位制的加法,而不是十進位制的)後送到al暫存器中
急~~~求助組合語言中mov指令和add指令用法
10樓:匿名使用者
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組合語言程式設計的電子書,中文版的,希望能幫到你!
組合語言中st指令什麼意思組合語言中,ST指令什麼意思?
st是store的簡寫,ld是load簡寫,前面一個是寫,後面一個是讀。st是源暫存器 儲存區,ld是儲存區 目的暫存器。字資料傳送指令 ld,st 這是最簡單的資料傳送指令,不用考慮符號位的問題,直接以機器的位長存取資料。ld 從記憶體中取32位字資料放人暫存器,st將暫存器中的32位字資料儲存到...
彙編JB指令,組合語言中JB,JA,是什麼意思
jb是指判斷位變數轉移指令,ja jump above 大於則轉移到目標指令執行。jb p1.3,l1意思就是說判斷p1.3的值是不是 1 如果是就跳轉到l1程式執行,如果不是就順序執行下一條指令。jnae jump not above and equal 低於,即不高於且不等於則轉移,但執行這條語...
組合語言中ptr的作用是什麼,組合語言中CMP的作用是什麼?
ptr應該就是pointer 說明地址指標型別。當兩個運算元型別均不明確時,必須用byte ptr 位元組屬性 或word ptr 字屬性 將一個儲存器運算元定義為位元組或字型別。如 mov byte ptr si oah 指明 si 為位元組型別 在沒有暫存器名存在的情況下,用操作符 x ptr ...