鱼C论坛

 找回密码
 立即注册
查看: 3624|回复: 4

[已解决]汇编程序用EMU8086不起作用

[复制链接]
发表于 2019-9-23 23:00:13 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
大佬:
          下面这个程序,在emu8086下不响,我的系统用过WIND 7和10 都不行 ,是不是out端口错误还是系统弄错了?
        大佬们,若是错误的那OUT 和in 在Windows下 怎么才能使用/?

assume cs:codeseg, ds:dataseg, ss:stackseg
dataseg segment
mus_freq dw 262,262,262,196
         dw 330,330,330,262
         dw 262,330,392,392
         dw 349,330,294
         dw 294,330,349,349
         dw 330,294,330,262
         dw 262,330,294,196
         dw 247,294,262,-1
mus_time dw 3 dup(12,12,25,25),12,12,50
         dw 3 dup(12,12,25,25),12,12,50
dataseg ends

stackseg segment
   db 100h dup (0)
stackseg ends

codeseg segment
start:
    mov ax, stackseg
    mov ss, ax
    mov sp, 100h

    mov ax, dataseg
    mov ds, ax

    lea si, mus_freq
    lea di, mus_time

play:
    mov dx, [si]
    cmp dx, -1
    je end_play
    call sound
    add si, 2
    add di, 2
    jmp play

end_play:
    mov ax, 4c00h
    int 21h

;演奏一个音符
;入口参数:si - 要演奏的音符的频率的地址
;         di - 要演奏的音符的音长的地址
sound:
    push ax
    push dx
    push cx

    ;8253 芯片(定时/计数器)的设置
    mov al,0b6h    ;8253初始化
    out 43h,al     ;43H是8253芯片控制口的端口地址
    mov dx,12h
    mov ax,34dch
    div word ptr [si] ;计算分频值,赋给ax。[si]中存放声音的频率值。
    out 42h, al       ;先送低8位到计数器,42h是8253芯片通道2的端口地址
    mov al, ah
    out 42h, al       ;后送高8位计数器

    ;设置8255芯片, 控制扬声器的开/关
    in al,61h   ;读取8255 B端口原值
    mov ah,al   ;保存原值
    or al,3     ;使低两位置1,以便打开开关
    out 61h,al  ;开扬声器, 发声

    mov dx, [di]       ;保持[di]时长
wait1:
    mov cx, 28000
delay:
    nop
    loop delay
    dec dx
    jnz wait1

    mov al, ah         ;恢复扬声器端口原值
    out 61h, al

    pop cx
    pop dx
    pop ax
    ret

codeseg ends
end start
最佳答案
2019-9-25 22:51:57
书中用什么工具,你就用什么工具。这个软件好像有个毛病,必须生成com格式的文件,必须加org 0x100,我也不太确定。还是用masm或者nasm吧。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2019-9-25 22:51:57 | 显示全部楼层    本楼为最佳答案   
书中用什么工具,你就用什么工具。这个软件好像有个毛病,必须生成com格式的文件,必须加org 0x100,我也不太确定。还是用masm或者nasm吧。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

 楼主| 发表于 2019-9-27 10:44:17 | 显示全部楼层
SВ 发表于 2019-9-25 22:51
书中用什么工具,你就用什么工具。这个软件好像有个毛病,必须生成com格式的文件,必须加org 0x100,我也不 ...

感谢大佬!!!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-9-27 10:46:08 | 显示全部楼层
SВ 发表于 2019-9-25 22:51
书中用什么工具,你就用什么工具。这个软件好像有个毛病,必须生成com格式的文件,必须加org 0x100,我也不 ...

这个响铃程序的 mov cx,28000 这句我真是服了!28000多次循环
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-9-27 13:43:57 | 显示全部楼层
522717502 发表于 2019-9-27 10:46
这个响铃程序的 mov cx,28000 这句我真是服了!28000多次循环


测试的时候可以改成一两次,程序通过了就不影响。另外一般调试器支持跳过一个函数,称为step over,https://blog.csdn.net/huangfei711/article/details/51220382
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-7-7 20:02

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表