① 用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
}