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

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

QQ登錄

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

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

請(qǐng)問(wèn)關(guān)于單片機(jī)C語(yǔ)言尋址方式與匯編語(yǔ)言棧的問(wèn)題

[復(fù)制鏈接]
ID:73992 發(fā)表于 2023-4-11 20:11 | 顯示全部樓層 |閱讀模式
一:請(qǐng)問(wèn)一下c語(yǔ)言尋址方式有幾種,以怎樣的語(yǔ)句流程實(shí)現(xiàn)以下的需求的
1:  80H地址 = FFEFH地址的值+P1端口的值       80H=FFEFH+P1         用c語(yǔ)言如何表達(dá)



2:  80H地址 =變量 A的值+P1端口的值
         80H = A+P1           用c語(yǔ)言如何表達(dá)

3: 80H地址 =變量 A的值+0x35
         80H = A+0x35        用c語(yǔ)言如何表達(dá)

4: 80H地址 =數(shù)字0x35+數(shù)字0x35
       80H =0x35+0x35      用c語(yǔ)言如何表達(dá)

二:請(qǐng)問(wèn)關(guān)于“用棧傳遞參數(shù)”這個(gè)詞語(yǔ)。我寫(xiě)匯編程序的時(shí)候,也嘗試用 push  pop給地址賦值,但是用mov指令也可以達(dá)到
       將80h的值賦給81h    mov 81h,80h        
                               push 81h
                               push 80h
                               pop 81h
                               pop 80h         還是棧傳遞參數(shù)比mov指令有特殊的意義
回復(fù)

使用道具 舉報(bào)

ID:883242 發(fā)表于 2023-4-11 20:55 | 顯示全部樓層
1)前面4個(gè)問(wèn)題你沒(méi)有說(shuō)明80H位于哪個(gè)空間?是idata、pdata還是xdata,所以無(wú)法回答。

2)堆棧傳遞函數(shù)是標(biāo)準(zhǔn)c語(yǔ)言的做法,但是c51不是標(biāo)準(zhǔn)c語(yǔ)言,8051這個(gè)內(nèi)核太弱了用標(biāo)準(zhǔn)c語(yǔ)言實(shí)現(xiàn)過(guò)于浪費(fèi)資源,所以你的問(wèn)題無(wú)意義。
回復(fù)

使用道具 舉報(bào)

ID:69038 發(fā)表于 2023-4-11 21:34 | 顯示全部樓層
我記得用MOV會(huì)改變C和DC位,而PUSH、POP則不會(huì)。
回復(fù)

使用道具 舉報(bào)

ID:883242 發(fā)表于 2023-4-12 01:13 | 顯示全部樓層
zhuls 發(fā)表于 2023-4-11 21:34
我記得用MOV會(huì)改變C和DC位,而PUSH、POP則不會(huì)。

通過(guò)ACC的MOV當(dāng)然會(huì)改變PSW標(biāo)志位,然而mov 81h,80h這個(gè)不通過(guò)ACC的指令???
注:mov 81h,80h這句話(huà)也是錯(cuò)的,指令本身沒(méi)問(wèn)題,后面的兩個(gè)操作數(shù)大于7fh在邏輯上錯(cuò)了。
回復(fù)

使用道具 舉報(bào)

ID:73992 發(fā)表于 2023-4-12 07:06 來(lái)自觸屏版 | 顯示全部樓層
Hephaestus 發(fā)表于 2023-4-11 20:55
1)前面4個(gè)問(wèn)題你沒(méi)有說(shuō)明80H位于哪個(gè)空間?是idata、pdata還是xdata,所以無(wú)法回答。

2)堆棧傳遞函數(shù) ...

80h是指用@R0,或者@R1 訪(fǎng)問(wèn)的那個(gè)128字節(jié)地址
回復(fù)

使用道具 舉報(bào)

ID:69038 發(fā)表于 2023-4-12 08:46 | 顯示全部樓層
Hephaestus 發(fā)表于 2023-4-12 01:13
通過(guò)ACC的MOV當(dāng)然會(huì)改變PSW標(biāo)志位,然而mov 81h,80h這個(gè)不通過(guò)ACC的指令???
注:mov 81h,80h這句話(huà)也 ...

不是很懂畢竟沒(méi)有系統(tǒng)地學(xué)過(guò),就是在翻書(shū)時(shí)看到的
回復(fù)

