求解释电子琴汇编代码,跪求各位大侠给出每步的注释
时间:2011-12-08
来源:互联网
;*******************************;
;* 电子琴实验 *;
;*******************************;
data segment
io8255a equ 288h
io8255b equ 28bh
io8253a equ 280h
io8253b equ 283h
table dw 524,588,660,698,784,880,988,1048;高音的
;table dw 262,294,330,347,392,440,494,524;低音的
msg db 'Press 1,2,3,4,5,6,7,8,ESC:',0dh,0ah,'$'
data ends
code segment
assume cs:code,ds:data
start:
mov ax,data
mov ds,ax
mov dx,offset msg
mov ah,9
int 21h ;显示提示信息
sing:
mov ah,7
int 21h ;从键盘接收字符,不回显
cmp al,1bh
je finish ;若为ESC键,则转finish
cmp al,'1'
jl sing
cmp al,'8'
jg sing ;若不在'1'-'8'之间转sing
sub al,31h
shl al,1 ;转为查表偏移量
mov bl,al ;保存偏移到bx
mov bh,0
mov ax,4240H ;计数初值 = 1000000 / 频率, 保存到AX
mov dx,0FH
div word ptr[table+bx]
mov bx,ax
mov dx,io8253b ;设置8253计时器0方式3, 先读写低字节, 再读写高字节
mov al,00110110B
out dx,al
mov dx,io8253a
mov ax,bx
out dx,al ;写计数初值低字节
mov al,ah
out dx,al ;写计数初值高字节
mov dx,io8255b ;设置8255 A口输出
mov al,10000000B
out dx,al
mov dx,io8255a
mov al,03h
out dx,al ;置PA1PA0 = 11(开扬声器)
call delay ;延时
mov al,0h
out dx,al ;置PA1PA0 = 00(关扬声器)
jmp sing
finish:
mov ax,4c00h
int 21h
delay proc near ;延时子程序
push cx
push ax
mov ax,15
x1: mov cx,0ffffh
x2: dec cx
jnz x2
dec ax
jnz x1
pop ax
pop cx
ret
delay endp
code ends
end start
;* 电子琴实验 *;
;*******************************;
data segment
io8255a equ 288h
io8255b equ 28bh
io8253a equ 280h
io8253b equ 283h
table dw 524,588,660,698,784,880,988,1048;高音的
;table dw 262,294,330,347,392,440,494,524;低音的
msg db 'Press 1,2,3,4,5,6,7,8,ESC:',0dh,0ah,'$'
data ends
code segment
assume cs:code,ds:data
start:
mov ax,data
mov ds,ax
mov dx,offset msg
mov ah,9
int 21h ;显示提示信息
sing:
mov ah,7
int 21h ;从键盘接收字符,不回显
cmp al,1bh
je finish ;若为ESC键,则转finish
cmp al,'1'
jl sing
cmp al,'8'
jg sing ;若不在'1'-'8'之间转sing
sub al,31h
shl al,1 ;转为查表偏移量
mov bl,al ;保存偏移到bx
mov bh,0
mov ax,4240H ;计数初值 = 1000000 / 频率, 保存到AX
mov dx,0FH
div word ptr[table+bx]
mov bx,ax
mov dx,io8253b ;设置8253计时器0方式3, 先读写低字节, 再读写高字节
mov al,00110110B
out dx,al
mov dx,io8253a
mov ax,bx
out dx,al ;写计数初值低字节
mov al,ah
out dx,al ;写计数初值高字节
mov dx,io8255b ;设置8255 A口输出
mov al,10000000B
out dx,al
mov dx,io8255a
mov al,03h
out dx,al ;置PA1PA0 = 11(开扬声器)
call delay ;延时
mov al,0h
out dx,al ;置PA1PA0 = 00(关扬声器)
jmp sing
finish:
mov ax,4c00h
int 21h
delay proc near ;延时子程序
push cx
push ax
mov ax,15
x1: mov cx,0ffffh
x2: dec cx
jnz x2
dec ax
jnz x1
pop ax
pop cx
ret
delay endp
code ends
end start
作者: humorwing 发布时间: 2011-12-08
超简单的代码,还要.....
作者: liangfei1983 发布时间: 2011-12-08
相关阅读 更多
热门阅读
-
office 2019专业增强版最新2021版激活秘钥/序列号/激活码推荐 附激活工具
阅读:74
-
如何安装mysql8.0
阅读:31
-
Word快速设置标题样式步骤详解
阅读:28
-
20+道必知必会的Vue面试题(附答案解析)
阅读:37
-
HTML如何制作表单
阅读:22
-
百词斩可以改天数吗?当然可以,4个步骤轻松修改天数!
阅读:31
-
ET文件格式和XLS格式文件之间如何转化?
阅读:24
-
react和vue的区别及优缺点是什么
阅读:121
-
支付宝人脸识别如何关闭?
阅读:21
-
腾讯微云怎么修改照片或视频备份路径?
阅读:28