久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
123
返回列表 發新帖
樓主: newlined
打印 上一主題 下一主題
收起左側

請教各位大神一個匯編語言堆棧大小計算的問題

[復制鏈接]
81#
ID:624769 發表于 2022-10-25 14:38 | 只看該作者
newlined 發表于 2022-10-25 13:50
你好,這個例子,我一直試圖理解,但我沒有想通。我是這樣理解的,LCALL 一個函數時,堆棧會保存當前調用 ...

CALL 一次,就會把當前地址放入  棧   然后跳轉,讀到RET  從 棧里 讀出地址, 然后返回  CALL 的地方。
回復

使用道具 舉報

82#
ID:384109 發表于 2022-10-25 14:43 | 只看該作者
lcall和ljmp是不同的機制,lcall會壓棧,ljmp不對棧操作,lcal必須有ret,ljmp一定不能有ret,51除了硬件自動壓棧的以外,其他都是人工壓棧的
回復

使用道具 舉報

83#
ID:624769 發表于 2022-10-25 14:58 | 只看該作者
newlined 發表于 2022-10-25 13:50
你好,這個例子,我一直試圖理解,但我沒有想通。我是這樣理解的,LCALL 一個函數時,堆棧會保存當前調用 ...

CALL 一次  就會把地址  存入棧  然后  跳轉執行, 運行到 RET 就會從 棧中取出 地址, 返回CALL 的地方。
CALL 和 RET  應該是 成對的關系。沒錯吧? C 就是這么做的。

然后,你 CALL 一個函數, 這個函數,里面還要 調用 另一個函數,  
這個時候,應該  CALL  然后, CALL  然后 RET  然后 RET  返回最初的地方對不對?
那么,我簡單點,不要CALL 直接JMP可以么?  CALL   JMP   RET  是不是結果一樣?

再舉個簡單的例子吧

就是我之前舉的那個例子:

SEND_HALF_BCD:
ANL   A,#0FH
ORL   A,#30H
SEND_BYTE:
JNB     TI,$
CLR     TI
MOV   SBUF,A
RET

這是一個復合函數,

CALL SEND_HALF_BCD  就能把 半個BCD 轉成 ASCCII 發出去。
CALL SEND_BYTE      就能直接把 一個字節 發出去,這個能理解么?

到這里為止,是不是沒有問題? 能理解么?  能的話,我們往下看。

換個寫法:
SEND_HALF_BCD:
ANL   A,#0FH
ORL   A,#30H
CALL        SEND_BYTE
RET

SEND_BYTE:
JNB     TI,$
CLR     TI
MOV   SBUF,A
RET

這樣,徹底拆成兩個函數,你能看明白么?  
作用和剛才一樣,這是純C的寫法。 你比較喜歡這樣寫是么?
此時如果 CALL SEND_HALF_BCD
這就是你認為應該的, 兩次CALL 兩次RET 對吧?


然后,我們再換個寫法:

SEND_BYTE:
JNB     TI,$
CLR     TI
MOV   SBUF,A
RET

SEND_HALF_BCD:
ANL   A,#0FH
ORL   A,#30H
LJMP SEND_BYTE

這樣, CALL SEND_HALF_BCD   有沒有問題?  假如你說有問題……  那么,我們換個個。

SEND_HALF_BCD:
ANL   A,#0FH
ORL   A,#30H
LJMP SEND_BYTE

SEND_BYTE:
JNB     TI,$
CLR     TI
MOV   SBUF,A
RET

這樣總沒問題了吧?

匯編之所以比C 效率高,就是可以避免無意義的  RET。 節約非必要的 RET 是提高效率的一種必要手段。這真的是基礎中的基礎了……
回復

使用道具 舉報

84#
ID:384109 發表于 2022-10-25 15:17 | 只看該作者
樓上的例子有點特例了,像send_byte可以作為一個公用的子程序,如果用jmp,ret會不好控制,除非只有一個地方專門調用,即使是匯編,最好也是模塊話,條理會清晰很多
回復

使用道具 舉報

85#
ID:883242 發表于 2022-10-25 18:44 | 只看該作者
188610329 發表于 2022-10-25 14:58
CALL 一次  就會把地址  存入棧  然后  跳轉執行, 運行到 RET 就會從 棧中取出 地址, 返回CALL 的地方。 ...
  1. %*DEFINE(SEND_BYTE)(
  2.     JNB     TI,$
  3.     CLR     TI
  4.     MOV   SBUF,A
  5. )
  6. SEND_HALF_BCD:
  7.     ANL   A,#0FH
  8.     ORL   A,#30H
  9.     %SEND_BYTE       
