NASM Forum > Other Discussion
TASM32, MASM32, MASM64 Quines
alCoPaUL:
--- Code: ---; Benu
; by alCoPaUL [GIMO][As][aBrA][NPA][b8][BCVG][rRlf]
; 2/27/2023 NYC
; tasm32 benu.asm
; tlink32 ~Tpe ~ap benu.obj,benu.exe,,tmsvcrt.lib,,
.686
.model flat,stdcall
extrn _printf:proc
.code
start:
enter 0,0
mov al,0Dh
mov bl,2Dh
z:lea edx,a
mov cx,1318
r:cmp byte ptr[edx],bl
je s
jmp u
s:mov byte ptr[edx],al
cmp al,2Dh
je c
mov byte ptr[edx+1],0Ah
jmp u
c:mov byte ptr[edx+1],2Dh
u:inc edx
dec cx
cmp cx,0
jnz r
cmp bl,0Dh
je td
push offset a
push offset i
call _printf
jmp ll
td:
lea edi,n
lea esi,a
mov cx,1374
sn:mov al,byte ptr[esi]
mov byte ptr[edi],al
inc esi
inc edi
dec cx
cmp cx,1224
je t
cmp cx,1074
je t
cmp cx,924
je t
cmp cx,774
je t
cmp cx,624
je t
cmp cx,474
je t
cmp cx,324
je t
cmp cx,174
je t
cmp cx,24
je t
jmp sts
t:mov byte ptr[edi],27h
mov byte ptr[edi+1],0Dh
mov byte ptr[edi+2],0Ah
mov byte ptr[edi+3],64h
mov byte ptr[edi+4],62h
mov byte ptr[edi+5],20h
mov byte ptr[edi+6],27h
add edi,7
jmp sts
sts:cmp cx,0
jne sn
push offset n
push offset i
call _printf
ll:mov al,0Dh
cmp bl,2Dh
xchg al,bl
je z
push offset x
push offset i
call _printf
leave
ret
.data
d db 27h,0Dh,0Ah,64h,62h,20h,27h,0
x db 2Ch,32h,37h,68h,2Ch,30h,0Dh,0Ah,65h,6eh,64h,20h,73h,74h,61h,72h,74h,0
i db 25h,73h,0
n db 1380 DUP(0)
a db '; Benu--; by alCoPaUL [GIMO][As][aBrA][NPA][b8][BCVG][rRlf]--; 2/27/2023 NYC--; tasm32 benu.asm--; tlink32 ~Tpe ~ap benu.obj,benu.exe,,tmsvcrt.lib,,--'
db '.686--.model flat,stdcall--extrn _printf:proc--.code--start:--enter 0,0--mov al,0Dh--mov bl,2Dh--z:lea edx,a--mov cx,1318--r:cmp byte ptr[edx],bl--je '
db 's--jmp u--s:mov byte ptr[edx],al--cmp al,2Dh--je c--mov byte ptr[edx+1],0Ah--jmp u--c:mov byte ptr[edx+1],2Dh--u:inc edx--dec cx--cmp cx,0--jnz r--cmp'
db ' bl,0Dh--je td--push offset a--push offset i--call _printf--jmp ll--td:--lea edi,n--lea esi,a--mov cx,1374--sn:mov al,byte ptr[esi]--mov byte ptr[edi]'
db ',al--inc esi--inc edi--dec cx--cmp cx,1224--je t--cmp cx,1074--je t--cmp cx,924--je t--cmp cx,774--je t--cmp cx,624--je t--cmp cx,474--je t--cmp cx,32'
db '4--je t--cmp cx,174--je t--cmp cx,24--je t--jmp sts--t:mov byte ptr[edi],27h--mov byte ptr[edi+1],0Dh--mov byte ptr[edi+2],0Ah--mov byte ptr[edi+3],64'
db 'h--mov byte ptr[edi+4],62h--mov byte ptr[edi+5],20h--mov byte ptr[edi+6],27h--add edi,7--jmp sts--sts:cmp cx,0--jne sn--push offset n--push offset i--'
db 'call _printf--ll:mov al,0Dh--cmp bl,2Dh--xchg al,bl--je z--push offset x--push offset i--call _printf--leave--ret--.data--d db 27h,0Dh,0Ah,64h,62h,20h'
db ',27h,0--x db 2Ch,32h,37h,68h,2Ch,30h,0Dh,0Ah,65h,6eh,64h,20h,73h,74h,61h,72h,74h,0--i db 25h,73h,0--n db 1380 DUP(0)--a db ',27h,0
end start
; ###########################
; Firebird
; by alCoPaUL[GIMO][As][aBrA][NPA][b8][BCVG][rRlf]
; 2/27/2023 NYC
; ml64.exe firebird.asm /link /subsystem:console /defaultlib:64mscrt.lib /entry:main
; ############
;
extrn printf:proc
.code
main proc
sub rsp,28h
mov al,13
mov bl,95
z:lea r9,a
mov dx,1329
r:cmp byte ptr[r9],bl
je s
jmp u
s:mov byte ptr[r9],al
cmp al,95
je kcl
mov byte ptr[r9+1],10
jmp u
kcl:mov byte ptr[r9+1],95
u:inc r9
dec dx
cmp dx,0
jnz r
cmp bl,0Dh
je otd
lea rdx,a
lea rcx,i
call printf
jmp ll
otd:
lea rdi,n
lea rsi,a
mov cx,1380
son:mov al,byte ptr[rsi]
mov byte ptr[rdi],al
inc rsi
inc rdi
dec cx
cmp cx,1224
je t
cmp cx,1074
je t
cmp cx,924
je t
cmp cx,774
je t
cmp cx,624
je t
cmp cx,474
je t
cmp cx,324
je t
cmp cx,174
je t
cmp cx,24
je t
jmp sts
t:mov byte ptr[rdi],27h
mov byte ptr[rdi+1],0Dh
mov byte ptr[rdi+2],0Ah
mov byte ptr[rdi+3],64h
mov byte ptr[rdi+4],62h
mov byte ptr[rdi+5],20h
mov byte ptr[rdi+6],27h
add rdi,7
jmp sts
sts:cmp cx,0
jne son
lea rdx,n
lea rcx,i
call printf
ll:mov al,13
cmp bl,95
xchg al,bl
je z
lea rdx,x
lea rcx,i
call printf
add rsp,28h
ret
main endp
.data
d db 27h,0Dh,0Ah,64h,62h,20h,27h,0
x db 2Ch,32h,37h,68h,2Ch,30h,0Dh,0Ah,65h,6eh,64h,0
i db 25h,73h,0
n db 1380 DUP(0)
a db '; ###########################__; Firebird__; by alCoPaUL[GIMO][As][aBrA][NPA][b8][BCVG][rRlf]__; 2/27/2023 NYC__; ml64.exe firebird.asm /link /subsystem:con'
db 'sole /defaultlib:64mscrt.lib /entry:main__; ############__;__extrn printf:proc__.code__main proc__sub rsp,28h__mov al,13__mov bl,95__z:lea r9,a__mov d'
db 'x,1329__r:cmp byte ptr[r9],bl__je s__jmp u__s:mov byte ptr[r9],al__cmp al,95__je kcl__mov byte ptr[r9+1],10__jmp u__kcl:mov byte ptr[r9+1],95__u:inc r'
db '9__dec dx__cmp dx,0__jnz r__cmp bl,0Dh__je otd__lea rdx,a__lea rcx,i__call printf__jmp ll__otd:__lea rdi,n__lea rsi,a__mov cx,1380__son:mov al,byte pt'
db 'r[rsi]__mov byte ptr[rdi],al__inc rsi__inc rdi__dec cx__cmp cx,1224__je t__cmp cx,1074__je t__cmp cx,924__je t__cmp cx,774__je t__cmp cx,624__je t__cm'
db 'p cx,474__je t__cmp cx,324__je t__cmp cx,174__je t__cmp cx,24__je t__jmp sts__t:mov byte ptr[rdi],27h__mov byte ptr[rdi+1],0Dh__mov byte ptr[rdi+2],0A'
db 'h__mov byte ptr[rdi+3],64h__mov byte ptr[rdi+4],62h__mov byte ptr[rdi+5],20h__mov byte ptr[rdi+6],27h__add rdi,7__jmp sts__sts:cmp cx,0__jne son__lea '
db 'rdx,n__lea rcx,i__call printf__ll:mov al,13__cmp bl,95__xchg al,bl__je z__lea rdx,x__lea rcx,i__call printf__add rsp,28h__ret__main endp__.data__d db '
db '27h,0Dh,0Ah,64h,62h,20h,27h,0__x db 2Ch,32h,37h,68h,2Ch,30h,0Dh,0Ah,65h,6eh,64h,0__i db 25h,73h,0__n db 1380 DUP(0)__a db ',27h,0
end
;FengHuang
;by alCoPaUL[GIMO][As][aBrA][NPA][b8]
;2/27/2023
;ml fh.asm /link /subsystem:console /defaultlib:32mscrt.lib /entry:main
.686
.model flat,stdcall
extern printf:proc
.code
start:
main proc
enter 0,0
mov al,0Dh
mov bl,2Dh
z:lea edx,a
mov cx,1329
r:cmp byte ptr[edx],bl
je s
jmp u
s:mov byte ptr[edx],al
cmp al,2Dh
je g
mov byte ptr[edx+1],0Ah
jmp u
g:mov byte ptr[edx+1],2Dh
u:inc edx
dec cx
cmp cx,0
jnz r
cmp bl,0Dh
je td
push offset a
push offset i
call printf
jmp ll
td:
lea edi,n
lea esi,a
mov cx,1374
sn:mov al,byte ptr[esi]
mov byte ptr[edi],al
inc esi
inc edi
dec cx
cmp cx,1224
je t
cmp cx,1074
je t
cmp cx,924
je t
cmp cx,774
je t
cmp cx,624
je t
cmp cx,474
je t
cmp cx,324
je t
cmp cx,174
je t
cmp cx,24
je t
jmp sts
t:mov byte ptr[edi],27h
mov byte ptr[edi+1],0Dh
mov byte ptr[edi+2],0Ah
mov byte ptr[edi+3],64h
mov byte ptr[edi+4],62h
mov byte ptr[edi+5],20h
mov byte ptr[edi+6],27h
add edi,7
jmp sts
sts:cmp cx,0
jne sn
push offset n
push offset i
call printf
ll:mov al,0Dh
cmp bl,2Dh
xchg al,bl
je z
push offset x
push offset i
call printf
leave
ret
main endp
.data
d db 27h,0Dh,0Ah,64h,62h,20h,27h,0
x db 2Ch,32h,37h,68h,2Ch,30h,0Dh,0Ah,65h,6eh,64h,20h,73h,74h,61h,72h,74h,0
i db 25h,73h,0
n db 1380 DUP(0)
a db ';FengHuang--;by alCoPaUL[GIMO][As][aBrA][NPA][b8]--;2/27/2023--;ml fh.asm /link /subsystem:console /defaultlib:32mscrt.lib /entry:main--.686--.model f'
db 'lat,stdcall--extern printf:proc--.code--start:--main proc--enter 0,0--mov al,0Dh--mov bl,2Dh--z:lea edx,a--mov cx,1329--r:cmp byte ptr[edx],bl--je s--'
db 'jmp u--s:mov byte ptr[edx],al--cmp al,2Dh--je g--mov byte ptr[edx+1],0Ah--jmp u--g:mov byte ptr[edx+1],2Dh--u:inc edx--dec cx--cmp cx,0--jnz r--cmp bl'
db ',0Dh--je td--push offset a--push offset i--call printf--jmp ll--td:--lea edi,n--lea esi,a--mov cx,1374--sn:mov al,byte ptr[esi]--mov byte ptr[edi],al-'
db '-inc esi--inc edi--dec cx--cmp cx,1224--je t--cmp cx,1074--je t--cmp cx,924--je t--cmp cx,774--je t--cmp cx,624--je t--cmp cx,474--je t--cmp cx,324--j'
db 'e t--cmp cx,174--je t--cmp cx,24--je t--jmp sts--t:mov byte ptr[edi],27h--mov byte ptr[edi+1],0Dh--mov byte ptr[edi+2],0Ah--mov byte ptr[edi+3],64h--m'
db 'ov byte ptr[edi+4],62h--mov byte ptr[edi+5],20h--mov byte ptr[edi+6],27h--add edi,7--jmp sts--sts:cmp cx,0--jne sn--push offset n--push offset i--call'
db ' printf--ll:mov al,0Dh--cmp bl,2Dh--xchg al,bl--je z--push offset x--push offset i--call printf--leave--ret--main endp--.data--d db 27h,0Dh,0Ah,64h,62'
db 'h,20h,27h,0--x db 2Ch,32h,37h,68h,2Ch,30h,0Dh,0Ah,65h,6eh,64h,20h,73h,74h,61h,72h,74h,0--i db 25h,73h,0--n db 1380 DUP(0)--a db ',27h,0
end start
--- End code ---
Ready to assemble and link sources and respective Essential Libraries Attached..
~ alCoPaUL [GIMO][As][aBrA][NPA][b8][BCVG][rRlf]
alCoPaUL:
Notes:
1.) Adjust your text viewer (e.g. Notepad) to open with Windows CRLF formatting.
2.) Adjust your console upto the 169th column for the artsy view of the quine..
3.) For the first quine, replace the tilde (~) with the minus (-) sign.
4.) To get the proper source code output, do the birdquine.exe > birdquine.txt and assemble/link birdquine.txt for the roundtrip, proving that it is indeed a quine.
Build Tools:
a.) Use Visual Studio 2010 x86/win64 build tools. The libs should be compatible but I included the exact libs as a separate download just in case.
b.) Obtain TASM 5 and update it with the necessary .exe patches coz assembling the TASM32 source code with the vanilla/rtm version leads to error. You can download the LATEST TASM32.EXE from Embarcadero's C++ Builder 10.4 Suite, which is free to try. I used TLINK32.EXE (updated/update file together with TASM32 update file) from TASM 5 suite+updates. You can use any of the 2 C Runtime libs (the one with "t" and the other one with "latest") that I provided with no error.
~ alCoPaUL [GIMO][As][aBrA][NPA][b8][BCVG][rRlf]
debs3759:
You do realise that this is a NASM forum? I imagine it assembles and executes fine, but just saying...
alCoPaUL:
that's why it's in the off-topic section.
but if you think of it, this is related to "Source Code Portability".
you can use this as an EXTERNAL reference as a comparison to the NASM quine i made for WINDOWS and MacOS.
if you insist that this belongs to its own appropriate forum, what they use there is old assembly syntax and also they are not using ML64.EXE there.
idk why people here are coming so hard everytime i post.
lelz.
alCoPaUL:
it is customary to include the link/lineage to the first ever assemblers in the biz.
POPULAR / Famous assemblers in the biz, i must say..
MASM was first released in 1981 and TASM was in 1989.
so far, I've seen 1 TASM quine floating along with some assembly code that is obviously derivative of the prominent assemblers and 1 MASM quine from a Japanese blogger.
but the way those were written are soo different with what about to show you.
since we got from 32-32-64, we'll go to 16-16
aries.asm
--- Code: ---; ARIES
; by alCoPaUL[GIMO][As][aBrA][NPA][b8][BCVG][rRlf]
; 3/2/2023 NYC
;
; ml /omf ARIES.asm
; m16link.exe ARIES.obj
;
.model tiny
.stack
.code
start:
main proc
push cs
pop ds
mov al,13
mov ah,45
z:lea bx,[k]
mov cx,1261
r:cmp byte ptr[bx],ah
je s
jmp u
s:mov byte ptr[bx],al
cmp al,45
je cu
mov byte ptr[bx+1],10
jmp u
cu:mov byte ptr[bx+1],45
u:inc bx
dec cx
cmp cx,0
jnz r
cmp al,45
je td
push ax
lea dx,[k]
mov ah,9h
int 21h
pop ax
jmp ll
td:
lea si,[k]
lea di,[n]
mov cx,1324
sn:mov al,byte ptr[si]
mov byte ptr[di],al
inc si
inc di
dec cx
cmp cx,1224
je t
cmp cx,1074
je t
cmp cx,924
je t
cmp cx,774
je t
cmp cx,624
je t
cmp cx,474
je t
cmp cx,324
je t
cmp cx,174
je t
cmp cx,24
je t
jmp sts
t:mov byte ptr[di],27h
mov byte ptr[di+1],0Dh
mov byte ptr[di+2],0Ah
mov byte ptr[di+3],64h
mov byte ptr[di+4],62h
mov byte ptr[di+5],20h
mov byte ptr[di+6],27h
add di,7
jmp sts
sts:cmp cx,0
jne sn
push ax
lea dx,[n]
mov ah,9h
int 21h
pop ax
ll:
cmp al,13
mov ah,45
xchg al,ah
je z
lea dx,[x]
mov ah,09h
int 21h
mov ax,4C00h
int 21h
main endp
.data
x db 2Ch,32h,37h,68h,2Ch,32h,34h,68h,0Dh,0Ah,65h,6eh,64h,20h,73h,74h,61h,72h,74h,24h,0
n db 1261 DUP(0),24h
k db '; ARIES--; by alCoPaUL[GIMO][As][aBrA][NPA][b8][BCVG][rRlf]--; 3/2/2023 NYC--;--; ml /omf ARIES.asm-'
db '-; m16link.exe ARIES.obj--;--.model tiny--.stack--.code--start:--main proc--push cs--pop ds--mov al,13--mov ah,45--z:lea bx,[k]--mov cx,1261--r:cmp by'
db 'te ptr[bx],ah--je s--jmp u--s:mov byte ptr[bx],al--cmp al,45--je cu--mov byte ptr[bx+1],10--jmp u--cu:mov byte ptr[bx+1],45--u:inc bx--dec cx--cmp cx,'
db '0--jnz r--cmp al,45--je td--push ax--lea dx,[k]--mov ah,9h--int 21h--pop ax--jmp ll--td:--lea si,[k]--lea di,[n]--mov cx,1324--sn:mov al,byte ptr[si]-'
db '-mov byte ptr[di],al--inc si--inc di--dec cx--cmp cx,1224--je t--cmp cx,1074--je t--cmp cx,924--je t--cmp cx,774--je t--cmp cx,624--je t--cmp cx,474--'
db 'je t--cmp cx,324--je t--cmp cx,174--je t--cmp cx,24--je t--jmp sts--t:mov byte ptr[di],27h--mov byte ptr[di+1],0Dh--mov byte ptr[di+2],0Ah--mov byte p'
db 'tr[di+3],64h--mov byte ptr[di+4],62h--mov byte ptr[di+5],20h--mov byte ptr[di+6],27h--add di,7--jmp sts--sts:cmp cx,0--jne sn--push ax--lea dx,[n]--mo'
db 'v ah,9h--int 21h--pop ax--ll:--cmp al,13--mov ah,45--xchg al,ah--je z--lea dx,[x]--mov ah,09h--int 21h--mov ax,4C00h--int 21h--main endp--.data--x db '
db '2Ch,32h,37h,68h,2Ch,32h,34h,68h,0Dh,0Ah,65h,6eh,64h,20h,73h,74h,61h,72h,74h,24h,0--n db 1261 DUP(0),24h--k db ',27h,24h
end start
--- End code ---
GOAT.ASM
--- Code: ---; GOAT
; by alCoPaUL[GIMO][As][aBrA][NPA][b8][BCVG][rRlf]
; 3/2/2023 NYC
;
; tasm GOAT.asm
; tlink GOAT.obj
;
.model tiny
.stack
.code
start:
main proc
push cs
pop ds
mov al,13
mov ah,45
z:lea bx,[k]
mov cx,1265
r:cmp byte ptr[bx],ah
je s
jmp u
s:mov byte ptr[bx],al
cmp al,45
je cu
mov byte ptr[bx+1],10
jmp u
cu:mov byte ptr[bx+1],45
u:inc bx
dec cx
cmp cx,0
jnz r
cmp al,45
je td
push ax
lea dx,[k]
mov ah,9h
int 21h
pop ax
jmp ll
td:lea si,[k]
lea di,[n]
mov cx,1328
sn:mov al,byte ptr[si]
mov byte ptr[di],al
jmp q
zf:jmp z
q:inc si
inc di
dec cx
cmp cx,1224
je t
cmp cx,1074
je t
cmp cx,924
je t
cmp cx,774
je t
cmp cx,624
je t
cmp cx,474
je t
cmp cx,324
je t
cmp cx,174
je t
cmp cx,24
je t
jmp sts
t:mov byte ptr[di],27h
mov byte ptr[di+1],0Dh
mov byte ptr[di+2],0Ah
mov byte ptr[di+3],64h
mov byte ptr[di+4],62h
mov byte ptr[di+5],20h
mov byte ptr[di+6],27h
add di,7
jmp sts
sts:cmp cx,0
jne sn
push ax
lea dx,[n]
mov ah,9h
int 21h
pop ax
ll:cmp al,13
mov ah,45
xchg al,ah
je zf
lea dx,[x]
mov ah,09h
int 21h
mov ax,4C00h
int 21h
main endp
.data
x db 2Ch,32h,37h,68h,2Ch,32h,34h,68h,0Dh,0Ah,65h,6eh,64h,20h,73h,74h,61h,72h,74h,24h,0
n db 1265 DUP(0),24h
k db '; GOAT--; by alCoPaUL[GIMO][As][aBrA][NPA][b8][BCVG][rRlf]--; 3/2/2023 NYC--;--; tasm GOAT.asm--; tlink '
db 'GOAT.obj--;--.model tiny--.stack--.code--start:--main proc--push cs--pop ds--mov al,13--mov ah,45--z:lea bx,[k]--mov cx,1265--r:cmp byte ptr[bx],ah--j'
db 'e s--jmp u--s:mov byte ptr[bx],al--cmp al,45--je cu--mov byte ptr[bx+1],10--jmp u--cu:mov byte ptr[bx+1],45--u:inc bx--dec cx--cmp cx,0--jnz r--cmp al'
db ',45--je td--push ax--lea dx,[k]--mov ah,9h--int 21h--pop ax--jmp ll--td:lea si,[k]--lea di,[n]--mov cx,1328--sn:mov al,byte ptr[si]--mov byte ptr[di],'
db 'al--jmp q--zf:jmp z--q:inc si--inc di--dec cx--cmp cx,1224--je t--cmp cx,1074--je t--cmp cx,924--je t--cmp cx,774--je t--cmp cx,624--je t--cmp cx,474-'
db '-je t--cmp cx,324--je t--cmp cx,174--je t--cmp cx,24--je t--jmp sts--t:mov byte ptr[di],27h--mov byte ptr[di+1],0Dh--mov byte ptr[di+2],0Ah--mov byte '
db 'ptr[di+3],64h--mov byte ptr[di+4],62h--mov byte ptr[di+5],20h--mov byte ptr[di+6],27h--add di,7--jmp sts--sts:cmp cx,0--jne sn--push ax--lea dx,[n]--m'
db 'ov ah,9h--int 21h--pop ax--ll:cmp al,13--mov ah,45--xchg al,ah--je zf--lea dx,[x]--mov ah,09h--int 21h--mov ax,4C00h--int 21h--main endp--.data--x db '
db '2Ch,32h,37h,68h,2Ch,32h,34h,68h,0Dh,0Ah,65h,6eh,64h,20h,73h,74h,61h,72h,74h,24h,0--n db 1265 DUP(0),24h--k db ',27h,24h
end start
--- End code ---
again, these codes are still thematic and relate to source code portability...
and yes, NASM still produces DOS codes/executables, right?
same drill and test roundtripping to prove that they're legit quines.
regards,
alCoPaUL [GIMO][As][aBrA][NPA][b8][BCVG][rRlf]
3/2/2023 New York, Cubao
note:
attached is the DOS Linker for the Microsoft OMF object file. You can assemble the MS-DOS source code using Visual Studio 2010++ build tool ML.EXE AND use the Attached file.
How to Use the Linker:
* Execute with the source code and press 5 enters (you don't have to fill the blanks with any data)
Navigation
[0] Message Index
[#] Next page
Go to full version