對,沒錯,loop就和C語言裏面goto的那個標號是壹樣的,雖然在編寫程序時只是壹個標號,但是其深層意思,也就是其編譯後的結果其實是壹個地址,比如0x2000_1010。
妳的上述程序解釋如下:
ldrb ch , [src] , #1 ;以src中的值為地址,從該地址處取1字節數據到ch,再將src加1
strb ch , [dest] , #1 ;以dest中值為地址,將ch中1字節數存儲在此處,再將dest加1
cmp ch , #0 ;比較ch和0的大小
bne loop ;如果ch不為0(註意這個"ne"),則跳至loop執行
很明顯,這是壹個字符串拷貝程序,從src地址處拿來,壹字節壹字節放到dest去,然後壹邊進行判斷,看是否已拷貝到最後的結尾字符'0',如果沒到,那麽跳到loop處繼續循環執行,如果已到,則繼續往下執行。雖然妳程序裏沒寫loop標號位置,但應該是在ldrb指令前面,以達到循環的效果。
vc匯編指令的問題、。。。jnz 這裏jnz怎麽跳 到 sub esp ,0x0c 這裏
jnz lable1
sub esp,0x0c這裏來 要怎麽寫
lable1:
sub esp,0x0c
幾個匯編指令的問題1,MOV AL,BX X
2,MOV AL,CL Y
3.INC [BX] X 屬性不明
4.MOV 5,AL X 立即數,不能當做目的地
5.MOV [BX],[SI] X 兩個操作數,不能都是存儲器單元
6.MOV BL,F5H X 0F5H
關於OUT匯編指令的問題OUT 03F8H,AL(這個指令有錯誤為什麽?)
這是因為在OUT指令中直接用數字尋址,端口號只能是0到FFH,而上面這條
指令應改為
mov dx,03f8h ;只能放在DX,這是規定
out dx,al
-----------------------------------------
OUT 0FAH,AL(它是指從AL中輸出壹個字節到0FAH的壹個端口嗎?)
是的
---------------------------------------
OUT 0FAH,AX(AX是壹個字為什麽也能輸出到0FAH所指的8位端口中呢?)
這條指令將AL中的數據放在0FAH,將AH中的數據放在0FBH
這四條指令主要就是說明這個OUT指令的不同用法
學這些指令不用硬記每條指令的各種用法,只要根據規定的尋址方式
記住相應指令所要用到的特定寄存器就行了
關於MOV匯編指令的問題mov 0150[bx],ch(寫法有問題)=mov byte ptr 0150[bx],ch
;0150[bx]=ds:[bx+0150](1個字節),而ch也為1個字節8位
;即把寄存器cx中的高8位(ch)內容傳送給內存ds:[bx+0150]的空間中
ADC AL,[DI];帶進位的加法指令
;[di]=ds:[di]=(2050A)=37H
;al=ax的低8位=94H
;結果37H+94H=CBH 沒進位CF=0
daa指令沒學
單片機匯編指令的問題
這兩條指令肯定是有區別的,區別就在於比較數20D,
CJNE A,#20D,RETURN,這是累加器與20D,即十進數20相比較,這個數稱為立即數。
而CJNE A,20D,RETURN,並不是與立即數20相比較,而是與地址是20的內部RAM單元內的數相比較,即這個20並不是比較數,而是RAM的單元地址,比較數在RAM中,具體是什麽數,不知道,如果在這條指令之前給(20)單元內送數了,那比較數就是知道的。
匯編指令的簡單問題可以在DEBUG中編譯,但是最後在MASM下編譯,然後在DEBUG中修改調試,那樣更容易在MASM編譯時檢查到不正確的地方!
壹道關於匯編指令的問題A.ADD [BX],[2000H] ;不允許兩個操作數同為存儲單元
B.ADC [SI][DI],AX ;只能使用壹個變址寄存器
C.SUB [2000H],[20H] ;不允許兩個操作數同為存儲單元
D.SBB AX,BX ;正確
反匯編指令與匯編指令的區別?!妳說的是類似下面這樣的吧?
0B4A:0100 5B POP BX
0B4A:0101 91 XCHG CX,AX
0B4A:0102 26 ES:
0B4A:0103 8B1D MOV BX,[DI]
0B4A:0105 8D365F91 LEA SI,[915F]
0B4A:0109 2E CS:
0B4A:010A 803C2F CMP BYTE PTR [SI],2F
0B4A:010D 7436 JZ 0145
0101A55F > $ 8BFF MOV EDI,EDI
0101A561 . 55 PUSH EBP
0101A562 . 8BEC MOV EBP,ESP
0101A564 . 83EC 44 SUB ESP,44
0101A567 . 56 PUSH ESI
0101A568 . 57 PUSH EDI
0101A569 . 6A 10 PUSH 10
=============================================
前面的十六進制數表示的是指令的機器碼,沒有必要刻意的去記憶這些機器碼的.機器碼非常不好記憶和閱讀的,匯編語言的出現就是為了解決機器碼難記憶,難識別的問題的
=============================================
有的時候是需要看的,不然沒用的話顯示它有什麽用啊,有壹句名言說的不是很好麽:存在即合理
不過初學者壹般不用看,但初學者研究研究機器碼也不是件壞事
匯編指令的壹個問題這個要怎麽說呢? 因為程序最終是要交由cpu來處理。 而匯編指令就是要告訴CPU該幹什麽。這就是指令,妳從漢語理解指令,都因該知曉壹二。 比如 mov AX,51H. 這就是壹條匯編指令。 它的目的是告訴CPU 將51H送到AX寄存器。
至於妳問的它和程序有什麽關系。 妳想下妳寫程序,是為了幹什麽呢? 不就是要CPU執行壹段操作?程序最總還是要編譯成壹條條指令,交由CPU。指令是對於CPU而言,程序是個上層概念。
上面2段說的雖然很抽象,但我想大致說清楚了。 如悟性高,應該懂了, 再看不懂也沒辦法。 因為學習計算機程序設計上,妳不可能不學著理解抽象思維。 這就是人之聰明否,直接影響學習進度。