使用道具 舉報(bào)

ID:624769 發(fā)表于 2023-4-12 16:23 | 顯示全部樓層
你的問(wèn)題,必須匯編 和 C 都懂得才能回答,但是,你的描述,又非常的不確切,讓人無(wú)從切入,不如你先把你一 當(dāng)中的問(wèn)題用匯編表述出來(lái),然后,再跟你講 C 里面如果實(shí)現(xiàn)吧。

先回答你  二的問(wèn)題。
MOV   81H,80H
是把  81H地址的值  賦值到 80H地址, 最終的結(jié)果,是81H 和 80H 地址的 內(nèi)容 完全相等。

而,
PUSH 81H
PUSH 80H
POP 81H
POP 80H
是把  81H  和  80H  兩個(gè)地址的 內(nèi)容互相交換,最終  81H 地址的內(nèi)容 為原  80H地址的內(nèi)容,而80H 地址的內(nèi)容為原81地址的內(nèi)容,要達(dá)到這個(gè)目的,不使用堆棧的話(huà),不能簡(jiǎn)單地用MOV 要用如下指令:
XCH  A,80H
XCH  A,81H
XCH  A,80H
這個(gè)最終結(jié)果和通過(guò)堆棧 交換數(shù)據(jù)的結(jié)果是一樣的。效率也要高一點(diǎn),所以,用堆棧交換數(shù)據(jù),實(shí)際沒(méi)有太大的意義。
回復(fù)

使用道具 舉報(bào)

ID:73992 發(fā)表于 2023-4-12 17:13 | 顯示全部樓層
188610329 發(fā)表于 2023-4-12 16:23
你的問(wèn)題,必須匯編 和 C 都懂得才能回答,但是,你的描述,又非常的不確切,讓人無(wú)從切入,不如你先把你一 ...

第一個(gè)問(wèn)題,是想知道c語(yǔ)言對(duì) 80h地址 片外地址 端口p1  變量 的值 立即數(shù) 的語(yǔ)句流程
1:MOV
      MOV DPTR,#FFEFH
     MOV A,@DPTR
     
     
回復(fù)

使用道具 舉報(bào)

ID:883242 發(fā)表于 2023-4-12 17:19 | 顯示全部樓層
lyonkon 發(fā)表于 2023-4-12 07:06
80h是指用@R0,或者@R1 訪(fǎng)問(wèn)的那個(gè)128字節(jié)地址

那你聲明變量的時(shí)候加個(gè)idata修飾就可以了,指定80h地址毫無(wú)意義。
回復(fù)

使用道具 舉報(bào)

ID:73992 發(fā)表于 2023-4-12 17:25 | 顯示全部樓層
188610329 發(fā)表于 2023-4-12 16:23
你的問(wèn)題,必須匯編 和 C 都懂得才能回答,但是,你的描述,又非常的不確切,讓人無(wú)從切入,不如你先把你一 ...

1:MOV R0,#80H
  MOV DPTR,#FFEFH
   MOV A,@DPTR
   ADD A,P1
   MOV @R0,A
我主要想知道,c語(yǔ)言片內(nèi),片外,尋址語(yǔ)句方式流程。并且運(yùn)算的時(shí)候是不是先將地址中的值取到變量再計(jì)算。
回復(fù)

使用道具 舉報(bào)

ID:883242 發(fā)表于 2023-4-12 17:38 | 顯示全部樓層
lyonkon 發(fā)表于 2023-4-12 17:25
1:MOV R0,#80H
  MOV DPTR,#FFEFH
   MOV A,@DPTR

片內(nèi)0~7fh是data(可以不寫(xiě)),80h以上要加idata修飾,片外用pdata或者xdata修飾,如果你真的懂了匯編應(yīng)該能馬上理解pdata和xdata的區(qū)別。
回復(fù)

使用道具 舉報(bào)

ID:624769 發(fā)表于 2023-4-12 20:35 | 顯示全部樓層
lyonkon 發(fā)表于 2023-4-12 17:25
1:MOV R0,#80H
  MOV DPTR,#FFEFH
   MOV A,@DPTR

方法一:
unsigned char idata *pd;
unsigned char xdata *px;
pd = 0x80;
px = 0xffef;
*pd = *px + P1;

方法二:
unsigned char idata temp1 _at_ 0x80;
unsigned char xdata temp2 _at_ 0xffef;
temp1 = temp2 + P1;

