char _far*
时间: 2024-01-17 13:18:04 浏览: 114
char _far*是一个指向远程内存的char类型指针。远程内存是指位于不同段或不同地址空间的内存。使用char _far*可以访问远程内存中的数据。
以下是一个使用char _far*的示例:
```c
#include <dos.h>
int main() {
char _far* ptr;
unsigned int segment = 0x1234; // 远程内存段地址
unsigned int offset = 0x5678; // 远程内存偏移地址
ptr = (char _far*)MK_FP(segment, offset); // 构造远程内存指针
// 通过远程内存指针访问数据
char data = *ptr;
printf("Data at remote memory: %c\n", data);
return 0;
}
```
这个示例中,我们使用MK_FP宏将远程内存的段地址和偏移地址构造成一个char _far*类型的指针。然后,我们通过这个指针访问远程内存中的数据,并将其打印出来。
相关问题
int _far putchar(char c) { return c; }有什么问题吗?
在 C 语言中,_far 是一个关键字,用于指示一个函数或变量是位于远程内存段中,而不是默认的内存段中。然而,_far 已经在现代的 C 编译器中被废弃,因此在现代的编译器中使用 _far 可能会导致编译错误。
除此之外,putchar 函数本身并没有问题,它的作用是将一个字符输出到标准输出流中,并返回这个字符。如果你需要使用 putchar 函数,只需在代码中包含标准头文件 stdio.h,然后调用 putchar 函数即可。
综上所述,如果你使用的是现代的编译器,建议不要使用 _far 关键字,而是使用更现代化的内存访问方式。而如果你需要使用 putchar 函数,可以直接在代码中调用该函数,而不需要使用 _far 关键字。
讲解一下这段代码的实现思路:#include <dos.h> #include <conio.h> #include <stdio.h> #define INTNUM 0x09 #define A 0x1e61 #define B 0x3062 unsigned int far *buffer= (unsigned int far *) (0x0400+0x1a); unsigned int head, tail; unsigned int key, i; char name[20]="Wang Hong"; void interrupt (*oldint) (void); void interrupt newint () { oldint (); head=buffer[0]-0x1a; tail=buffer[1]-0x1a; if (head!=tail) { i=head>>1; key=buffer [i]; if (key==A) printf("%s ",name); } } void main () { oldint=getvect (INTNUM); disable (); setvect (INTNUM, newint); enable (); while(1) { printf("*"); delay(500); } keep (0, (_SS+ (_SP/16) -_psp)); }
这段代码是一个简单的键盘中断程序,它的实现思路如下:
首先,代码中包含了三个头文件:dos.h、conio.h 和 stdio.h。dos.h 包含了一些底层的 DOS 操作函数,conio.h 包含了一些控制台 I/O 函数,stdio.h 包含了标准 I/O 函数。
接下来,代码定义了一些常量和变量。其中,INTNUM 定义了键盘中断的中断号,A 和 B 分别定义了两个按键的扫描码。buffer 是一个指向内存地址 0x0400+0x1a 的指针,用于读取键盘缓冲区。head 和 tail 分别表示键盘缓冲区的队列头和队列尾,key 和 i 则是中间变量。name 是一个字符串,用于在按下特定按键时输出。
接着,代码定义了一个新的键盘中断处理函数 newint,它先调用了旧的键盘中断处理函数 oldint,然后读取键盘缓冲区的队列头和队列尾。如果队列头和队列尾不相等,则说明键盘缓冲区中有按键数据,此时将队列头转换为索引 i,并读取对应的扫描码 key。如果扫描码等于 A,则输出字符串 name。
最后,代码定义了主函数 main。它首先保存旧的键盘中断处理函数,并将中断处理函数设置为新的函数 newint。然后进入一个无限循环,在循环中输出一个星号并延时 500ms。最后,代码调用 keep 函数来保持程序在内存中运行。
总的来说,这段代码的实现思路就是通过键盘中断来检测用户的按键输入,并在特定按键时输出指定字符串。同时,通过设置新的键盘中断处理函数来实现对键盘中断的拦截和处理。
阅读全文