回 帖 发 新 帖 刷新版面

主题:求助;peek 的深入理解

SUB findportadd
DEF SEG = 0
CLS
prnport% = 0
FOR q% = 1 TO 4  
                              'PEEK:READ A BYTE FROM memory
prnport% = prnport% + (PEEK(1036 - q%) * (256 ^ (4 - q%)))
NEXT q%

statport% = prnport% + 1
ctrlport% = prnport% + 2

prnportval% = INP(prnport%)   'read a byte from I/O 
statportval% = INP(prnport% + 1)
ctrlportval% = INP(prnport% + 2)

DEF SEG

其中,SEG是什么意思? 还有 prnport% = prnport% + (PEEK(1036 - q%) * (256 ^ (4 - q%))) 怎么理解?

END SUB

回复列表 (共3个回复)

沙发

SEG 是内存的段地址的意思.

板凳

过去内存中数据的定位由两个量决定,段地址与偏移地址,这是因为CPU的16位寄存器最多能寻址64K,而20位地址线能寻址1M,为了能让16位的寄存器寻址1M所以引入了段地址与偏移地址表示,后来的CPU是32位的(64位的也出好长时间了),可以直接寻址4G内存。以上程序中PEEK是读取内存中某一段中的第(1036 - q%)单元中的数值,(1036 - q%)是一个偏移地址,而刚开始的DEF SEG是定义PEEK所要读取内存单元的段地址,即段地址为0,QB运行时默认的段地址是QB的段地址,所以在一开始时要定义一下,之后还有一个DEF SEG的功能是恢复段地址为默认段地址。DEF SEG=DEFINE SEGMENT(段)

3 楼


PEEK(1036 - q%) * (256 ^ (4 - q%))

为什么还要用PEEK(1036 - q%)乘以(256 ^ (4 - q%))呢?

我来回复

您尚未登录,请登录后再回复。点此登录或注册