🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

Article View: pl.comp.lang.asm
Article #1782

Re: REQ: połączenie programu w C z funkcją w ASM

#1782
From: milion
Date: Tue, 15 Apr 2008 20:21
61 lines
2377 bytes
Bernard pisze:
[...]


w kodzie było mnóstwo błędów i (teraz) jestem tego świadom ;) a metoda z 
odkładaniem literek na stos nie jest nejefektywniejsza.

Kod działa mi poprawnie na 32-bitowym kompie. A jak zrobić żeby działał 
poprawnie na 64-bitowym?

działający kod:


+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
w c:

#include <stdio.h>
#include <string.h>
extern void start (char text [],int dlugosc);
int main()
{
   char text[100];

	scanf("%s", text);
	start(text,strlen(text));
	printf("%s\n", text);
   return 0;
}

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
w asm:

section .text
global start
start: 	push 	ebp 		;standardowy prolog procedury
	mov 	ebp,esp 	
	push 	esi 		
	push 	ebx

	mov 	ecx,[ebp+12] 	;ilosc znakow
	mov 	ebx,[ebp+8] 	;adres początku tablicy
	dec	ecx			
	add	ecx,ebx		;adres końca tablicy
	
;~~~~~~odwracanie z wykorzystaniem rej 8b~~~~~
zamien:
	mov	al,[ebx]	;komórka z przodu do al
	mov	ah,[ecx]	;komórka z tyłu do ah
	mov	[ebx], ah
	mov	[ecx], al
				
	inc	ebx		;adresy poczatku i konca schodza sie do środka
	dec	ecx		
	cmp	ebx,ecx		; jezeli adr poczatku zrówna sie lub mialby przekroczyc
	jb	zamien		; adr konca, wtedy przerwij petle 
;~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
	pop 	ebx 		;zdejmij rejestry ze stosu
	pop 	esi	
	pop 	ebp 		;epilog programu - przywrocenie poprzedniej wartosci ebp
	ret 			;Powrot z procedury
	end
Technical Details
Message-ID: <fu32o4$ja6$1@news.ds.pg.gda.pl>
Path: mbox-mo1.pugleaf.net!news-archive.icm.edu.pl!news.gazeta.pl!newsfeed.pionier.net.pl!news.ds.pg.gda.pl!not-for-mail
References: <ftli4l$kuu$2@news.ds.pg.gda.pl> <4800ab47$0$31402$f69f905@mamut2.aster.pl>

Show Full Headers
Complete Article Headers
Path: mbox-mo1.pugleaf.net!news-archive.icm.edu.pl!news.gazeta.pl!newsfeed.pionier.net.pl!news.ds.pg.gda.pl!not-for-mail
From: milion <elvis921@02.pl>
Newsgroups: pl.comp.lang.asm
Subject: Re: REQ: połączenie programu w C z
 funkcją w ASM
Date: Tue, 15 Apr 2008 22:21:22 +0200
Organization: SKOS PG
Lines: 63
Message-ID: <fu32o4$ja6$1@news.ds.pg.gda.pl>
References: <ftli4l$kuu$2@news.ds.pg.gda.pl> <4800ab47$0$31402$f69f905@mamut2.aster.pl>
NNTP-Posting-Host: e-milion.ds.pg.gda.pl
Mime-Version: 1.0
X-Trace: news.ds.pg.gda.pl 1208290884 19782 153.19.213.11 (15 Apr 2008 20:21:24 GMT)
X-Complaints-To: abuse@ds.pg.gda.pl
NNTP-Posting-Date: Tue, 15 Apr 2008 20:21:24 +0000 (UTC)
User-Agent: Thunderbird 2.0.0.12 (X11/20080227)
In-Reply-To: <4800ab47$0$31402$f69f905@mamut2.aster.pl>
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit