Oxygen Basic
Programming => Problems & Solutions => Topic started by: chrisc on March 19, 2018, 01:21:56 PM
-
in PB there is a CODEPTR function,
CODEPTR retrieves the address of a Label, Sub, Function, or FastProc.
according to http://www.manmrk.net/tutorials/basic/PowerBASIC/PBW10/html/CODEPTR_function.html (http://www.manmrk.net/tutorials/basic/PowerBASIC/PBW10/html/CODEPTR_function.html)
what would be the equivalent function in O2?
-
Our universal @ (address of) operator. - Can be used for labels, variables, and functions. You can also use &, as in C.
PS:
You can define codeptr and varptr:
def codeptr @ %1
def varptr @ %1
-
thanxx Charles
can you please give me an exmple on how to use def codeptr @ %1
-
Hello Charles
i have the below code which needs to have the CODEPTR define
how to do this?
FUNCTION mystr() AS STRING
LOCAL mlabnum AS SYS
LOCAL Secnum AS SYS
LOCAL ThdSt
mlabnum = CODEPTR(mainlab)
ThdSt = nuls 19
Secnum = STRPTR(ThdSt)
MOV rsi, mlabnum
MOV rdi, Secnum
MOV rcx, 19
REP MOVSB
mlabnum = CODEPTR(seclab)
MOV rsi, Secnum
MOV rbx, 19
MOV rdi, mlabnum
ADD rsi, rbx
ADD rdi, rbx
NEG rbx
dest1:
MOVZX rax, BYTE PTR [rdi+rbx]
XOR [rsi+rbx], AL
ADD rbx, 1
JZ dest2
MOVZX rax, BYTE PTR [rdi+rbx]
XOR [rsi+rbx], AL
ADD rbx, 1
JZ dest2
MOVZX rax, BYTE PTR [rdi+rbx]
XOR [rsi+rbx], AL
ADD rbx, 1
JZ dest2
MOVZX rax, BYTE PTR [rdi+rbx]
XOR [rsi+rbx], AL
ADD rbx, 1
JNZ dest1
dest2:
FUNCTION = ThdSt
EXIT FUNCTION
NOP
NOP
mainlab:
DB 212,84,249,14,51,10,51,105,185,124,111,140,101,116,200,44
DB 255,120,28,0
NOP
NOP
seclab:
DB 128,60,144,125,19,99,64,73,214,4,22,235,0,26,138,77
DB 140,17,127,0
END FUNCTION
-
Hi Chris,
With o2's automatic register downsize, this will work in both 32bit and 64bit
A few minor alterations:
'2018-03-20 T 06:23:55
'
%filename "t.exe"
uses RTL64
FUNCTION mystr() AS STRING
LOCAL mlabnum AS SYS
LOCAL Secnum AS SYS
LOCAL string ThdSt
local mrbx as sys
def codeptr @ %1
mlabnum = CODEPTR(mainlab)
mov mrbx,rbx
ThdSt = nuls 19
Secnum = STRPTR(ThdSt)
MOV rsi, mlabnum
MOV rdi, Secnum
MOV rcx, 19
REP MOVSB
mlabnum = CODEPTR(seclab)
MOV rsi, Secnum
MOV rbx, 19
MOV rdi, mlabnum
ADD rsi, rbx
ADD rdi, rbx
NEG rbx
dest1:
MOVZX AL, [rdi+rbx]
XOR [rsi+rbx], AL
ADD rbx, 1
JZ dest2
MOVZX AL,[rdi+rbx]
XOR [rsi+rbx], AL
ADD rbx, 1
JZ dest2
MOVZX AL,[rdi+rbx]
XOR [rsi+rbx], AL
ADD rbx, 1
JZ dest2
MOVZX AL,[rdi+rbx]
XOR [rsi+rbx], AL
ADD rbx, 1
JNZ dest1
dest2:
mov rbx,mrbx
FUNCTION = ThdSt
EXIT FUNCTION
NOP
NOP
mainlab:
DB 212,84,249,14,51,10,51,105,185,124,111,140,101,116,200,44
DB 255,120,28,0
NOP
NOP
seclab:
DB 128,60,144,125,19,99,64,73,214,4,22,235,0,26,138,77
DB 140,17,127,0
END FUNCTION
print mystr
-
Charles
You are a maestro of Asm, i salute you
it took me an entire day searching high and low to correct my code and still not sucessful
especially at the MOVZX .... BYTE PTR line which could not compile
i'm a beginner programmer and an infant in ASM, i learn a lot here in this forum
Thanxx a lot Charles