彙編指令延時的精確解釋,組合語言延時程式怎麼解釋?

2022-09-30 09:00:09 字數 4047 閱讀 8145

1樓:匿名使用者

2*123+2=248us中,的+2即分別是指令mov r6,#123 和指令nop各一秒,即是所內迴圈。

(248+2)*200+1=50.001ms 中+2即是指令djnz r7,dly1的用時,(248+2)*200即外迴圈,最後那個+1即指令mov r7,#200的用時,不是ret的用時。我也喜歡微控制器有時間交流下我的qq是379078553

2樓:匿名使用者

delay: mov r7,#200 ;單週期指令1us,時間1usdly1: mov r6,#123;單週期指令1us ,時間200*1us

nop ;單週期指令1us ,時間200*1usdly2: djnz r6,dly2 ;雙週期指令2us,時間123*200*2us

djnz r7,dly1 ;雙週期指令2us,時間200*2usret ;單週期指令1us,時間1us

總共延時時間為:

t=1us+200*1us+200*1us+123*200*2us+200*2us+1us

=50012us

=50.012ms

3樓:匿名使用者

第一:+2us是mov r6,#123 和nop 各佔1us,2*123+2=248us 是從dly1開始到djnz r6,dly2 這句的時間。

第二:+1us是第一句delay: mov r7,#200的時間,(248+2)*200+1=50.001ms是從第一句到最後的總時間。

微機組合語言例題關於精確的軟體延時不懂,請大家幫我解釋一下,那這裡n為多少,17是什麼?

4樓:

n是你寫程式時自己設定的,可以為任何整數。

設cpu的時脈頻率為5mhs,試編寫一個延時1ms的程式。

del_1ms: mov cx, n ;4*1 這裡的4是指指令mov cx, n 執行一次需要4個時鐘週期,1為執行次數

next: nop ;3*n 與上面相同 3 為時鐘週期 n為執行次數

nop ;3*n 與上面相同

loop next ;17/5( 迴圈/不迴圈)17的意思是迴圈沒結束時 執行loop next 指令需要17個時鐘週期,迴圈結束時 loop next指令需要5個時鐘週期

所以總時鐘週期數 = 4+3n+3n+17(n-1)+5

時鐘週期 = 1/cpu 的時脈頻率 = 1/5m =0.2us

那麼總共需要的時間就是 0.2 * (4+3n+3n+17(n-1)+5) us

延時為1ms的話 就是 令0.2 * (4+3n+3n+17(n-1)+5) = 1000us

解出n就行了。解出來n = 218 因為時鐘週期數只能是整數。

希望能幫到你。

組合語言延時程式怎麼解釋?

5樓:

編碼程式的一種變式。

cpu在執行語句的時候也是需要耗時的,只是cpu執行速度太快,我們沒辦法看清楚,所以如果cpu執行語句越多,所需要的時間就越多,根據這個原理,就可以通過讓cpu隨便執行語句,起到延時的效果,這被稱為「軟體延時」,cpu執行一條指令耗時近似1us,就可以通過這種辦法加上迴圈就可以實現延時效果。

程式在不同主頻下延時不一樣,但這裡面一定是個比例關係。打個比方,你的**是在主頻為1ghz下的延時,這個引數你延時是5s。但換到2ghz下,程式不改動的話,延時是2.5秒。

在彙編**中獲取到當前的主頻,那麼就可以做成自適應的效果,自動按比例改變延時程式內部的計數量。

若是高階語言,比如vs,就能用gettickcount()來精確延時5s了。其實只要能讀出當前時間的精確值,比如直接讀bios時間,那麼就能實現比較精確的5s延時了。不同的cpu在讀精確時間的函式上是一樣的。

求解釋!!!組合語言:延時程式

6樓:諫玉芬巨集鵑

;很簡單的一個小程式,以p1.0為例,任意一個io都可以jnbp1.0,back;為低電平時不延時,直接去執行你想處理的事情

movr2,#9

;為高則進入延時20us

delay:

djnz

r2,delay

back:;判斷為高低電平後(延時或不延時後)進行處理的程式back是一個標號,程式跳轉的地址。

