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

 找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開(kāi)始

搜索
查看: 4617|回復(fù): 19
收起左側(cè)

C語(yǔ)言字符串核對(duì)匹配居然還能這樣寫(xiě),真是萬(wàn)能的指針

  [復(fù)制鏈接]
ID:688692 發(fā)表于 2022-6-30 10:20 | 顯示全部樓層 |閱讀模式
if(SBUF==((unsigned char code *)"關(guān)閉投球")[j])

編譯得到的匯編代碼:
效率一點(diǎn)不受影響。

   589:                 if(SBUF==((unsigned char code *)"開(kāi)啟投球")[ i])
C:0x16C8    E52B     MOV      A,0x2B
C:0x16CA    900208   MOV      DPTR,#0x0208
C:0x16CD    93       MOVC     A,@A+DPTR
C:0x16CE    B59911   CJNE     A,SBUF(0x99),C:16E2
   590:                 {
   591:                         i++;
C:0x16D1    052B     INC      0x2B

評(píng)分

參與人數(shù) 1黑幣 +50 收起 理由
admin + 50 共享資料的黑幣獎(jiǎng)勵(lì)!

查看全部評(píng)分

回復(fù)

使用道具 舉報(bào)

ID:378108 發(fā)表于 2022-6-30 18:04 | 顯示全部樓層
所以,不要?jiǎng)硬粍?dòng)就說(shuō)C的效率比匯編低,
低是和高手的匯編比較,一般的意大利面條匯編,趕不上C的效率
回復(fù)

使用道具 舉報(bào)

ID:401564 發(fā)表于 2022-7-1 10:20 | 顯示全部樓層
沒(méi)看出這里頭有什么文章來(lái)
匯編更多的優(yōu)點(diǎn)是占用空間小,這也得是高手來(lái)寫(xiě)才行,有時(shí)候匯編寫(xiě)出來(lái)的,占用空間比C還多
回復(fù)

使用道具 舉報(bào)

ID:624769 發(fā)表于 2022-7-1 15:42 | 顯示全部樓層
看效率,不能斷章取義, 你既然直接引用 SBUF 這個(gè)代碼是在中斷里面的吧? 你往前翻翻,看看是不是 有PUSH DPH   和 PUSH DPL   往后翻翻, 看看是不是有 POP DPH 和 POP DPL?
回復(fù)

使用道具 舉報(bào)

ID:624769 發(fā)表于 2022-7-1 15:49 | 顯示全部樓層
一個(gè) 明明 只需要 MOVC A,@A+PC  就能搞定的事情, 非要在 DPTR 里面走一圈。 這已經(jīng)說(shuō)明了效率的低下了。
C 的特點(diǎn),就是不在乎效率,事無(wú)巨細(xì),都用固定的套路。
如果親自動(dòng)手打匯編代碼,也是全用固定的套路,不如直接用C。沒(méi)必要學(xué)匯編。
如果不能在不同情況選用最合適的方式,說(shuō)明不適合學(xué)匯編。
真正能用好匯編的,這種編譯器編出來(lái)的匯編代碼,是看不上的。
回復(fù)

使用道具 舉報(bào)

ID:688692 發(fā)表于 2022-7-1 17:16 | 顯示全部樓層
MOVC A,@A+PC 你這個(gè)如何指向字符串?改PC?
回復(fù)

使用道具 舉報(bào)

ID:624769 發(fā)表于 2022-7-1 17:44 | 顯示全部樓層
cnos 發(fā)表于 2022-7-1 17:16
MOVC A,@A+PC 你這個(gè)如何指向字符串?改PC?

MOVC A,@A+PC
RET
DB   此處字符串

這種基本的查表格式,基本都知道吧?
回復(fù)

使用道具 舉報(bào)

ID:329625 發(fā)表于 2022-7-1 19:29 | 顯示全部樓層
指針用得好,事半功倍
回復(fù)

使用道具 舉報(bào)

