汇编钢琴

;电子琴

data segment
    note dw 262,294,330,349,392,440,494,523,578,659,698
data ends

code segment
    assume ds:data , cs:code
main proc far
    mov ax,data
    mov ds,ax

begin:
    call input
    call sound
    cmp si,80h
    jnz begin

    mov ah,4ch
    int 21h
main endp

input proc near
    push ax
    push bx
    mov ah,01
    int 21h
    sub al,30h
    mov bl,2
    mul bl
    sub al,2
    mov si,al
    mov di,note[si]
    pop bx
    pop ax
    ret
input endp

sound proc near
    mov al,0b6h
    out 43,al
    mov dx,12h
    mov ax,348ch
    div di
    out 42h,al
    mov al,ah
    out 42h,al
    in al,61h
    mov ah,al
    or al,3
    out 61h,al
wait1:
    mov cx,15
delay:
    loop delay
    dec bx
    jnz wait1
    mov al,ah
    out 61h,al
    ret
sound endp

code ends
    end main
时间: 2024-10-06 19:38:02

汇编钢琴的相关文章

汇编模拟钢琴

;比较low的钢琴 ASSUME CS:CODE,DS:DATA,SS:STACK DATA SEGMENT ;设置键盘区位 ;中音区 A: 7 S: 8 D: 9 F:10 J:11 K:12 L:13 ;高音区 Q:14 W:15 E:16 R:17 U:18 I:19 O:20 ;低音区 Z: 0 X: 1 C: 2 V: 3 B: 4 N: 5 M: 6 ;填补区 T:17 Y:18 G:10 H:11 P:20 ; '[':20 ']':20 ';':14 '"':14 '<':

GCC在C语言中内嵌汇编 asm __volatile__ 【转】

转自:http://blog.csdn.net/pbymw8iwm/article/details/8227839 在内嵌汇编中,可以将C语言表达式指定为汇编指令的操作数,而且不用去管如何将C语言表达式的值读入哪个寄存器,以及如何将计算结果写回C 变量,你只要告诉程序中C语言表达式与汇编指令操作数之间的对应关系即可, GCC会自动插入代码完成必要的操作. 1.简单的内嵌汇编 例: __asm__ __volatile__("hlt"); "__asm__"表示后面的

Linux C中内联汇编的语法格式及使用方法(Inline Assembly in Linux C)

在阅读Linux内核源码或对代码做性能优化时,经常会有在C语言中嵌入一段汇编代码的需求,这种嵌入汇编在CS术语上叫做inline assembly.本文的笔记试图说明Inline Assembly的基本语法规则和用法(建议英文阅读能力较强的同学直接阅读本文参考资料中推荐的技术文章 ^_^). 注意:由于gcc采用AT&T风格的汇编语法(与Intel Syntax相对应,二者的区别参见这里),因此,本文涉及到的汇编代码均以AT&T Syntax为准. 1. 基本语法规则 内联汇编(或称嵌入汇

汇编第五日

mov ax, offset 标号:取得标号相对于伪代码后第一条指令地址0的相对偏移量即标号地址 可以发现汇编指令中的idata会直接反映在机器码中 jmp指令可以修改IP或CS和IP的值,具体格式如下: ①jmp short 标号(段内转移) (IP) = (IP)+ 8位位移 8位位移含义是:标号地址减去jmp指令的下一条指令地址即为相对位移地址(可正可负,但是范围必须在8位数据能表示之内)并不是直接目的地址 8位位移范围为-128 - 127 例如: JMP 0008即跳到0BBD:000

在vs 2015环境下,c语言和汇编混编操作简析(更新中......)

在VS 2015环境下如何混编. 在新建工程里也会发现了很多问题, 应用程序类型分为:windows应用程序,控制台应用程序,DLL,静态库 静态库: 静态库是指在我们的应用中,有一些公共代码是需要反复使用,就把这些代码编译为"库"文件:在链接步骤中,连接器将从库文件取得所需的代码,复制到生成的可执行文件中的这种库. 程序编译一般需经预处理.编译.汇编和链接几个步骤.静态库特点是可执行文件中包含了库代码的一份完整拷贝:缺点就是被多次使用就会有多份冗余拷贝. 静态库和动态库是两种共享程序

用汇编来解释“计算机是怎么工作的”

本文章为<Linux内核分析>实验报告 梁永锐 原创作品转载请注明出处 http://www.cnblogs.com/liangyongrui/p/6392035.html <Linux内核分析>MOOC课程http://mooc.study.163.com/course/USTC-1000029000 " ----- 以下为要分析的c代码 int g(int x) { return x + 36; } int f(int x) { return g(x) * 4; }

Java千百问_02基本使用(015)_java如何通过汇编方式运行

点击进入_更多_Java千百问-基本使用 1.java如何通过汇编方式运行 java本身不能通过汇编方式运行.但是,我们可以通过某些插件,在运行中将java代码解释为汇编指令,让我们能够通过分析执行的汇编指令来查找一些问题,也可以帮助我们分析和理解JVM是如何解释和编译的(当然java本身的编译和运行和汇编无关). PrintAssembly是JVM的一个运行参数,它允许我们获取在控制台打印java代码翻译成的汇编指令.使用PrintAssembly需要一些插件的支持,这些并不是JVM直接提供的

使用库函数API和C代码中嵌入汇编代码两种方式使用同一个系统调用

使用库函数API和C代码中嵌入汇编代码两种方式使用同一个系统调用 选择调用的进程为 24 i386 getuid sys_getuid1647 i386 getgid sys_getgid16 使用库函数API方式 使用C代码中嵌入汇编代码方式

汇编速查表

指令 功能 AAA 调整加 AAD 调整除 AAM 调整乘 AAS 调整减 ADC 进位加 ADD 加 AND 与 ARPL 调整优先级 BOUND 检查数组 BSF 位右扫描 BSR 位左扫描 BSWAP 交换字节 BT 位测试 BTC 位测试求反 BTR 位测试清零 BTS 位测试置一 CALL 过程调用 CBW 转换字节 CDQ 转换双字 CLC 进位清零 CLD 方向清零 CLI 中断清零 CLTS 任务清除 CMC 进位求反 CMOVA 高于传送 CMOVB 低于传送 CMOVE 相等