① 用C语言编写的程序,怎么从一个物理地址读数
win32下需要用驱动模式编程,dos下练着玩就无所谓了
② “c语言允许直接访问物理地址”
物理地址就是指真实存在的地址,对应存储单元的某个位或字节等存储单元,学硬件的应该很清楚,经常需要对硬件地址进行操作,把变量直接定义在某个地址,c语言介于低级语言(如汇编)和高级语言之间,是允许直接访问物理地址的,而好多高级语言是没法直接访问物理地址的,都是经过地址映射得到的逻辑地址,比如最简单的51单片机,sfr SCON=0x98,sbit TI=0x99 ,都是直接对硬件地址操作,但在windows里,你是无法操作内存条的某个具体地址的,都是操作系统来统一分配的
③ C语言中如何直接访问一个指定地址
间接访问是通过指针变量存放的地址访问的,直接访问就不用借助指针变量,指针可以认为是地址,但不是变量,指针变量才是变量,只是国内书都把那两个混在一起
④ C语言允许直接访问物理地址,能进行bit位操作
没有bit类型,你原来的思路是可以的,只是没有做一个事情“不够8位补齐”这个事情而已。
⑤ 如何用C语言实现ISA总线端口的访问
直接看code吧。
我用的是TC2.0编译的,熟悉吧:)
#include <stdio.h>#include <stdlib.h>#include <dos.h>#include <conio.h>int main(){int port1,port2;int i,j;unsigned char temp;char ch;window(1,1,80,25);textbackground(BLUE);textcolor(YELLOW);clrscr();printf("please input port1:0x");scanf("%X",&port1);printf("please input port2:0x");scanf("%X",&port2);while(!kbhit()){clrscr();printf("Read value from ISA port 0x%X 0x%X:\n",port1,port2);printf(" ");for(i=0;i<256;i++){outp(port1,i);temp=inp(port2);if(temp<=15){printf("0%X",temp);}else{printf("%X",temp);}printf(" ");if((i+1)%16==0){printf("\n");printf(" ");}/*if(kbhit()) { ch=getch(); if(ch=='q'||ch=='Q'); {break;} }*/}sleep(1);/*wait for a second*/}system("pause");return 0;}
⑥ “c语言允许直接访问物理地址,能进行位操作”是什么意思啊
就是使用C语言能够直接定位物理内存的地址,即通过内存地址(如0xfa283401)得到该地址上的数据。
计算机中的数据都是以位(bit,比特)来作为基本单位的,C语言能直接对位进行操作,包括求与,并,或,异或,非等。
物理地址是一个很宽泛的概念,磁盘,内存等存储设备都有物理地址的说法。
物理内存地址指的是硬件实现上物理内存展现给外部总线访问的编码地址,其范围等于物理内存的大小.
大家常说的物理内存就是指安装在主板上的内存条,其实不然,在计算机的系统中,物理内存不仅包括装在主板上的内存条(RAM),还应该包括主板BIOS芯片的ROM,显卡上的显存(RAM)和BIOS(ROM),以及各种PCI、PCI-E设备上的RAM和ROM。
地址空间就是对物理内存编码(地址编码)的范围。
所谓编码就是对每一个物理存储单元(一个字节)分配一个唯一的地址号码,这个过程又叫做“编址”或者“地址映射”。这个过程就好像在日常生活中我们给每家每户分配一个地址门牌号。与编码相对应的是“寻址”过程——分配一个地址号码给一个存储单元的目的是为了便于找到它,完成数据的读写,这就是“寻址”,因此地址空间有时候又被称作“寻址空间”。系统不仅要给主板上的内存条编址,还要给上述的其它物理内存编址;它们都被编在同一个地址空间内,编址后的物理内存就可以被系统资源使用或占用。
⑦ 知道c语言可以直接访问物理内存,但是如和来访问呢给一个物理地址可以如0x0f3可以知道它的值吗
原来在DOS时代是可以的,windows时代好像比较麻烦,肯定能实现但是估计不是你想的难么简单!
⑧ 如何用C语言编写程序 打开电脑的某一端口(不用其他软件)
原谅我,我为了升级。
⑨ C语言允许直接访问物理地址吗
C本来就是最接近硬件的高级语言,操作物理地址完全没问题,现在很多嵌入式开发也是用C的
⑩ 如何用C程序获取本地可用端口
可以打开USB接口上的设备,或者打开USB控制器,那涉及到windows的驱动访问。
一般访问设备使用CreateFile打开设备,然后使用ReadFile/WriteFile读写设备。
比如:
HANDLE hFile = CreateFile(..., FILE_FLAG_OVERLAPPED, ...); //指定以异步方式打开
BYTE bBuffer[100];
OVERLAPPED o = { 0 };
o.Offset = 345;
BOOL bReadDone = ReadFile(hFile, bBuffer, 100, NULL, &o); // bReadDone 指定I/O请求是不是以同步方式打开
DWORD dwError = GetLastError();
if (!bReadDone && (dwError == ERROR_IO_PENDING)) { //异步方式打开
// The I/O is being performed asynchronously; wait for it to complete
WaitForSingleObject(hFile, INFINITE);
bReadDone = TRUE;
}
if (bReadDone) {
// o.Internal contains the I/O error
// o.InternalHigh contains the number of bytes transferred
// bBuffer contains the read data
} else {
// An error occurred; see dwError
}