ID:883242 發(fā)表于 2022-7-2 02:13 | 顯示全部樓層
本帖最后由 Hephaestus 于 2022-7-2 08:40 編輯
cnos 發(fā)表于 2022-7-1 17:16
MOVC A,@A+PC 你這個(gè)如何指向字符串?改PC?
  1. DOS 5.0 (038-N) MCS-51 MACRO ASSEMBLER, V2.2
  2. OBJECT MODULE PLACED IN DEMO.OBJ
  3. ASSEMBLER INVOKED BY:  C:\ASM51.EXE DEMO.ASM
  4.                        

  5. LOC  OBJ            LINE     SOURCE

  6.                        1     ; ENTRY: ACC = ARRAY SUBSCRIPT
  7. 0000 2404              2         ADD  A,#(LABLE2-LABLE1)
  8.                        3     LABLE1:
  9. 0002 83                4         MOVC A,@A+PC
  10. 0003 B5990C            5         CJNE A,SBUF,LABLE3
  11.                        6     LABLE2:
  12. 0006 57484154          7         DB  'WHAT A FUCK?'
  13. 000A 20412046
  14. 000E 55434B3F
  15.                        8     LABLE3:
  16. 0012 04                9         INC A
  17.                       10         END\
復(fù)制代碼

不算字符串,一共用了7個(gè)字節(jié)的代碼空間,你用了11個(gè),不過(guò)無(wú)所謂,茴香豆的茴字有幾種寫(xiě)法并不重要,4個(gè)字節(jié)空間無(wú)所謂的。
回復(fù)

使用道具 舉報(bào)

ID:688692 發(fā)表于 2022-7-2 08:27 | 顯示全部樓層
如果是多個(gè)命令字符串的核對(duì)和匹配,這個(gè)MOVC A,@A+PC 就沒(méi)有編碼上的優(yōu)勢(shì)了,而且一般也不要去動(dòng)用PC,SP這些敏感的寄存器。
當(dāng)然匯編有匯編的玩法。
我只是說(shuō)這樣寫(xiě)出來(lái)的C代碼能很方便的進(jìn)行命令字符串的核對(duì)匹配,而且代碼效率已經(jīng)非常高了。
回復(fù)

使用道具 舉報(bào)

ID:883242 發(fā)表于 2022-7-2 09:02 | 顯示全部樓層
cnos 發(fā)表于 2022-7-2 08:27
如果是多個(gè)命令字符串的核對(duì)和匹配,這個(gè)MOVC A,@A+PC 就沒(méi)有編碼上的優(yōu)勢(shì)了,而且一般也不要去動(dòng)用PC,SP這 ...

沒(méi)有動(dòng)PC
回復(fù)

使用道具 舉報(bào)

ID:624769 發(fā)表于 2022-7-2 12:52 | 顯示全部樓層
cnos 發(fā)表于 2022-7-2 08:27
如果是多個(gè)命令字符串的核對(duì)和匹配,這個(gè)MOVC A,@A+PC 就沒(méi)有編碼上的優(yōu)勢(shì)了,而且一般也不要去動(dòng)用PC,SP這 ...

首先, PC指針,你還真動(dòng)不了。其次,“SP 一般不要?jiǎng)印保筒荒軇?dòng) 是兩個(gè)概念,真的如果不能動(dòng),就像PC指針一樣,你壓根訪問(wèn)不了,玩C的話,SP確實(shí)相當(dāng)于不能動(dòng),那是類(lèi)似于給自己挖坑埋自己, 玩匯編的話,能玩好SP,是真的事半功倍的。
最后,在5樓的回復(fù),主要是跟沙發(fā)說(shuō)得,對(duì)于你的代碼,就C本身而言,代碼編譯后能成這樣,已經(jīng)算不錯(cuò)了。畢竟你要C編譯器,在特定場(chǎng)合,能通過(guò)切換 DPTR1 / DPTR0 來(lái)提高效率,或者借用PC指針,這些本身就是奢望。
回復(fù)

使用道具 舉報(bào)

ID:61140 發(fā)表于 2022-7-3 11:41 | 顯示全部樓層
188610329 發(fā)表于 2022-7-1 15:49
一個(gè) 明明 只需要 MOVC A,@A+PC  就能搞定的事情, 非要在 DPTR 里面走一圈。 這已經(jīng)說(shuō)明了效率的低下了。
...

