彙編子程式的問題,組合語言子程式是如何定義的

2022-03-08 02:51:56 字數 1754 閱讀 6631

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 邏輯型 真 假,或邏輯型的變數,方法 返回 真...