mirror of
https://github.com/netwide-assembler/nasm.git
synced 2024-12-21 09:19:31 +08:00
48 lines
1.1 KiB
NASM
48 lines
1.1 KiB
NASM
;; rdtmain - main part of test program for RDX execution.
|
|
;; returns true (0) if its parameter equals the phrase "hello"
|
|
;; "hello" is stored in the library part, to complicate the
|
|
;; linkage.
|
|
|
|
;; assemble and link with the following commands:
|
|
;; nasm -f rdf rdtmain.asm
|
|
;; nasm -f rdf rdtlib.asm
|
|
;; ldrdf rdtmain.rdf rdtlib.rdf -o rdxtest.rdx
|
|
|
|
;; run with 'rdx rdxtest.rdx [parameters]' on a Linux (or possibly
|
|
;; other 32 bit OS) systems (x86 architectures only!)
|
|
;; try using '&& echo Yes' afterwards to find out when it returns 0.
|
|
|
|
[EXTERN _strcmp] ; strcmp is an imported function
|
|
[EXTERN _message] ; imported data
|
|
[SECTION .text]
|
|
[BITS 32]
|
|
|
|
;; main(int argc,char **argv)
|
|
[GLOBAL _main]
|
|
_main:
|
|
push ebp
|
|
mov ebp,esp
|
|
|
|
;; ebp+8 = argc, ebp+12 = argv
|
|
|
|
cmp dword [ebp+8],2
|
|
jb error ; cause error if < 1 parameters
|
|
|
|
mov eax, [ebp+12] ; eax = argv
|
|
|
|
mov ebx, [eax+4] ; ebx = argv[1]
|
|
mov ecx, _message ; ecx = "hello"
|
|
|
|
push ecx
|
|
push ebx
|
|
call _strcmp ; compare strings
|
|
add esp,8 ; caller clears stack
|
|
|
|
pop ebp
|
|
ret ; return return value of _strcmp
|
|
|
|
error:
|
|
mov eax,2 ; return 2 on error
|
|
pop ebp
|
|
ret
|