不懂匯編不要亂發(fā)言,等你學(xué)過(guò)匯編才知道匯編的強(qiáng)大遠(yuǎn)不是C可比的.
你所指的只是C在KEIL里生成的匯編代碼,這個(gè)代碼還是跟據(jù)你寫(xiě)的C生成的,這個(gè)代碼好不好全在于你的C寫(xiě)的好不好,但并不說(shuō)明如果用匯編語(yǔ)言也要這樣寫(xiě).
回復(fù)

使用道具 舉報(bào)

ID:401564 發(fā)表于 2022-7-3 16:50 | 顯示全部樓層
xiaoyuxinke 發(fā)表于 2022-7-3 11:41
不懂匯編不要亂發(fā)言,等你學(xué)過(guò)匯編才知道匯編的強(qiáng)大遠(yuǎn)不是C可比的.
你所指的只是C在KEIL里生成的匯編代碼 ...

有的人總是喜歡以自己的知識(shí)水平去評(píng)價(jià)他人的水平
你怎么就知道人家不懂匯編?
你怎么就知道人家沒(méi)學(xué)過(guò)匯編?
你說(shuō)這話的依據(jù)是什么?
是不是以你自己的水平來(lái)分析別人所說(shuō)的?
也許人家算不上高手,可匯編還是懂得的,至少匯編是學(xué)過(guò)的,至少不會(huì)像你說(shuō)的這樣"等你學(xué)過(guò)匯編才知道匯編的強(qiáng)大"
回復(fù)

使用道具 舉報(bào)

ID:624769 發(fā)表于 2022-7-4 12:35 | 顯示全部樓層
xiaoyuxinke 發(fā)表于 2022-7-3 11:41
不懂匯編不要亂發(fā)言,等你學(xué)過(guò)匯編才知道匯編的強(qiáng)大遠(yuǎn)不是C可比的.
你所指的只是C在KEIL里生成的匯編代碼 ...

是你閱讀理解有問(wèn)題,還是說(shuō)你組詞造句不過(guò)關(guān)?

撇開(kāi)我懂不懂匯編先不討論,你覺(jué)得我不懂,就當(dāng)我不懂,這倒無(wú)所謂。

噴子也是需要有基礎(chǔ)素養(yǎng)的,就算要噴也要對(duì)著點(diǎn)子噴,就算亂扣帽子,也要表面上站得住腳吧?你不能把恐龍滅絕,怪在一個(gè)侏羅紀(jì)沒(méi)出生的人身上吧?

來(lái),你給我解釋一下, 哪個(gè)匯編代碼是  我 “寫(xiě)的C生成的” ?
回復(fù)

使用道具 舉報(bào)

ID:887371 發(fā)表于 2022-7-4 15:03 | 顯示全部樓層
xiaoyuxinke 發(fā)表于 2022-7-3 11:41
不懂匯編不要亂發(fā)言,等你學(xué)過(guò)匯編才知道匯編的強(qiáng)大遠(yuǎn)不是C可比的.
你所指的只是C在KEIL里生成的匯編代碼 ...

我學(xué)習(xí)mcu是從匯編開(kāi)始的,我很多項(xiàng)目都是用匯編做的。
使用匯編十幾年后,我才開(kāi)始用C做項(xiàng)目。
現(xiàn)在,假如這款mcu不支持C編譯,就不會(huì)被我用于實(shí)際項(xiàng)目。
我(使用匯編超過(guò)25年)應(yīng)該有資格說(shuō):你的知識(shí)體系有問(wèn)題,匯編沒(méi)你想象的那么強(qiáng)大。
1.直接用匯編和用C語(yǔ)言生成的機(jī)器語(yǔ)言相比,有可能是短小些,但這需要程序員花費(fèi)大量的精力(精神狀態(tài)還要極好)。項(xiàng)目簡(jiǎn)單點(diǎn)還好說(shuō),稍復(fù)雜些就沒(méi)法做到。
2.不同MCU的匯編指令是不同的,需要花費(fèi)很多精力和時(shí)間適應(yīng)。
3.現(xiàn)在mcu速度快、ROM大。匯編相比C的那點(diǎn)好處已經(jīng)沒(méi)有任何意義。
回復(fù)

使用道具 舉報(bào)

