彙編 延時子程式,組合語言中延時子程式的問題

時間 2021-08-14 23:01:27

1樓:匿名使用者

daily proc near

mov cx,2000h

d0:mov ax,0ffffh

d1:dec ax

jz d1

loop d0

daily endp

延時大概是0.33s

其實延時跟cpu有很大關係,不能用軟體精確計算,可以用8254實現,硬體和軟體功能具有邏輯上的等效性。

2樓:匿名使用者

用delay來產生延時在要求較高的場合不大合適。

可呼叫系統時間來產生準確的延時,並且可控制延遲時間temp: mov ah,2ch

int 21h

add dh,5 ;獲得時間.dh為 當前的秒數,5秒可以自己選擇

push dx

wait:

pop dx

mov al,dh

push dx

mov ah,2ch ;新的時間

int 21h

cmp dh,al

jb wait ;小於5秒的話繼續查詢歡迎討論

3樓:

多麼準確?時間範圍多少?

微控制器就用定時器,pc就用bios提供的延時中斷呼叫(好像是68h中斷),去查查書吧。

4樓:前皛石鴻福

首先看第二組,d2:

movr2,#05h

djnz

r2,d2

這是乙個死迴圈,出不來。

然後看第一組,

d1:mov

r2,#05h

d2:nop

djnz

r2,d2

,執行五遍d2。然後檢查r1,不為0,在執行五遍d2,然後檢查r1,為0。結束

再看第三組

d2:nop

djnz

r2,d2

執行五遍d2,然後檢查r1,不為0,跳到d1,但是此時r2為0,減去一後變成0ffh,執行256次d2,r2變為0,然後在檢查r1,為0後返回。

用組合語言編寫乙個延時1s的子程式

5樓:湯旺河邊

; 本程式通過編譯,執行正確

code segment

assume cs:code,ds:code; -----------------------------------------

; subroutine 延時指定的時鐘嘀嗒數; 入口:

; didas=時鐘嘀嗒數(1秒鐘約嘀嗒18.2次,10秒鐘嘀嗒182次。若延時不是秒的10數次倍,誤差稍微大點)

delay1s proc near

push dx

push cx

xor ax,ax

int 1ah

mov times,dx

mov times[2],cx

read_time: xor ax,axint 1ah

sub dx,times

sbb cx,times[2]

cmp dx,didas

jb read_time

pop cx

pop dx

rettimes dw 0,0

delay1s endp

; -----------------------------------------

didas equ 18

start: call delay1***it_proc: mov ah,4ch ;結束程式int 21h

code ends

end start ;編譯到此結束

6樓:

是51的彙編麼?晶振頻率是12mhz的,定時器是1ms,迴圈1000為1s,使用是查詢方式,需要中斷方式可以再幫你寫,不知道你要是1s精度要求高不高,我沒有去精確計算,這個不是非常高!!

delay1s:

mov r1,#1000

del_3:

mov th0,#0fch

mov tl0,#18h

setb tr0

del_1:

jbc tf0 del_2

jmp del_1

del_2:

djnz r1 del_3ret

組合語言中延時子程式的問題

7樓:匿名使用者

8086組合語言利用時鐘中斷精確些的延時的精度只能達到1/18.2秒。比這個還要高的要求只能利版用指令執行的時鐘權週期數來設計了,這樣編制的延時程式和cpu的頻率緊密相關,要編制通用些的,只能在程式中先進行檢測,依據檢測結果自動調整延時程式中的引數。

8樓:匿名使用者

delay:

mov r2,#3

djnz r2,$

nopret

我想請教一下有關組合語言延時子程式的問題?下面的子程式有點看不懂,請大家幫忙解釋一下,謝謝!

9樓:匿名使用者

這個**其實還是很清楚明了的。

dely1: push ax ;延時子程式,這裡push ax 其實可以不要的,因為ax沒有做任何改動

push cx ; 因為使用了cx來計數,所以先儲存cx進堆疊

mov cx,30h ; 迴圈30h也就是48次

dly1: call dely2 ; 在次呼叫乙個延時子程式

loop dly1 ; 迴圈,48次,不到次數則繼續迴圈

pop cx ; 恢復被保護的原來cx的值

pop ax ; 恢復被保護的原來ax的值

ret ; 過程返回

dely2: push cx ; 內部呼叫的過程,也需要把cx當前的值保護進堆疊

mov cx,8000h ; 迴圈8000h也就是32768次

loop $ ; $ 表示當前位址,也就是自己的位址,32768次迴圈不到則原地踏步

pop cx ; 恢復被保護的cx的值

ret ; 過程返回

用組合語言編寫延時1S的子程式,用組合語言編寫乙個延時1S的子程式

湯旺河邊 本程式通過編譯,執行正確 code segment assume cs code,ds code subroutine 延時指定的時鐘嘀嗒數 入口 didas 時鐘嘀嗒數 1秒鐘約嘀嗒18.2次,10秒鐘嘀嗒182次。若延時不是秒的10數次倍,誤差稍微大點 delay1s proc nea...

求組合語言延時程式,延時10毫秒的延時程式

做而論道 第一 組合語言有好多種。第二 延時時間和你用的主頻有關。這兩個問題,樓主說明一下先。 大別山的蝸牛 如下 delay10s lcall delay100ms inc r1 cjne r1,100,delay10smov r1,0 retdelay100ms 誤差 0usmov r7,100...

關於組合語言中的標誌位,組合語言中 關於標誌位的問題

鯤鵬展翅 psw中的8個標誌位,在debug下用符號表示,每個標誌位有兩種取值,分別為0和1,各自對應不同的符號。 習明 標誌名設定 nv 清除 ov 溢位 方向 dn 減 up 增 中斷 ei 啟用 di 禁用 正負 ng 負 pl 正 零 zr 0 nz 非0 輔助進製 ac 進製 na 不進製...