1樓:匿名使用者
這不是返回自己本身迴圈執行,而是跳轉到子程式的第一行迴圈而已,有什麼不可以的,迴圈結構,任何地方都可以的。
但有一點,子程式不論迴圈多少次,最終必須執行一行返加指令ret,也就是子程式必須要有一條ret指令,你的子程式最後是缺少一行ret指令的,加上了就可以的。
組合語言子程式是如何定義的?
2樓:大野瘦子
這樣定義的:
子程式名 proc near|farret子程式名 endp
子程式名相當於標號,表示本過程的符號地址。過程有near和far兩種型別,far型的過程可供段間呼叫,near型過程僅供段內呼叫。
在一個過程中,至少要有一條返回指令ret,它可以書寫在過程中的任何位置,但是過程執行的的最後一條指令一定是ret。
3樓:匿名使用者
組合語言子程式以proc語句行開始,以endp語句行結束。如:
p1 proc near(或far)..........................
p1 endp
在主程式中用call p1呼叫。
主程式和子程式之間傳遞引數通常通過棧來進行,當然也可以用某些預設的暫存器 或者 記憶體來傳遞。但以通過棧來傳遞引數程式的通用性最強。
4樓:匿名使用者
組合語言的子程式其實就是一個從「標號」開始以ret結束的程式段。
我想請教一下有關組合語言延時子程式的問題?下面的子程式有點看不懂,請大家幫忙解釋一下,謝謝!
5樓:匿名使用者
這個**其實還是很清楚明瞭的。
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 ; 過程返回
組合語言中延時子程式的問題
6樓:匿名使用者
8086組合語言利用時鐘中斷精確些的延時的精度只能達到1/18.2秒。比這個還要高的要求只能利版用指令執行的時鐘權週期數來設計了,這樣編制的延時程式和cpu的頻率緊密相關,要編制通用些的,只能在程式中先進行檢測,依據檢測結果自動調整延時程式中的引數。
7樓:匿名使用者
delay:
mov r2,#3
djnz r2,$
nopret
用組合語言編寫程式,用組合語言編寫一個程式。
那個 是可以,但是其實可以更簡單,小寫字母內碼範圍是61h 7ah 大寫字母內碼範圍是41h 5ah 那麼只要比較輸入的字元內碼是否在61h 7ah之間如果是,則將其減去20h,就是大寫字母了 print macro para 定義一個顯示字串的巨集 lea dx,para mov ah,9 int...
用組合語言編寫簡單程式,用組合語言編寫一個簡單程式
1.計算u x y z 100 w 其中 x,y,z,w均為十六位有符號數。程式如下 data segment x dw 10 16位變數 y dw 20 z dw 30 w dw 40 u dw data ends code segment assume cs code,ds data start...
易語言取子程式返回值寫法,易語言中子程式,引數,返回值,變數。誰解釋下
在易語言中,子程式包括 事件處理子程式 都有六部分組成。一 子程式名,就是子程式的名稱,子程式名不可省略,而且在程式中是唯一的。二 返回值型別,可省略,就是呼叫該子程式是否返回資料,常用的型別有 整數型 如1,2,5等等,或整數型的變數,方法 返回 1 邏輯型 真 假,或邏輯型的變數,方法 返回 真...