decoder 发表于 2006-1-20 17:49:00

epcdiy 发表于 2006-1-20 18:22:00

举个例子吧

比如定义500000bytes的数据

Eastsun 发表于 2006-1-20 19:23:00

楼主是要实现fseek功能吧?

这样就可以了:

: LDA #$00         ;

: STA $08D1      ;

: LDA $84         

: STA $08CD      ;

: LDA $85          ;

: STA $08CE      ;

: LDA $86          ;

: STA $08CF      ;

: LDA $87          ;

: STA $08D0      ;

: INT $0519   ;for nc3000

其中$84~$87中为文件指针欲转移到的位置(从低位到高位)

epcdiy 发表于 2006-1-20 19:46:00

假如是500000

那么就是

LDA #$20

STA $84

LDA #$A1

STA $85

LDA #$07

STA $86

LDA #$00

STA $87

: LDA #$00         ;

: STA $08D1      ;

: LDA $84         

: STA $08CD      ;

: LDA $85          ;

: STA $08CE      ;

: LDA $86          ;

: STA $08CF      ;

: LDA $87          ;

: STA $08D0      ;

: INT $0519

对吗?

Eastsun 发表于 2006-1-21 18:01:00

对的。

LDA #$20



STA $84



LDA #$A1



STA $85



LDA #$07



STA $86



LDA #$00



STA $87

这段代码就没必要了

直接

LDA #¥20         



STA $08CD。。。

就可以了。

qyfcool 发表于 2006-1-22 12:52:00

指定文件打开位置时不是用到5个字节吗?远远不止64K啊.

decoder 发表于 2006-1-22 17:49:00

qyfcool 发表于 2006-1-23 10:32:00

不要看到seek的参数有 5BYTE就认为可以SEEK 40位的内容了!!

前4BYTE是位置,最后一BYTE是位置和方向!

什么意思?

epcdiy 发表于 2006-1-23 14:00:00

以下是引用decoder在2006-1-20 17:49:00的发言:define 4,SeekOffset   ;4 lseek时文件偏移大小
define 1,SeekOrigin   ;1
      ;bit7 lseek时偏移方向
      ;bit0-2 lseek时起始偏移位置

qyfcool 发表于 2006-1-23 15:08:00

bit0-2 lseek时起始偏移位置

这个很不明白,LAVA也有类似的东东,不明白.SEEK只要指明位置不就行了,那个位移量干嘛用的?

fseek
原型: long fseek(char fp,long offset,char base);
功能: 文件指针定位
说明: 将句柄为fp的文件的位置指针移到以base所指出的位置为基准,以offset为位移量的位置
      返回当前位置。若出错,返回-1。
 

 
举例:


char s[]="www.ggv.com.cn";
void main()
{
    char fp;
    char t;
    if ((fp=fopen("/LavaData/tmp.dat","w+"))==0)
      printf("创建文件失败!");
    else {
      printf("创建文件成功!");
      fwrite(s,1,strlen(s)+1,fp);
      fseek(fp,4,0);
      fread(t,1,strlen(s)+1,fp);
      printf("\n%s",t);
      fclose(fp);
    }
    getchar();
}


epcdiy 发表于 2006-1-20 17:16:52

[求助]有关汇编的文件指针

用文件打开中断打开文件后,如果我要定位超过64KB以上的文件指针如何做?
页: [1]
查看完整版本: [求助]有关汇编的文件指针