通话对方听不清:C.C++问题,高手帮忙

来源:百度文库 编辑:杭州交通信息网 时间:2024/05/01 06:29:46
想用c和c++在ms-dos下编写个读写硬盘的程序,让喇叭发声音,弹出光驱的程序!哪位给点思路,我根本不知道如何下手,高手谢谢
曾看过,用汇编写的程序,能放“亚洲雄峰”C语言如何操纵声卡呢,GHOST是能读写硬盘的程序,他是怎么遍的呢?

可以用C来写, 但只能运行在DOS 和WindowsMe 以前的系统!
我只说思路, 具体代码就不写了!(因为写起来太难)
相信你也知道汇编给能写这个程序!使用汇编同样的思路!
首先你要去查一查BIOS中断设置!
刚学C语言的时候同样也写过音乐的程序! \07 这个数字在C语言程序用printf 会发出嘟的音!
怎么调用BIOS中断 就去看这个URL:
http://www.jsjbbs.com/dispbbs.asp?boardid=67&id=665
BIOS 有几个中断你是需要的:
置报警时间 (1A)
读写磁盘 INT(13)
http://www.dzu.edu.cn/bumen/gonghui/myweb/xuexiziliao/masm2/cap5.htm

对光驱的DOS调用光盘操作请看
方法: DOS中断(DOSINI 21h) 光盘句柄为 03dh

.MODEL TINY
.CODE
DOS_TTY_WRITE equ 009h ; TTY style write of '$' term string
DOS_OPEN_HANDLE equ 03dh ; open file with handle
DOS_IOCTL equ 044h ; write to handle
DOS_TERMINATE equ 04ch ; terminate with error code

DOSINT macro function, subfunction
IFB
mov ah,(function AND 0ffh)
ELSE
mov ax,(function SHL 8) OR (subfunction AND 0ffh)
ENDIF
int 21h ; invoke DOS function
endm

Org 5Dh
Params LABEL BYTE

.STARTUP

mov al, [Params]
or al, 00100000b ; Convert to lowercase
cmp al, 'o'
je OpenDev
cmp al, 'c'
jne ErrorHandler
mov [ControlBlock],5 ; Close CD-rom

OpenDev:
; Open Device using handle:
mov dx, offset FileName
DOSINT DOS_OPEN_HANDLE, 021h ;这里能看到调用光驱的句柄为:03dh
jc ErrorHandler

mov bx, ax ; file handle into bx
mov cx, 1 ; number of bytes to write
dec dx ; point to control block

DOSINT DOS_IOCTL, 3 ; issue IOCTL request
jnc Einde

ErrorHandler:
mov dx, offset ShowErr ; display error
DOSINT DOS_TTY_WRITE

Einde:
DOSINT DOS_TERMINATE ; exit program

ShowErr DB 'Err$'
ControlBlock DB 0 ; preload with open command
FileName DB 'MSCD000 ', 0

END

无论是什么语言编写,最终思路都是一样的!

MS-DOS下开发请用BORLAND C++3.1开发,可以直接嵌入汇编语言。
asm
{
mov ax,1
}

至于读写硬盘的程序,一般都是通过中断实现的,中断调用可以调用MSDOS的中断,也可以调用BIOS的中断,MSDOS提供的硬盘读写中断是INT21,BIOS是INT13,不过一般都是用INT13,因为速度快,可以直接读取扇区,当然你如果水平够高,直接通过IO端口读写硬盘也没有问题。
喇叭发声,一般通过汇编语言直接IO端口输出控制喇叭发生。
声卡也是直接通过IO输出控制发声,具体的IO端口不同的声卡是不一样的。
喇叭的IO端口是固定的。

要是让喇叭发声就是 printf("\a") ;
\a是转义字符,表示PCI发声

读写硬盘就是文件吧
#include<fstream>
using namespace std ;

ifstream fin ("输入文件.txt") ;
ofstream fout ("输出文件.txt") ;

int main()
{
int i , j ;
fin >> i >> j ;从输入文件.txt读进两个整型数给i,j
fout << i << j ; //不解释了
system ( "ren 123.txt 456.txt" );
//把文件123.txt名字改成456.txt
system ( "del 250.exe" )
//删除250.exe
}

还是用汇编吧!!
C++高级语言对硬件操作不方便。
用汇编多方便???
干嘛还要用费劲的C++??

读写硬盘是不是指读写文件呢?如果是,这个问题就没什么好说的了,在c下面用fopen函数,在c++下面用fstream类的open方法。对于让喇叭发声的方法就是printf("\007").也可以用其他的输出函数,只要输出的是转义字符"\007",并且是输出到标准输出设备就能发声

程序可能有问题,用 scanf("%c",&str[i]) 不能读入'\n'。

简化的程序如下:
#include<stdio.h>

main(){
char str[80];
scanf("%s",str);
printf("%s", str);
}

不知题者是不是这个意思~~:)~~