ID:1008383 發(fā)表于 2022-7-11 16:31 | 顯示全部樓層
可以,指針還是很方便的
回復(fù)

使用道具 舉報(bào)

ID:130230 發(fā)表于 2022-7-11 19:07 | 顯示全部樓層
C怎么可能比匯編效率高。
回復(fù)

使用道具 舉報(bào)

ID:401564 發(fā)表于 2022-7-11 21:34 | 顯示全部樓層
jizhongbiao 發(fā)表于 2022-7-11 19:07
C怎么可能比匯編效率高。

C有時(shí)候效率是比匯編高的,并不是說(shuō)匯編效率低,而是寫(xiě)這個(gè)匯編的人技術(shù)不行,導(dǎo)致寫(xiě)出一堆比C效率還低的代碼出來(lái)
并不是每個(gè)用匯編的都是高手,在這個(gè)時(shí)候,匯編效率就要比C低,而且更容易出問(wèn)題
我當(dāng)初剛開(kāi)始學(xué)匯編的時(shí)候,經(jīng)常出現(xiàn)這種問(wèn)題,現(xiàn)在也一樣,所以,我改用C了
回復(fù)

使用道具 舉報(bào)

ID:883242 發(fā)表于 2022-7-11 23:18 | 顯示全部樓層
Y_G_G 發(fā)表于 2022-7-11 21:34
C有時(shí)候效率是比匯編高的,并不是說(shuō)匯編效率低,而是寫(xiě)這個(gè)匯編的人技術(shù)不行,導(dǎo)致寫(xiě)出一堆比C效率還低的代 ...

看平臺(tái),像ARM這種RISC結(jié)構(gòu)的,很難寫(xiě)出比c編譯器效率更高的代碼,很多人一看RISC不就是精簡(jiǎn)指令集嗎?很簡(jiǎn)單,但實(shí)際上精簡(jiǎn)指令集的復(fù)雜組合是非常難于掌握的,我見(jiàn)過(guò)幾個(gè)試圖寫(xiě)ARM匯編的,沒(méi)人能寫(xiě)出比c編譯器效率更高的代碼。

8位單片機(jī)是另一個(gè)故事了,像STM8源自曾經(jīng)是高大上CPU的6502,寫(xiě)出比c編譯器更高效的匯編也挺難,但是能做到。8051的結(jié)構(gòu)要簡(jiǎn)陋的多,寫(xiě)出比c編譯器高的代碼相對(duì)容易。最蹩腳的是Microchip PIC16單片機(jī),設(shè)計(jì)之初的目標(biāo)是用最少的晶體管數(shù)量實(shí)現(xiàn)完整功能,就沒(méi)想過(guò)用高級(jí)語(yǔ)言,c編譯器出來(lái)的代碼怎么看怎么擰巴和不順眼,這種單片機(jī)只要智力正常,不可能寫(xiě)出比c編譯器更垃圾的代碼。
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 日韩在线视频免费观看 | 亚洲二区在线 | 国产特一级黄色片 | 久久精品亚洲一区 | www亚洲免费国内精品 | 久久免费精品 | 亚洲欧美中文日韩在线v日本 | 国产一区久久 | 久热电影 | 涩涩视频在线观看免费 | 黄网站色大毛片 | 亚洲一区不卡在线 | 欧美亚洲视频 | 在线观看中文字幕av | 中文字幕在线观看精品 | www.788.com色淫免费 | 国产精品一区久久久 | 精品视频在线播放 | 毛片日韩 | 91一区二区 | 国产亚洲一区精品 | 亚洲第一区久久 | 一级片成人 | 男女国产视频 | 日韩av成人 | 欧美日本一区 | 激情黄色在线观看 | 欧美网址在线观看 | 91麻豆精品国产91久久久更新资源速度超快 | 日韩中文在线观看 | 日日干天天操 | 亚洲黄色在线免费观看 | 中文字幕av免费 | 国产精品免费一区二区三区 | 久久99精品久久久 | 天天操天天舔 | 97久久国产| 亚洲精品久久国产高清情趣图文 | 在线观看视频h | 国产欧美精品一区二区色综合朱莉 | 亚洲精品永久免费 |