復制代碼


我這個效率比你的還要高,連LJMP都省掉了,你的匯編還沒學到家。

我用的是Intel MCS-51 MACRO ASSEMBLER, V2.2,如果用Keil A51編譯不通過請查手冊。
回復

使用道具 舉報

86#
ID:624769 發表于 2022-10-25 19:45 | 只看該作者
Hephaestus 發表于 2022-10-25 18:44
我這個效率比你的還要高,連LJMP都省掉了,你的匯編還沒學到家。

我用的是Intel MCS-51 MACRO ASS ...

人家問 CALL 和 RET,  你發個 沒CALL 沒 RET 的 代碼
回復

使用道具 舉報

87#
ID:227818 發表于 2022-10-26 02:20 | 只看該作者
Hephaestus 發表于 2022-10-25 18:44
我這個效率比你的還要高,連LJMP都省掉了,你的匯編還沒學到家。

我用的是Intel MCS-51 MACRO ASS ...

您這個看起來更簡單,俗話說人外有人,天外有天,但我現在是更看不懂,感謝大家提供不同的代碼讓我們這些初學者揣摩。
回復

使用道具 舉報

88#
ID:883242 發表于 2022-10-26 03:38 | 只看該作者
newlined 發表于 2022-10-26 02:20
您這個看起來更簡單,俗話說人外有人,天外有天,但我現在是更看不懂,感謝大家提供不同的代碼讓我 ...

這不是“人外有人,天外有天”的問題,時間久了你就能明白最重要的學問是數學和英語。
回復

使用道具 舉報

89#
ID:624769 發表于 2022-10-26 20:02 | 只看該作者
Hephaestus 發表于 2022-10-26 03:38
這不是“人外有人,天外有天”的問題,時間久了你就能明白最重要的學問是數學和英語。

數一數你這編譯出來多少字節, 在來講話
先不說人家問的  CALL RET , 你 CALL 和 RET 呢?  忘帶了?
其次, define 到底是什么? 你應該很清楚,沒必要再這里%。
你怎么不把所有代碼  define 只后,你還能 只要一句代碼  就能把智能蔽障小車寫出來呢?
%
回復

使用道具 舉報

90#
ID:883242 發表于 2022-10-26 20:18 | 只看該作者
188610329 發表于 2022-10-26 20:02
所以,先把數學學好, 數一數你這編譯出來多少字節, 在來講話, 然后把語文學好,學學怎么講話。
先不 ...

教你一句成語——不屑一顧。
回復

使用道具 舉報

91#
ID:624769 發表于 2022-10-27 00:20 | 只看該作者
Hephaestus 發表于 2022-10-26 20:18
教你一句成語——不屑一顧。

教你一句成語——夜郎自大。
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

手機版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 亚洲毛片在线观看 | 成人在线精品视频 | 午夜性色a√在线视频观看9 | 精品一区av | 亚洲成人午夜在线 | 欧洲视频一区二区 | 亚洲精品在线免费观看视频 | 91久久精品一区二区二区 | 91综合网| 中文字幕在线三区 | 99在线资源 | 国产成人精品区一区二区不卡 | 亚洲成av人影片在线观看 | 四虎影院在线免费观看 | 皇色视频在线 | 亚洲精品中文字幕在线 | 色www精品视频在线观看 | 男女国产网站 | 午夜影视大全 | 精品久久亚洲 | 欧美一级片 | 国内久久 | 在线日韩精品视频 | 日韩中文字幕在线免费 | 久久精品视频网站 | 超碰97免费在线 | 看一级毛片视频 | 美女久久| 国产一区二区视频免费在线观看 | 亚洲欧美另类在线观看 | 日本在线一区二区三区 | 亚洲乱码一区二区三区在线观看 | 亚洲精品一区二区网址 | 蜜桃精品视频在线 | 午夜精品久久久久久久久久久久久 | 久久国内 | 久久久精品一区 | 欧美成人在线免费 | 老牛影视av一区二区在线观看 | 日本精品一区二区三区视频 | 一色桃子av一区二区 |