![]() | 第4章 奇妙的声音 | -53- | |||||||||||||||||||
sound main main code |
or out ret endp proc push sub push mov mov mov mov int call mov int in and out ret endp ends end |
al,3 PORT_B,al far ds ax,ax ax ax,data ds,ax dx,offset mess ah,09h 21h sound ah,1 21h al,PORT_B al,0fch PORT_B,al main |
;子过程返回 ;#5--主过程开始 ;#6--初始化堆栈,建立返回地址 ;#7--初始化DS寄存器 ;#8--显示MESS ;调用SOUND发声 ;等待按键 ;停止发声 ;主过程返回 ;主过程结束 ;代码段结束 ;进程结束 |
||||||||||||||||||
使用SUB指令的一些注意事项将在后面介绍。请注意这个程序中用许多前面加了"#"的注释文字将源程序分成了小块,这些说明性的文字可以不必录入,但如果大家在自己编制程序时能够加入必要的注释将会培养出一种很受欢迎的编程风格。 程序的"#1"部分作用是定义常量,所谓常量其实就是用一些具有特殊含义的字串来代替数字用在程序中。常量定义有两种方法: |
|||||||||||||||||||||
常量名 EQU 数字 | |||||||||||||||||||||
或 | |||||||||||||||||||||
常量名 = 数字 | |||||||||||||||||||||
“=”和“EQU”伪指令的作用是一样的。注意汇编语言并不要求用户在编制每一个程序时都定义常量,但是把一些程序中经常用到的数据定义成常量还是很有好处的,因为一旦需要修改数据,则只需在常量定义部分修改即可,而不必在源程序中苦苦寻找。 “#2”部分定义了一个数据段,其定义方法同4.1.2节介绍的代码段一样,也使用 “SEGMENT”伪指令。需要注意的是数据段中用了伪指令--ASSUME,现在是应该使用这个伪指 |
|||||||||||||||||||||
Copyright © 2004-2015 Reanimator | www.cookmoon.org |