普通微控制器時鐘為12分頻上,12m晶振,所以機器週期為1us.

延時20us=2+18

如果你的延時精度很高的話,建議你用示波器去看下。

7樓:生活如歌

需要注意的一點就是djnz指令是2週期的,所以你的時間是迴圈次數乘以2.

delay:mov r7,#250

del1:mov r6,#100

del2:mov r5,#10

djnz:r5,$;2個機器週期

djnz:r6,dl2

djnz r7,dl1

2*10*100*250=500000us=0.5s以上時間只是大概值,沒有考慮其它指令的週期,但影響不大。

8樓:匿名使用者

delay:mov r7,#250 第一層迴圈250次

del1:mov r6,#100 第二層迴圈100次

del2:mov r5,#10 第三層迴圈10次

djnz:r5,$ 如果r5不等於0,則跳轉到本行,也就是空轉10次

djnz:r6,dl2 如果r6不等於0,則跳到dl2行,給r5賦值

djnz r7,dl1 如果r7不等於0,則跳到dl1行,給r6賦值

所以總的空轉迴圈次數是250*100*10=250000次,通過調節r5,r6,r7值來控制延時時間

組合語言中,為什麼這個可以實現延時?(ps:我知道是空迴圈,但是這是怎麼精確控制時間的?)

9樓:匿名使用者

由於系統主頻是可以設定的,那麼系統的時鐘週期就可以計算出來

程式主要是進行3fffhxffffh次減法語句dec cx,以及jne x1,3ffffh次dec ax和jne x1

你查一下這些語句執行要耗費幾個時鐘週期,然後乘以執行次數,即得到延時時間

51微控制器,求用組合語言編寫延時1小時的子程式,要精確到秒級別

10樓:匿名使用者

延時一小時,這麼長,應該要用定時器,不能用迴圈的方式。

org 00h

ajmp main

org 0bh

ajmp t0int0

org 30h

main:

mov sp,#60h

mov r4,#20

mov tmod,#01h

mov th0,#3ch ;12m晶振時定時初值取#3cb0h,還可細調如 tl=#0b7h,可以更準

mov tl0,#0b7h

setb ea

setb et0

setb tr0

ajmp $

t0int0:

mov th0,#3ch ;定時中斷子程式。重灌定時常數mov tl0,#0b7h

djnz r4,rti ;未1s,跳出中斷mov r4,#20

inc 26h ;秒+1

mov a,26h

cjne a,#60,rti

mov 26h,#0

inc 27h ;分+1

mov a,27h

cjne a,#60,rti

mov 27h,#0

inc 28h ;時+1

mov a,28h

cjne a,#24,rti

mov 28h,#0

rti:

retiend

11樓:做而論道

微控制器時鐘,時分秒。

時,即每隔一小時,加一次一。

利用這種程式即可,不用單獨編寫子程式。

組合語言資料偽指令DUP用法,組合語言中的dup有什麼作用

10 dup 1 重複定義了10個字元素,初始值為1,佔用10 2 20個位元組。5 dup 重複定義了5個字元素 其初始值實際為0 佔用5 2 10個位元組 因此總共佔用30個位元組。具體分析 在彙編定義變數的時候會用到dup,變數名 型別 初值表,dup用於把一個相同值賦值若干次,重複次數 du...

組合語言中ADD加法指令的問題關於組合語言中ADD指令的問題

1.0ac72h只是一個表示方法,跟ac72h是一樣的含義。ax裡還是儲存16位的值。之所以在前面多加一個0,是因為編譯器不識別以字母開頭的立即數。算是立即數表示的一種規則吧,或者可以理解為是一種語法規則。只要是十六進位制數的 最後加h 首位又是字母的,必須前面新增個0。這樣也不容易引起歧義。如果不...

什麼是組合語言,什麼是彙編和組合語言?

組合語言就是計算機語言,它是有0,1組成的.通俗的說就是我們人和計算機交流的語言.介於機器語言和高階語言之間的一種 什麼是彙編和組合語言?彙編語copy言是一種低階計算bai機程式語言,說 低階du 並不是指語言的功能和複雜程度,而是它zhi出現在計算機發展史dao的早期,但現在仍廣泛應用於計算機開...