1樓:墓酷
因為暫存器或儲存中的數是二進位。所以是除以2.就像十進位右移一位就相當於除以10一樣。
你試試就知道了。任何數都可以拆分,比如乙個二進位數abcd可以拆分成a*2^3+b*2^2+c*2^1+d*2^0.當除以2的時候就會變成a*2^2+b*2^1+c*2^0+d*2^(—1).
d這一項就會溢位,然後就只剩下0abc,右移一位。就是這樣。
2樓:網友
看我這個吧!你這個是什麼編成?嵌入式?
嵌入式的除法問題是用指令asl,asr,lsl,lsr來完成的。
向左移就是乘法,向右移就是除法。
arm是32位的,所以沒以為都是用二進位表示的。
下面這個例子。
ldr r0,r1,asr #
他彙編後的結果就是把r1除以2的一次方,把這個結果給到r0裡。
再看個例子。
ldr r0,r1,lsr r4
彙編後就變成了,r1除以2的r4次方,2的r4次方這有括號的。
這下應該明白了吧!一位是2進位,所以每移動一位,就要乘2的一次方或除2的一次方。
彙編除法的問題
3樓:網友
x86的16bit模式的無符號除法div有bit被除數 除以 8bit除數。
bit dx加16bit ax 除以 16bit除數兩種格式。
大於65535的資料」即大於16bit的資料,就要先化成第2種方式處理。
但現代的cpu另有32bit和64bit模式。
在非真實模式的彙編下,可以用。
bit edx加32bit eax 除以 32bit除數bit rdx加64bit rax 除以 64bit除數即可以直接處理32bitbit、128bit的資料的除法。
回到8086 16bit下,通常還是把32bit的資料看成2個16bit,mov分別移到ax,dx
而不是直接32bit,因為16bit晶元設計就是為了最佳處理16bi的資料t,沒有32bit資料的處理,必須先拆吧。
彙編中除法運算的使用方法有點疑問
4樓:網友
電子書上的**和解說,都是正確的。
你可能沒有注意到,三個數的資料定義,第乙個是用dd定義的「雙字」,它是四個位元組的32位數,佔用「位元組」位址是0,1,2,3。
它的低位「字」(16位,兩個位元組),存放在0,1這兩個「位元組」單元位址中。這個「字」的「字」位址,是0
它的高位「字」(16位,兩個位元組),存放在2,3這兩個「位元組」單元位址中。這個「字」的「字」位址,是2
要將這個4個位元組的32位數,傳送到cpu內,16位的8086cpu需要進行兩次傳送。
先將這個32位數的低位「字」(低16位)放在16位的暫存器ax中,指令就是mov ax, ds:[0]
再將這個32位數的高位「字」(高16位)放在16位的暫存器dx中,指令就是mov dx, ds:[2]
你的疑問表述不是很清楚,有點亂,其中你說的「前四位」「高八位」的含義可能存在誤解。
我猜測你可能是誤以為一條mov ax, ds:[0]能一次就傳送4個位元組32位位數了。
5樓:網友
一般資料存放的方式比如:ds[0]: h l; 直接取ds[0],其預設位址就是ds[0] l,暫存器位址是從低到高排序的, 如果你取 ds[0]+1 就是高16位了;
6樓:id雞蛋炒韭菜
你是問div還是問資料放置的位置?
彙編關於借位的問題,組合語言進製與借位的問題。
97h不夠98h減,向高位借位1,他的高位的權值為100h,借位後就是1 100h 97h 197h!組合語言進製與借位的問題。你這裡混淆了兩個概念,無符號數和有符號數。如果你希望得到2 3 1,那麼你應該認為2和 3都是有符號數,既然是有符號數,是否產生借位要看of標誌位,即溢位標誌位 如果你認為...
微控制器彙編問題
1.把立即數80h送入暫存器a中,其中80h換成二進位製數是1000 0000.2.up屬於乙個標號,語句的意思是把暫存器a中的數送給p1口3.右移一位a中的值,其中移位後的值為0000 0001。4.跳到標號為up的地方,重新執行第二句和第三句,意思就是一直迴圈執行第二句和第三句一直到有外界條件改...
c語言除法問題,c語言中的除法怎麼算
在計算c語言算術表示式的結果時,特別是除法,需要注意計算過程中運算物件的資料型別轉換。相同資料型別的資料 變數進行運算,結果保持原有資料型別。當不同資料型別的資料 變數進行運算時,結果為精度高的資料型別。例如 1 2 的結果為0 1.0 2 的結果為 0.5 include include incl...