方法三:
*((unsigned char idata *)0x80) = *((unsigned char xdata *)0xffef) + P1;

以上三個(gè)方法,均可達(dá)到你匯編代碼的目的,至于到底該用哪種方法,隨著你C語(yǔ)言學(xué)習(xí)的深入,自己會(huì)有決斷。
回復(fù)

使用道具 舉報(bào)

ID:73992 發(fā)表于 2023-4-12 21:26 | 顯示全部樓層
188610329 發(fā)表于 2023-4-12 20:35
方法一:
unsigned char idata *pd;
unsigned char xdata *px;

依據(jù)您的例程,以下是我理解。c語(yǔ)言的尋址方式是通過(guò)聲明地址變量,進(jìn)行間接尋址。類(lèi)似與@RI,和@dptr。  *pd = *px + P1;可以以間接尋址的形式,參與運(yùn)算表達(dá)式。
非常感謝您的解答,我應(yīng)該理解了。
回復(fù)

使用道具 舉報(bào)

ID:1065084 發(fā)表于 2023-4-13 09:21 | 顯示全部樓層
lyonkon 發(fā)表于 2023-4-12 21:26
依據(jù)您的例程,以下是我理解。c語(yǔ)言的尋址方式是通過(guò)聲明地址變量,進(jìn)行間接尋址。類(lèi)似與@RI,和@dptr。  ...

匯編語(yǔ)言直接對(duì)應(yīng)機(jī)器碼,機(jī)器碼的重點(diǎn)是針對(duì)不同的機(jī)器乃至不同的型號(hào)操作都是不同的。

例如你用匯編訪(fǎng)問(wèn)寄存器,你是以寄存器的實(shí)際地址來(lái)訪(fǎng)問(wèn)的,而且就簡(jiǎn)單的MOV指令就分為MOV、MOVC、MOVX,在C中是沒(méi)有這三種MOV指令的區(qū)別,乃至你換到其他架構(gòu)系統(tǒng)也是直接轉(zhuǎn)移的,而你的匯編程序要全部重寫(xiě)一遍。

所謂的高級(jí)語(yǔ)言就是通用性更強(qiáng),適配性更強(qiáng)。比如你用c在51 和32之間轉(zhuǎn)換使用,只說(shuō)算法層面不說(shuō)外設(shè),你只需要把例如int等數(shù)據(jù)變量重新調(diào)整一下。

你強(qiáng)制讓c去訪(fǎng)問(wèn)固定地址,編程上是可以的,但是沒(méi)有意義,因?yàn)閷?duì)于數(shù)據(jù)來(lái)說(shuō)存無(wú)論存儲(chǔ)在20H還是21H都是一樣的,可能你說(shuō),不知道地址怎么行,存儲(chǔ)器用滿(mǎn)了怎么辦?編譯器:不用在意我,我會(huì)出手。編譯器在編譯時(shí)會(huì)自動(dòng)檢測(cè)剩余內(nèi)存和其他資源以及錯(cuò)誤,所以,不要擔(dān)心

評(píng)分

參與人數(shù) 1黑幣 +20 收起 理由
admin + 20 回帖助人的獎(jiǎng)勵(lì)!

查看全部評(píng)分

回復(fù)

使用道具 舉報(bào)

ID:883242 發(fā)表于 2023-4-13 12:18 | 顯示全部樓層
yuxuesuixing 發(fā)表于 2023-4-13 09:21
匯編語(yǔ)言直接對(duì)應(yīng)機(jī)器碼,機(jī)器碼的重點(diǎn)是針對(duì)不同的機(jī)器乃至不同的型號(hào)操作都是不同的。

例如你用匯編 ...

標(biāo)準(zhǔn)c當(dāng)然不區(qū)分,但是C51會(huì)區(qū)分這三種指令。
MOV對(duì)應(yīng)data(默認(rèn),可以不寫(xiě)),idata和SFR空間
MOVC對(duì)應(yīng)code空間
MOVX對(duì)應(yīng)pdata和xdata空間

高級(jí)語(yǔ)言通用性強(qiáng),但是死忒慘這個(gè)螺螄殼里面很難做道場(chǎng)的,所以C51沒(méi)有通用性。
回復(fù)

使用道具 舉報(bào)

