汇编代码——music(《送别》bgm)
汇编语言——music(《送别》bgm)
完整代码
NOTE_1 = 440 ; 音调频率
NOTE_2 = 495
NOTE_3 = 550
NOTE_4 = 587
NOTE_5 = 660
NOTE_6 = 733
NOTE_7 = 825ONE_BEEP = 600 ; 一拍延时600ms
HALF_BEEP = 300 ; 半拍延时300msdata segment
ticks dw 0
music dw NOTE_5, ONE_BEEP
dw NOTE_3, HALF_BEEP
dw NOTE_5, HALF_BEEP
dw NOTE_1*2, ONE_BEEP*2
dw NOTE_6, ONE_BEEP
dw NOTE_1*2, ONE_BEEP
dw NOTE_5, ONE_BEEP*2
dw NOTE_5, ONE_BEEP
dw NOTE_1, HALF_BEEP
dw NOTE_2, HALF_BEEP
dw NOTE_3, ONE_BEEP
dw NOTE_2, HALF_BEEP
dw NOTE_1, HALF_BEEP
dw NOTE_2, ONE_BEEP*4
dw NOTE_5, ONE_BEEP
dw NOTE_3, HALF_BEEP
dw NOTE_5, HALF_BEEP
dw NOTE_1*2, HALF_BEEP*3
dw NOTE_7, HALF_BEEP
dw NOTE_6, ONE_BEEP
dw NOTE_1*2, ONE_BEEP
dw NOTE_5, ONE_BEEP*2
dw NOTE_5, ONE_BEEP
dw NOTE_2, HALF_BEEP
dw NOTE_3, HALF_BEEP
dw NOTE_4, HALF_BEEP*3
dw NOTE_7/2, HALF_BEEP
dw NOTE_1, ONE_BEEP*4
dw NOTE_6, ONE_BEEP
dw NOTE_1*2, ONE_BEEP
dw NOTE_1*2, ONE_BEEP*2
dw NOTE_7, ONE_BEEP
dw NOTE_6, HALF_BEEP
dw NOTE_7, HALF_BEEP
dw NOTE_1*2, ONE_BEEP*2
dw NOTE_6, HALF_BEEP
dw NOTE_7, HALF_BEEP
dw NOTE_1*2, HALF_BEEP
dw NOTE_6, HALF_BEEP
dw NOTE_6, HALF_BEEP
dw NOTE_5, HALF_BEEP
dw NOTE_3, HALF_BEEP
dw NOTE_1, HALF_BEEP
dw NOTE_2, ONE_BEEP*4
dw NOTE_5, ONE_BEEP
dw NOTE_3, HALF_BEEP
dw NOTE_5, HALF_BEEP
dw NOTE_1*2, HALF_BEEP*3
dw NOTE_7, HALF_BEEP
dw NOTE_6, ONE_BEEP
dw NOTE_1*2, ONE_BEEP
dw NOTE_5, ONE_BEEP*2
dw NOTE_5, ONE_BEEP
dw NOTE_2, HALF_BEEP
dw NOTE_3, HALF_BEEP
dw NOTE_4, HALF_BEEP*3
dw NOTE_7/2, HALF_BEEP
dw NOTE_1, ONE_BEEP*3
dw 0, 0
data endscode segment
assume cs:code, ds:data, ss:stk
main:mov ax, datamov ds, axxor ax, axmov es, axmov bx, 8*4mov ax, es:[bx]mov dx, es:[bx+2] ; 取int 8h的中断向量mov cs:old_int8h[0], axmov cs:old_int8h[2], dx; 保存int 8h的中断向量climov word ptr es:[bx], offset int_8hmov es:[bx+2], cs ; 修改int 8h的中断向量mov al, 36hout 43h, almov dx, 0012hmov ax, 34DCh ; DX:AX=1193180mov cx, 1000div cx ; AX=1193180/1000out 40h, almov al, ahout 40h, al ; 设置时钟振荡频率为1000次/秒stimov si, offset musiccld
again:lodswtest ax, axjz donecall frequencylodswcall delayjmp again
done:climov ax, cs:old_int8h[0]mov dx, cs:old_int8h[2]mov es:[bx], axmov es:[bx+2], dx ; 恢复int 8h的中断向量mov al, 36hout 43h, almov al, 0out 40h, almov al, 0out 40h, al ; 恢复时钟振荡频率为1193180/65536=18.2次/秒stimov ah, 4Chint 21hfrequency:push cxpush dxmov cx, ax ; CX=frequencymov dx, 0012hmov ax, 34DCh; DX:AX=1193180div cx ; AX=1193180/frequencypop dxpop cxclipush axmov al, 0B6hout 43h, alpop axout 42h, al ; n的低8位mov al, ahout 42h, al ; n的高8位 ; 每隔n个tick产生一次振荡; 振荡频率=1193180/n (次/秒)stiretdelay:push axcliin al, 61hor al, 3out 61h, al; 开喇叭stipop axmov [ticks], ax
wait_this_delay:cmp [ticks], 0jne wait_this_delaycliin al, 61hand al, not 3out 61h, al; 关喇叭stiretint_8h:push axpush dsmov ax, datamov ds, axcmp [ticks], 0je skipdec [ticks]
skip:pop dspop axjmp dword ptr cs:[old_int8h]
old_int8h dw 0, 0
code endsstk segment stack
dw 100h dup(0)
stk ends
end main
music.asm
汇编代码——music(《送别》bgm)相关推荐
- 实验四:使用库函数API和C代码中嵌入汇编代码两种方式使用同一个系统调用
贺邦+原创作品转载请注明出处 + <Linux内核分析>MOOC课程http://mooc.study.163.com/course/USTC-1000029000 实验目的: 使用库函数 ...
- GCC生成的汇编代码
假设我们写了一个C代码文件 code.c包含下面代码: int accum = 0; int sum(int x, int y) { int t = x + y; accum += t ...
- C++ 汇编代码查看
文章目录 gcc 编译为汇编代码 使用 as 展示汇编代码 使用 objdump 进行反汇编 使用 godbolt 可视化结果 gcc 编译为汇编代码 原始C++代码如下: #include &quo ...
- 通过汇编一个简单的C程序,分析汇编代码理解计算机是如何工作的
实验目的: 通过反汇编一个简单的C程序,分析汇编代码理解计算机是如何工作的 实验过程: 通过vi程序进行编程: int g(int x) { return x + 3; } int f(int x) ...
- 实验四:汇编代码调用系统调用的工作过程
钟晶晶 + 原创作品转载请注明出处 + <Linux内核分析>MOOC课程http://mooc.study.163.com/course/USTC-1000029000 工作过程 以41 ...
- C++对象模型3——vptr的位置、手动调用虚函数、从汇编代码看普通调用和多态调用
一.vptr的位置 class test { public:int i; virtual void testfunc() {} };int main() {test a;char* p1 = rein ...
- 修改vb6的编译器c2.exe使它可以输出汇编代码_xv6笔记-启动代码分析
首先看xv6 commit的第一个makefile OBJS = main.o CC = i386-jos-elf-gcc LD = i386-jos-elf-ld OBJCOPY = i386-jo ...
- C 语言编程 — 结构化程序流的汇编代码与 CPU 指令集
目录 文章目录 目录 文章目录 为什么要保留汇编语言 顺序程序流 条件程序流 循环程序流 函数调用栈的工作原理 文章目录 <C 语言编程 - GCC 工具链> <C 语言编程 - 程 ...
- gdb 查看,执行汇编代码
用gdb 查看汇编代码, 采用disassemble 和 x 命令. nexti, stepi 可以单步指令执行 如下例: -------------------------------------- ...
- 【Android 逆向】IDA 工具使用 ( IDA 32 位 / 64 位 版本 | 汇编代码视图 IDA View-A | 字符串窗口 Strings window )
文章目录 一.IDA 32 位 / 64 位 版本 二.汇编代码视图 IDA View-A 三.字符串窗口 Strings window 一.IDA 32 位 / 64 位 版本 IDA 安装完毕后 ...
最新文章
- Unity提出ProtoRes模型:稀疏可变的输入也能构建完整人体姿态
- 设计模式的征途—12.享元(Flyweight)模式
- 炼丹秘术:给Embedding插上翅膀
- 并发编程中常见的锁机制:乐观锁、悲观锁、CAS、自旋锁、互斥锁、读写锁
- Python——迭代器的几个高级用法
- oracle 控制html输出样式,Oracle之sqlplus输出到html
- oracle中to_date函数详解
- Linux:sudo命令实例讲解
- Mybaits的运行原
- 数据结构和算法——八种常用的排序算法------归并排序
- 友图自动排料引擎 V1.0 开发指南
- 关于html5毕业论文设计任务书,毕业论文设计任务书(精选多篇)
- python 皮尔森相关系数(Pearson)
- 印象笔记chrome插件 安装 程序包无效
- oracle数据库写文件,Oracle对操作系统文件的读写操作
- Spring框架学习总结(上)
- 计算机联锁论文开题报告,学生论文开题报告评语
- 嵌入式开发QT教程-5集 纯代码编写UI界面
- 小学五年级年级计算机教学计划,小学五年级信息技术教学计划(精选3篇)
- pandas 玩转 Excel 操作总结