crlf segment
assume cs:crlf
mov dl,0dh ;carriage return
mov ah,2 ;display function
int 21h ;call DOS
mov dl,0ah ;linefeed
mov ah,2 ;display function
int 21h ;call DOS
int 20 ;return from crlf
crlf ends
end※ 现在我们就可以将 BINIHEX 、 DECIBIN 及 CRLF 等模组合并
成一个完整的大程式了。
※ 首先,我们必须将这三个模组程式改成『程序,Procedure』,
然後,再写一段简短的小程式来轮流呼叫每一个程序。
※ 所谓程序是由一群组合语言指令集合而成,通常用於执行特定
的、定义完整的工作,在电脑语言中,常被称做『副程式』。
crlf proc near
mov dl,0dh
mov ah,2
int 21h
mov dl,0ah
mov ah,2
int 21h
ret
crlf endp
※ 类似 SEGMENT 与 ENDS 虚拟指令,PROC 与 ENDP 成对出现,
用来识别并定义一个程序。
※ 其实,PROC 真正的作用只是告诉组译器∶所呼叫的程序是
属於近程(NEAR)或远程(FAR)。
※ 一般的程式是由 DEBUG 直接呼叫的,所以用 INT 20 返回,
对於用 CALL 指令所呼叫的程序而言,则必须改用 RET 。
※ 返回指令 RET 会把控制权转移到堆叠顶端所指定的位址,而
该位址是由呼叫此程序的 CALL 指令所放入的。
;************************************************
decihex segment ;DECIHEX -- Main Program
assume cs:decihex
repeat: call decibin ;keyboard to binary
call crlf ;print cr and lf
call binihex ;binary to screen
call crlf ;print cr and lf
jmp repeat ;do it again
;------------------------------------------------
decibin proc near ;PROCEDURE TO CONVERT DEC
............ ; ON KEYBD TO BINARY AND
decibin endp ; LEFT RESULT IN BX
;------------------------------------------------
binihex proc near ;PROCEDURE TO CONVERT BIN
............ ; NUMBER IN BX TO HEX ON
binihex endp ; CONSOLE SCREEN
;------------------------------------------------
crlf proc near ;PROCEDURE TO PRINT
............ ; CARRIAGE RETURN
endp ; AND LINEFEED
;------------------------------------------------
decihex ends
;************************************************
end
※ CALL 指令用来呼叫一个副程式(程序),并将控制权转移到
运算元内的副程式位址,同时将 CALL 的下一指令位址定为
『返回位址』,并存入堆叠中。
※ CALL 可分为近程(NEAR)及远程(FAR)两种∶
1.NEAR∶IP 暂存器的内容被放入堆叠中。
用於程式与程序在同一记忆区段中。
2.FAR ∶CS 暂存器与 IP 暂存器的内容依顺序存入堆叠中。
用於程式与程序在不同一记忆区段中。
※ 探讨了组合语言程式设计的较佳流程,希望能奠定您
独立设计的基础,而如何利用模组化的观念来设计程式,则
全仰赖您平时苦练、多看的苦功,只要再多参考相关的书籍
,您必可从范例中获取的更多的应用技巧,祝您成功。
THE END
全文完