ID:73992 發(fā)表于 2024-2-20 17:45 | 顯示全部樓層
謝謝各位朋友的解答。
直到現(xiàn)在才有能力描述這個(gè)問(wèn)題,當(dāng)時(shí)是想模仿c語(yǔ)言寫(xiě)一套通用的命令子程序集,寫(xiě)程序時(shí)候可以隨意調(diào)。因?yàn)椴恢谰唧w需要什么功,就相當(dāng)于沒(méi)找到需求就擱置了。不曾想現(xiàn)在有了需求;
無(wú)標(biāo)題.png

上面這個(gè)程序,因?yàn)镽0,R1,在子程序中要使用,沒(méi)有剩下其他寄存器可用 R0,R1,又無(wú)法入,將R0,R1先寫(xiě)入內(nèi)存 當(dāng)棧使用妥協(xié)辦法。

下面這個(gè)程序,將相同功能的程序?qū)懥藘杀椋蓚(gè)固化值。因?yàn)橹皇褂靡淮危酝迭c(diǎn)懶感覺(jué)沒(méi)有問(wèn)題。
無(wú)標(biāo)題1.png


現(xiàn)在的問(wèn)題是,調(diào)用子程  要傳遞值進(jìn)去,然后子程序執(zhí)行完了結(jié)果還要留著。目前我是使用以下方法,
使用內(nèi)存?zhèn)鬟f值。請(qǐng)老師指點(diǎn)一下。
無(wú)標(biāo)題2.png



回復(fù)

使用道具 舉報(bào)

ID:883242 發(fā)表于 2024-2-20 18:03 | 顯示全部樓層
R0、R1一共有4組,用register bank區(qū)分,可以不需要壓棧保護(hù)。樓主從去年就開(kāi)始搞cortex-M和51匯編,為什么到現(xiàn)在還沒(méi)有入門(mén)?
回復(fù)

使用道具 舉報(bào)

ID:73992 發(fā)表于 2024-2-20 22:27 | 顯示全部樓層
Hephaestus 發(fā)表于 2024-2-20 18:03
R0、R1一共有4組,用register bank區(qū)分,可以不需要壓棧保護(hù)。樓主從去年就開(kāi)始搞cortex-M和51匯編,為什么 ...

這樣可以將相同性質(zhì)的數(shù)據(jù)放在一個(gè)寄存器頁(yè)面。謝謝!
一直在調(diào)試stm32硬件,過(guò)程中匯編程序不復(fù)雜。硬件現(xiàn)在調(diào)試差不多了。著手寫(xiě)復(fù)雜點(diǎn)程序的時(shí)候,發(fā)現(xiàn)了問(wèn)題。程序之間數(shù)據(jù)傳遞,我一直都是放在指定內(nèi)存中使用的。我覺(jué)得這樣可能不規(guī)范,所以想規(guī)范一下。相當(dāng)于匯編語(yǔ)言現(xiàn)在才開(kāi)始學(xué)。
如果是arm內(nèi)核,里面R0--R15只有一個(gè)頁(yè)面,程序之間傳遞數(shù)據(jù)
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

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

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

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 亚欧洲精品在线视频免费观看 | 日韩在线免费观看视频 | 中文字幕亚洲综合 | 日韩一级片视频 | 国产精品久久久久久久久久久久久 | 久久久久久久久久久久久久 | 精品国产乱码一区二区三 | 色黄大色黄女片免费中国 | 国产在线网站 | 97视频国产 | 亚洲天堂网在线观看 | 999毛片| aa一级片 | 国产第五页 | 91在线看片 | 伊人影院久久 | 秘密爱大尺度做爰呻吟 | 天堂av片| 亚洲欧美日韩一区二区三区四区 | 韩日一级片 | 国产精品毛片va一区二区三区 | 最近日本中文字幕 | 最近中文字幕在线观看 | 成人毛片一区二区三区 | 国产精品99精品久久免费 | 日韩不卡免费视频 | 精品aaa| 99re在线观看 | 免费的黄色小视频 | 久久精品一区二区 | 日韩欧美在线观看视频 | 成人一级黄色片 | 日韩精品少妇 | 97人人插| 一区二区三区久久久 | 欧美在线网站 | 日韩免费一区二区三区 | 国产一区精品在线观看 | 91亚洲精品在线 | 在线成人免费视频 | 成人精品一区二区三区 |