![]() | 第4章 奇妙的声音 | -47- | |||||||||||||||||||
OR 存储单元,立即数 执 行:两个操作数进行"或"计算,结果保存在左边的寄存器或存储单元中 |
|||||||||||||||||||||
PROG6 | |||||||||||||||||||||
-a100[Enter] | |||||||||||||||||||||
0A3E:0100 MOV AL,B6 0A3E:0102 OUT 43,AL 0A3E:0104 MOV AX,04A9 0A3E:0107 OUT 42,AL 0A3E:0109 MOV AL,AH 0A3E:010B OUT 42,AL 0A3E:010D IN AL,61 0A3E:010F PUSH AX 0A3E:0110 OR AL,03 0A3E:0112 OUT 61,AL 0A3E:0114 MOV AH,01 0A3E:0116 INT 21 0A3E:0118 POP AX 0A3E:0119 OUT 61,AL 0A3E:011B RET 0A3E:011C |
;AL寄存器装入定时器初始化设置码 ;将设置码输出到43H端口 ;AX寄存器置入N值 ;将N值分两次输出到42H端口 ;取得61H端口的当前状态 ;在堆栈中保存61H端口的当前状态 ;准备将03H输出到61H端口 ;打开定时器及电子开关 ;选择DOS API的01H功能 ;调用21H中断等待键盘输入 ;从堆栈中取回61H端口的原状态 ;恢复61H端口的原状态 ;结束程序运行 |
||||||||||||||||||||
4.1.2 编制源程序 我们已经用DEBUG编制了一些程序,相信大家对DEBUG已有了较深的了解。DEBUG虽然小巧,但它存在很多弱点。最明显的,当我们用"JMP"指令向高地址方向转移时,我们无法知道目的地址究竟是多少,只能先假设一个地址,等到全部程序输入完后在修改转移指令的目的地址。这个问题在DEBUG中无法解决,毕竟它不是一个真正的编译系统。那么如何应用汇编语言的编译系统?这就是我们现在要讨论的问题。先来看这样一个程序: |
|||||||||||||||||||||
PROG7 | |||||||||||||||||||||
CODE MAIN |
SEGMENT ASSUME ORG PROC MOV OUT MOV OUT MOV OUT IN PUSH |
CS:CODE 100H NEAR AL,10110110B 43H,AL AX,4A9H 42H,AL AL,AH 42H,AL AL,61H AX |
;定义代码段 ;声明代码段与CS寄存器关联 ;设定偏移地址为0100H ;定义主过程开始 ;AL寄存器置入定时器初始化设置码 ;初始化定时器 ;设置N值为04A9H ;输出N值 ;取得61H端口当前状态 ;将61H端口的当前状态存入堆栈 |
||||||||||||||||||
Copyright © 2004-2015 Reanimator | www.cookmoon.org |