Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- ;Autor:
- ;Nume program:
- ;Descriere:
- ;Data:
- include \masm32\include64\masm64rt.inc
- ;include header.inc
- ELEM STRUCT
- OP db NULL
- NR dq NULL
- next dq NULL
- ELEM EndS
- malloc MACRO size:REQ
- invoke HeapAlloc, rv(GetProcessHeap), 0, size
- EXITM <rax>
- ENDM
- textcolor MACRO attr:REQ
- fn SetConsoleTextAttribute, StdOutput, attr
- EXITM <>
- ENDM
- free MACRO memory:REQ
- invoke HeapFree, rv(GetProcessHeap), 0, memory
- EXITM <>
- ENDM
- printf MACRO format:REQ, args:VARARG
- fn vc_printf, cfm$(format), args
- EXITM <>
- ENDM
- .data
- StdOutput DWORD ?
- stackpointer qword NULL
- double1 qword 5.0
- double2 qword 50.99
- double3 qword 1.0
- double4 qword 9999.5
- .code
- main proc
- invoke GetStdHandle, STD_OUTPUT_HANDLE
- mov StdOutput,eax
- sub rsp ,32+8
- movq xmm0, double4
- mov rdx,0
- mov rcx ,stackpointer
- call StackPush
- add rsp,40
- sub rsp ,32+8
- mov dl, ')'
- mov rcx ,stackpointer
- call StackPush
- add rsp,40
- sub rsp ,32+8
- movq xmm0, double3
- mov rdx,0
- mov rcx ,stackpointer
- call StackPush
- add rsp,40
- sub rsp ,32+8
- mov dl, '-'
- mov rcx ,stackpointer
- call StackPush
- add rsp,40
- sub rsp ,32+8
- mov dl, '('
- mov rcx ,stackpointer
- call StackPush
- add rsp,40
- sub rsp ,32+8
- mov dl, '+'
- mov rcx ,stackpointer
- call StackPush
- add rsp,40
- sub rsp ,32+8
- movq xmm0, double2
- mov rdx,0
- mov rcx ,stackpointer
- call StackPush
- add rsp,40
- sub rsp ,32+8
- mov dl, '*'
- mov rcx ,stackpointer
- call StackPush
- add rsp,40
- sub rsp ,32+8
- movq xmm0, double1
- mov rdx,0
- mov rcx ,stackpointer
- call StackPush
- add rsp,40
- sub rsp ,32+8
- mov dl, '-'
- mov rcx ,stackpointer
- call StackPush
- add rsp,40
- sub rsp,32+8
- mov rcx,stackpointer
- mov rdx,0
- call Stack_Show
- add rsp,40
- invoke ExitProcess, 0
- ret
- main endp
- StackPush proc
- USING rbx, rdi
- SaveRegs
- ;mov qword ptr [rsp+16],rcx
- ;mov qword ptr [rsp+8],rdx
- mov rbx,rcx
- mov r15,rdx
- mov rdi,malloc(SIZEOF ELEM)
- mov [rdi].ELEM.OP,r15b
- movupd [rdi].ELEM.NR, xmm0
- .if rbx == NULL
- mov [rdi].ELEM.next, NULL
- mov stackpointer, rdi
- .else
- mov [rdi].ELEM.next,rbx
- mov stackpointer, rdi
- .endif
- mov rax,rdi
- RestoreRegs
- ret
- StackPush endp
- Stack_Show proc
- USING rbx,rdi
- SaveRegs
- mov rbx,rcx
- textcolor(07h)
- xor r15,r15
- .if rbx {} NULL
- printf("\nStiva este:")
- .repeat
- .if [rbx].ELEM.OP == NULL
- inc r15
- mov r15,[rbx].ELEM.NR
- printf("%.2lf ",qword ptr[rbx].ELEM.NR)
- .else
- printf("%c", byte ptr [rbx].ELEM.OP)
- .endif
- mov rbx,[rbx].ELEM.next
- .until rbx == NULL
- .endif
- mov rax,r15
- RestoreRegs
- ret
- Stack_Show endp
- end
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement