亚洲av成人无遮挡网站在线观看,少妇性bbb搡bbb爽爽爽,亚洲av日韩精品久久久久久,兔费看少妇性l交大片免费,无码少妇一区二区三区

  免費(fèi)注冊 查看新帖 |

Chinaunix

  平臺 論壇 博客 文庫
123下一頁
最近訪問板塊 發(fā)新帖
查看: 38797 | 回復(fù): 24
打印 上一主題 下一主題

arm中mov r0, r0的作用是? [復(fù)制鏈接]

論壇徽章:
0
跳轉(zhuǎn)到指定樓層
1 [收藏(0)] [報(bào)告]
發(fā)表于 2011-07-14 23:20 |只看該作者 |倒序?yàn)g覽
在內(nèi)核中,我看到過好幾處使用了mov r0, r0的指令。我知道它是一條空語句,就是讓cpu多運(yùn)行一條指令,相當(dāng)于有些單片機(jī)的nop指令。但是不理解為什么要是用這條指令,比如:
arch/arm/kernel/entry-common.S:在執(zhí)行用戶程序時(shí),發(fā)生中斷,當(dāng)中斷處理完后,下面這段程序就是返回的一些操作。
  1. /*
  2. * "slow" syscall return path.  "why" tells us if this was a real syscall.
  3. */
  4. ENTRY(ret_to_user)
  5. ret_slow_syscall:
  6.         disable_irq                                @ disable interrupts
  7.         ldr        r1, [tsk, #TI_FLAGS]
  8.         tst        r1, #_TIF_WORK_MASK
  9.         bne        work_pending
  10. no_work_pending:
  11.         /* perform architecture specific actions before user return */
  12.         arch_ret_to_user r1, lr

  13.         @ slow_restore_user_regs
  14.         ldr        r1, [sp, #S_PSR]                @ get calling cpsr
  15.         ldr        lr, [sp, #S_PC]!                @ get pc
  16.         msr        spsr_cxsf, r1                        @ save in spsr_svc
  17.         ldmdb        sp, {r0 - lr}^                        @ get calling r0 - lr
  18.         mov        r0, r0
  19.         add        sp, sp, #S_FRAME_SIZE - S_PC
  20.         movs        pc, lr                                @ return & move spsr_svc into cpsr
  21. ENDPROC(ret_to_user)
復(fù)制代碼
就是不明白上面這里指令mov r0, r0的用意。誰能給我個(gè)答案,這個(gè)問題已經(jīng)困擾我半年之久了。

論壇徽章:
0
2 [報(bào)告]
發(fā)表于 2011-07-15 09:37 |只看該作者
自己頂一下。這條語句是比較常見的,怎么沒人幫一下啊?期待中啊。。。。。。

論壇徽章:
0
3 [報(bào)告]
發(fā)表于 2011-07-15 09:55 |只看該作者
譯碼時(shí)有的會譯成 mov r0, r0
但實(shí)際就是 nop

論壇徽章:
0
4 [報(bào)告]
發(fā)表于 2011-07-15 11:24 |只看該作者
對啊,它就是nop指令,我的意思就是,為什么這里需要nop指令。

論壇徽章:
22
丑牛
日期:2014-08-15 14:32:0015-16賽季CBA聯(lián)賽之同曦
日期:2017-12-14 15:28:14黑曼巴
日期:2017-08-10 08:14:342017金雞報(bào)曉
日期:2017-02-08 10:39:42黑曼巴
日期:2016-11-15 15:48:38CU十四周年紀(jì)念徽章
日期:2016-11-09 13:19:1015-16賽季CBA聯(lián)賽之同曦
日期:2016-04-08 18:00:03平安夜徽章
日期:2015-12-26 00:06:30程序設(shè)計(jì)版塊每日發(fā)帖之星
日期:2015-12-03 06:20:002015七夕節(jié)徽章
日期:2015-08-21 11:06:17IT運(yùn)維版塊每日發(fā)帖之星
日期:2015-08-09 06:20:002015亞冠之吉達(dá)阿赫利
日期:2015-07-03 08:39:42
5 [報(bào)告]
發(fā)表于 2011-07-15 11:43 |只看該作者
貌似跟流水線什么的有關(guān) 以前在哪看過,記不清了

論壇徽章:
0
6 [報(bào)告]
發(fā)表于 2011-07-15 13:33 |只看該作者
是的,我原來也是這么想的,但是感覺不踏實(shí),總覺得可能還有什么其它的。
不知道這樣解釋對不對:
ldmdb        sp, {r0 - lr}^          雖然該指令執(zhí)行完了,但是可能數(shù)據(jù)還沒有真正完全傳遞完。
mov         r0, r0                       
add           sp, sp, #S_FRAME_SIZE - S_PC
movs        pc, lr                        pc=lr,cpsr=spsr,引起模式切換。因此在ldmdb和本條指令之間需要有兩條指令進(jìn)行間隔。
我上面的解釋是沒有什么依據(jù)的,只是一點(diǎn)想法。希望各位大佬能夠解釋清楚,讓我可以安心,謝謝!

論壇徽章:
0
7 [報(bào)告]
發(fā)表于 2011-07-15 14:06 |只看該作者
剛才做了一個(gè)實(shí)驗(yàn)
ARM 指令(非 thumb),32bit

  1.         mov r15, r15
  2.         mov r14, r14
  3.         mov r13, r13
  4.         mov r12, r12
  5.         mov r11, r11
  6.         mov r10, r10
  7.         mov r9, r9
  8.         mov r8, r8
  9.         mov r7, r7
  10.         mov r6, r6
  11.         mov r5, r5
  12.         mov r4, r4
  13.         mov r3, r3
  14.         mov r2, r2
  15.         mov r1, r1
  16.         mov r0, r0
  17.         nop
復(fù)制代碼
編譯、譯碼后的結(jié)果如下

  1.    0:        e1a0f00f         mov        pc, pc
  2.    4:        e1a0e00e         mov        lr, lr
  3.    8:        e1a0d00d         mov        sp, sp
  4.    c:        e1a0c00c         mov        ip, ip
  5.   10:        e1a0b00b         mov        fp, fp
  6.   14:        e1a0a00a         mov        sl, sl
  7.   18:        e1a09009         mov        r9, r9
  8.   1c:        e1a08008         mov        r8, r8
  9.   20:        e1a07007         mov        r7, r7
  10.   24:        e1a06006         mov        r6, r6
  11.   28:        e1a05005         mov        r5, r5
  12.   2c:        e1a04004         mov        r4, r4
  13.   30:        e1a03003         mov        r3, r3
  14.   34:        e1a02002         mov        r2, r2
  15.   38:        e1a01001         mov        r1, r1
  16.   3c:        e1a00000         nop                        ; (mov r0, r0)
  17.   40:        e1a00000         nop                        ; (mov r0, r0)
復(fù)制代碼

論壇徽章:
0
8 [報(bào)告]
發(fā)表于 2011-07-15 14:54 |只看該作者
在arm中nop是偽指令,它實(shí)際翻譯成mov r0, r0。
我的問題提的不是很好?我想說的是,為什么需要添加mov r0,r0,或者說nop偽指令。

論壇徽章:
0
9 [報(bào)告]
發(fā)表于 2011-07-15 15:01 |只看該作者
你是想問為什么要設(shè)計(jì)一個(gè) nop 指令,是這個(gè)意思嗎?

論壇徽章:
0
10 [報(bào)告]
發(fā)表于 2011-07-15 15:06 |只看該作者
不是,你看一下我的主帖。我指的是在這里代碼中為什么要用nop指令。
您需要登錄后才可以回帖 登錄 | 注冊

本版積分規(guī)則 發(fā)表回復(fù)

  

北京盛拓優(yōu)訊信息技術(shù)有限公司. 版權(quán)所有 京ICP備16024965號-6 北京市公安局海淀分局網(wǎng)監(jiān)中心備案編號:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年舉報(bào)專區(qū)
中國互聯(lián)網(wǎng)協(xié)會會員  聯(lián)系我們:huangweiwei@itpub.net
感謝所有關(guān)心和支持過ChinaUnix的朋友們 轉(zhuǎn)載本站內(nèi)容請注明原作者名及出處

清除 Cookies - ChinaUnix - Archiver - WAP - TOP