西門子S7-200PLC由“冒泡法”排序算法的逆向思考

發(fā)布時間:2024-02-02
在一些c語言資料上看到,“冒泡法”排序一般是從最后一個數據開始,向地址小的方向相鄰兩個數據比較,并按照從小到大或者從大到小排序的一種算法。在數據比較、移動的過程中,數據的運動,看起來好像水中的氣泡向上運動。故而稱之為“冒泡法”排序。
“冒泡法”排序,在知道數據的起始地址、數據個數、數據類型后,需要算出最后一個數據的地址,并從最后的一個地址開始運算排序。我在想,為什么不能從數據的起始地址開始排序呢,如果采用這種“下沉法”排序,還能省去計算數據的結束地址,程序應該會更簡潔。于是自己就試著寫了一下“下沉法”排序的plc程序代碼,并測試通過。
排序環(huán)境:224cpu,從vb1000開始連續(xù)20個整數,從小到大排序?!跋鲁练ā迸判蛩惴▍⒖即a如下:
//******************給外循環(huán)體、內循環(huán)體的循環(huán)次數賦初值***********************
ld sm0.0 //開始執(zhí)行從小到大的排序程序
movw 19, lw2 //給外循環(huán)次數(數據個數-1)賦初值
movw 19, lw6 //給內循環(huán)次數(數據個數-1)賦初值
//*******************建立外循環(huán)體并定義排序的其實地址*****************************
for lw0, +1, lw2 //for外循環(huán)體循執(zhí)行l(wèi)w2次
movd &vb1000, ac1 //將v區(qū)的起始地址賦給ac1,定義排序的起始地址
//**************建立內循環(huán)體并開始進行相鄰的兩個數據比較、移動****************
for lw4, +1, lw6 //for內循環(huán)體循執(zhí)行l(wèi)w6次
movd ac1, ac2 //把當前ac1里面的地址存儲到ac2里面
+d +2, ac2 //ac2當前地址+2,存入ac2
ldw< *ac2, *ac1 //如果ac2指向的地址里面的內容小于ac1指向的地址里面的內容
movw *ac1, lw8 //那么將當前兩個地址里面的內容互換
movw *ac2, lw10 //如果ac2指向的地址里面的內容不小于ac1指向的地址里面的內容
movw lw8, *ac2 //那么當前兩個地址里面的內容保持不變
movw lw10, *ac1 //如果把小于比較指令改成大于比較指令,那么數據就是從大到小排序
ld sm0.0
+d +2, ac1 //ac1當前地址+2,存入ac1
next //跳轉到for內循環(huán),如果內循環(huán)執(zhí)行結束,程序往下執(zhí)行
//*******************內循環(huán)執(zhí)行結束,進入外循環(huán)執(zhí)行*****************************
decw lw6 //內循環(huán)體執(zhí)行結束,將內循環(huán)體的循環(huán)次數減1
next //跳轉到for外循環(huán),如果外循環(huán)執(zhí)行結束,程序往下執(zhí)行
上面代碼基本采用臨時變量作運算的,其實還可以將其封裝成一個子程序,實現多次調用。
上一個:華為榮耀8怎么設置雙4G
下一個:如何洽談工程預算與裝修合同?讓貓膩無處可藏!

surface更換硬盤,微軟surface更換硬盤
抵押物能否列入破產財產
RC0100FR-071K4L,01005 1.4KΩ 1% 1/32W 電阻
洛克王國英魂爭霸(洛克王國英魂印記怎么獲得)
選擇感應傳感器時(感應傳感器的類型有哪些)
菊花矮化病的防治方法
LRE0805-2CR0015F5,旺詮合金0805 0.0015Ω ±1% 0.5W
蘇州太湖牛仔風情度假村好玩嗎 附游玩項目
四核處理器英文怎么說,和四核處理器用英語怎么說
酷狗歌曲怎么傳到蘋果5s上去,怎么把酷狗等音樂軟件的歌曲傳到蘋果手機里
十八禁 网站在线观看免费视频_2020av天堂网_一 级 黄 色 片免费网站_绝顶高潮合集Videos