欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136

標題: 求解匯編程序指令的運算過程及運算結果 [打印本頁]

作者: 13355423860    時間: 2021-7-29 11:38
標題: 求解匯編程序指令的運算過程及運算結果
MOV 30H,#12
MOV 31H,#23
PUSH 30H
PUSH 31H
POP 30H
POP 31H


作者: 名字不是重點    時間: 2021-7-29 14:02
這只是移數、入棧、出棧的指令沒有運算。最后的最后,30H=12,31H=23,均為10進數
作者: 13355423860    時間: 2021-7-29 14:16
名字不是重點 發表于 2021-7-29 14:02
這只是移數、入棧、出棧的指令沒有運算。最后的最后,30H=12,31H=23,均為10進數

感謝回復!是怎么推出來的呢,我根據指令的解釋推不出來
作者: 林神經    時間: 2021-7-29 14:42
把立即數12送入到30H
作者: 林神經    時間: 2021-7-29 14:49
將立即數12送入到30H
將立即數23送入到31H
將30H里面的立即數送入到一級堆棧
將31H里面的立即數送入到二級堆棧
根據堆棧后入先出原則那么30H先出棧的話那么他的數就是23,31H就是12
作者: 13355423860    時間: 2021-7-29 15:53
林神經 發表于 2021-7-29 14:49
將立即數12送入到30H
將立即數23送入到31H
將30H里面的立即數送入到一級堆棧

PUSH 30H指令不應該是把12送到31H嗎?然后PUSH 31H指令后又把12給了32H,我理解的,轉不過來不知道咋移的
作者: yzwzfyz    時間: 2021-7-29 16:18
51里有256個快速內存,何為快速?有指令直接訪問有內存(讀、寫、甚至位操作),它的地址是00-FFH。
1、00-1FH:分成四塊,00-07H,08-0FH,10-17H,18-1FH。它們對應R0-R7。
在PSW寄存器中,有兩位(B43:RS1、RS0)決定R0-R7使用上術四塊當中的哪一塊。
例如,PSW.43=11時,R0就是18H,R7就是1FH;PSW.43=00時,R0就是00H,R7就是07H;
2、20-2FH:16個字節,128個位,這128個位是可以單獨訪問的(與、或、求反,測試),而其它內存就不一定有此特殊待遇了。
這128個位,可以用SBIT進行定義。例如:定義 20H.0 = INPUTMM1。即可以按位使用。
按位使用時,可以定義128個變量。當然也可以按字節使用。
按字節使用時,只能定義16個變量。
3、30H-7FH:歸你,按字節使用。
4、80H-8FH:稱為高端內存。低檔的51中沒有這128個字節,高檔的51中有,高端內存只能間接訪問!而低端內存(00-7FH)是直接、間接都可以訪問。為什么要這樣呢?因為高端存存與特殊寄存器重疊,同用80-8FH地址,要區分它們,就是用直接訪問和間接訪問來區分。
下面說到樓主的問題了:
特殊寄存器中有一個叫SP,它是堆棧指針,例如:SP=80H(由你設置任意設置):
PUSH 30H
30H就是前面(3、中介紹的),里面已放了一個數字12,這條指令就將30H中的12,存入SP所指的單元80H中,并將SP+1,讓SP指向81H。
PUSH 31H  ;同理讓31H中的23進入81H,SP+1,SP指向82H。
POP 30H
POP 操作與PUSH相反,PUSH是壓堆,POP是彈棧!它先將SP-1,即SP從82H變成81H,再從81H中取出數字,送到目標寄存器,即將23送入30H。
POP 31H  ;同理將SP-1,SP=80H,再從80H中取出數字12,送到目標寄存器31H。
以上書上都有,老師也應該講過,都是不認真學習的結果。

另出一題:
PUSH P0 是可以的
PUSH R0 是不可以的,為什么?

作者: 名字不是重點    時間: 2021-7-29 16:42
林神經 發表于 2021-7-29 14:49
將立即數12送入到30H
將立即數23送入到31H
將30H里面的立即數送入到一級堆棧

對的,我也是好久沒整匯編了。
作者: 名字不是重點    時間: 2021-7-29 16:45
13355423860 發表于 2021-7-29 15:53
PUSH 30H指令不應該是把12送到31H嗎?然后PUSH 31H指令后又把12給了32H,我理解的,轉不過來不知道咋移的

單片機的堆棧,類似彈夾的原理,你細品一下就有白了。
作者: 林神經    時間: 2021-7-29 18:15
名字不是重點 發表于 2021-7-29 16:45
單片機的堆棧,類似彈夾的原理,你細品一下就有白了。

很形象
作者: Y_G_G    時間: 2021-7-29 22:38
堆棧是一個水管,只有一個入口和一個出口
堆棧的處理就是把東西擠到水管里和取出來的處理,擠得多了,超過水管的長度了,最先擠進去的就會從另一頭給擠掉地上,你永遠找不到了,這叫溢出
擠進去的時候是一個一個擠進去的,取出來肯定也是一個一個取出來,最后擠進去的就先取出來
PUSH和POP就是一個進和出的功能
PUSH A就是把A里頭的東西放入堆棧
POP A就是把最外面一層堆棧的內容放到A里頭
如果這樣還不明白,直接放棄匯編

作者: hhdsdy    時間: 2021-7-29 23:03
13355423860 發表于 2021-7-29 15:53
PUSH 30H指令不應該是把12送到31H嗎?然后PUSH 31H指令后又把12給了32H,我理解的,轉不過來不知道咋移的

還是得認真仔細的去理解堆棧和出棧
作者: sustlixin    時間: 2021-8-2 18:42
出入棧,均不改變棧里的內容,只是改變了SP指針的指向
作者: Kxuan163    時間: 2021-8-2 19:00
本帖最后由 Kxuan163 于 2021-8-2 19:07 編輯
林神經 發表于 2021-7-29 14:49
將立即數12送入到30H
將立即數23送入到31H
將30H里面的立即數送入到一級堆棧

正解。
我再補充一下,堆棧的進出次序是“后進先出”:
第5條指令 POP 30H ; 地址為30H的內存單元 <--棧頂內容#23
第6條指令 POP 31H  ;  地址為31H的內存單元 <-- 棧內容#12




歡迎光臨 (http://m.raoushi.com/bbs/) Powered by Discuz! X3.1