主题:TO QB45兄
happybasic
[专家分:80] 发布于 2006-12-27 08:34:00
可否帮我看一下,下面的问题:
http://www.hoker.org/bbs/viewthread.php?tid=236&extra=page%3D1
回复列表 (共4个回复)
沙发
我白芦花 [专家分:190] 发布于 2006-12-29 11:28:00
[quote]
<求助>在QB中如何获得.EXE的本身文件名~
请问一下,在QB中如何获得.EXE的本身文件名~
就像C中的*argv?
/*int main (int argc, char *argv[])*/
C语言中的是这样没错,可我想要用的是QBASIC ...
我找了一本汇编在看,希望能找到答案
以下的汇编代码要以实现,有人可以帮忙转为QB的吗?
cseg segment
assume cs:cseg,ds:cseg
org 100h
start: mov si,2ch
lodsw
mov ds,ax
mov si,0
push cs ;exe格式需要这两句
pop es ;com格式 cs==ds==es 可以不要
mov di, offset buf
cld
loc_1: lodsb
cmp al,0 ;0
jnz loc_1
lodsb
cmp al,0 ;0
jnz loc_1
lodsb
cmp al,1 ;1
jnz loc_1
lodsb ;0
loc_2:lodsb ;文件名开始
cmp al,0
jz disp_1
stosb
jmp loc_2
disp_1:push cs
pop ds
mov dx, offset buf
mov ah,9
int 21h ;显示文件名
mov ah,4ch
int 21h ;返回DOS
buf db 256 dup('$')
cseg ends
end start
[/quote]
我搞了一个,好象是程序的数据区,也没找到路径,不知为什么?
往高手指点??
下面是我的程序
DECLARE SUB absolute (var1%, var2%, var3%, var4%, var5%, var6%, var7%, var8%, var9%, offset%)
asm$ = asm$ + CHR$(&H55) 'PUSH BP
asm$ = asm$ + CHR$(&H89) + CHR$(&HE5) 'MOV BP,SP
asm$ = asm$ + CHR$(&H56) 'PUSH SI------------------
asm$ = asm$ + CHR$(&H50) 'PUSH AX
asm$ = asm$ + CHR$(&HBE) + CHR$(&H2C) 'MOV SI,002C
asm$ = asm$ + CHR$(&HAD) 'LODSW
'asm$ = asm$ + CHR$(&H0E)'push cs
'asm$ = asm$ + CHR$(&H1E)'push ds
'asm$ = asm$ + CHR$(&H58)'pop ax
asm$ = asm$ + CHR$(&H8B) + CHR$(&H5E) + CHR$(&H6) 'MOV BX,[BP+06]
asm$ = asm$ + CHR$(&H89) + CHR$(&H7) 'MOV [BX],AX
asm$ = asm$ + CHR$(&H58) 'POP AX
asm$ = asm$ + CHR$(&H5E) 'POP SI------------------
asm$ = asm$ + CHR$(&H5D) 'POP BP
'asm$ = asm$ + CHR$(&HCA) + CHR$(&H2) + CHR$(&H0) 'RETF 2
asm$ = asm$ + CHR$(&HCA) + CHR$(&H12) + CHR$(&H0) 'RETF 0012
DEF SEG = VARSEG(asm$)
CALL absolute(dummy%, dummy%, dummy%, dummy%, dummy%, dummy%, dummy%, dummy%, findnameoff%,
SADD(asm$))
DEF SEG
'
CLS
OPEN "data.txt" FOR OUTPUT AS #1
PRINT findnameoff%
DEF SEG = VARSEG(findnameoff%) '[color=FF0000]这里错了[/color]
DIM i AS INTEGER, temp AS INTEGER
i = 0
DO
i = i + 1
temp = PEEK(i): PRINT #1, CHR$(temp);
IF i > 5000 THEN GOTO end1
LOOP
end1:
DO
'获取键盘按键
k$ = INKEY$
LOOP UNTIL k$ = CHR$(27)
end
板凳
我白芦花 [专家分:190] 发布于 2007-01-10 14:39:00
我修改了一下,在qb45中能找到了自己的路径
运行结果
-----------------------
D:\TDDOWN~1\QBASIC45\QB45.EXE
我换了一个目录的结果
-----------------------
E:\QB45.EXE
DECLARE SUB absolute (var1%, offset%)
asm$ = asm$ + CHR$(&H55) 'PUSH BP
asm$ = asm$ + CHR$(&H89) + CHR$(&HE5) 'MOV BP,SP
asm$ = asm$ + CHR$(&H56) 'PUSH SI------------------
asm$ = asm$ + CHR$(&H50) 'PUSH AX
asm$ = asm$ + CHR$(&HBE) + CHR$(&H2C) 'MOV SI,002C
asm$ = asm$ + CHR$(&HAD) 'LODSW
'asm$ = asm$ + CHR$(&H0E)'push cs
'asm$ = asm$ + CHR$(&H1E)'push ds
'asm$ = asm$ + CHR$(&H58)'pop ax
asm$ = asm$ + CHR$(&H8B) + CHR$(&H5E) + CHR$(&H6) 'MOV BX,[BP+06]
asm$ = asm$ + CHR$(&H89) + CHR$(&H7) 'MOV [BX],AX
asm$ = asm$ + CHR$(&H58) 'POP AX
asm$ = asm$ + CHR$(&H5E) 'POP SI------------------
asm$ = asm$ + CHR$(&H5D) 'POP BP
'asm$ = asm$ + CHR$(&HCA) + CHR$(&H2) + CHR$(&H0) 'RETF 2
asm$ = asm$ + CHR$(&HCA) + CHR$(&H12) + CHR$(&H0) 'RETF 0012
DEF SEG = VARSEG(asm$)
CALL absolute(findnameoff%, SADD(asm$))
DEF SEG
'
CLS
OPEN "data.txt" FOR OUTPUT AS #1
findnameoff% = findnameoff%
DEF SEG = findnameoff%
DIM i AS INTEGER, temp AS INTEGER
i = 8000 '4000
DIM tempStr$
DO
i = i + 1
temp = PEEK(i)
tempStr$ = tempStr$ + CHR$(temp)
IF i > 9000 THEN GOTO end1
LOOP
end1:
'PRINT #1, tempStr$
PRINT #1, "-----------------------"
'0,0,?,5,0,0
i = 0
DIM pathStr$
DO WHILE i < LEN(tempStr$)
i = i + 1
i = INSTR(i, tempStr$, CHR$(4))
IF i = 0 THEN EXIT DO
':print #1,i
j = i + 1
IF ASC(MID$(tempStr$, j, 1)) = 0 THEN
j = j + 1
IF ASC(MID$(tempStr$, j, 1)) = 0 THEN
j = j + 1
IF ASC(MID$(tempStr$, j, 1)) <> 0 THEN
j = j + 1
IF ASC(MID$(tempStr$, j, 1)) = 5 THEN
j = j + 1
IF ASC(MID$(tempStr$, j, 1)) = 0 THEN
j = j + 1
IF ASC(MID$(tempStr$, j, 1)) = 0 THEN
DO
j = j + 1
IF ASC(MID$(tempStr$, j, 1)) = 0 THEN
EXIT DO
ELSE
pathStr$ = pathStr$ + MID$(tempStr$, j, 1)
END IF
LOOP
END IF
END IF
END IF
END IF
END IF
END IF
LOOP
PRINT #1, pathStr$
PRINT pathStr$
END
3 楼
happybasic [专家分:80] 发布于 2007-01-11 22:05:00
已经搞定了,没想到芦花兄弟还在帮忙试,感谢中
昨天,我已经完成了QBCH中文库的字库捆绑功能,有空看一下吧:
http://yxbasic.51.net/library/qbch.htm
4 楼
w1212q [专家分:660] 发布于 2007-01-20 10:00:00
Basic没用了(只是当程序员没希望)
哪个企业老板会等你慢慢的编程
学好了QB就赶快转OOP吧,也可以转超OOP概念的JAVA
企业都是用的快速开发
用QB,不但自己不爽,老板也不爽
我来回复