Δημοσιεύτηκε: 02 Νοέμ 2008, 10:37
από thodoris_turtle
Κώδικας: Επιλογή όλων


title main

dosseg

.model small

.stack 100h

.data



nl db 10,13,'$'

message1 db 'Please enter a string: $'



buf db 20

actlen db ?

store db 20 dup ('$')



buf1 db 20

actlen1 db ?

store1 db 20 dup ('$')







.code



PUBLIC _length

EXTRN _asm2pas:PROC



start:

mov ax,@data

mov ds,ax





mov ah,09h

lea dx,message1 ;emfanizei to 1 mnm

int 21h



mov ah, 0ah

lea dx, buf ;diabazei to string

int 21h







lea dx,store1 ;push store1

push dx





lea dx,store ;push store

push dx











CALL _asm2pas



mov ax, 4C00h

int 21h



;-------------------------------------------





_length proc





push bp





mov bp, sp

mov di,[bp+4]

mov bx,0







lab:

cmp cl, 0Dh

je telos



mov cl,store[bx+1]

inc bx



jmp short lab



telos:



mov ax,bx



pop bp





ret

_length endp





end start













Κώδικας: Επιλογή όλων



/*

Assembly connection :

- calls ext ASM func "length"

- passes a string of chars

- gets the result (string's length)

*/



extern unsigned int cdecl length( char*, char );



unsigned int asm2pas( char* str, char* res ) /* public by default*/

{

unsigned int len;

int i;

len = length( str, 13 ); /* in ASM arguments are in reverse */



for ( i=0; i<len; i++ ) /* copy string */

res[i+1] = str[i];

res[0] = len;

/* PASCAL string bears length on char[0] */

return len;

}






εγω ψαχνω ενα τετοιο προγραμμα σε NASM assembly απλα αυτο που εχω σε MASM 16 bit assebly δεν ξερω να το μετατρεψω σε NASM 32 bit Assebly μηπως μπορω να το βρω απο καπου ή περιπου ενα παρομοιο προγραμμα :oops:


edit:

κατι αλλο πως γινεται να μεταγλωττισω το C προγραμμα που εχω πιο πανω για να παρω κατευθειαν των κωδικα σε γλωσσα assembly για NASM 32 bit linux?? γενικα γινεται αυτο να παρω τον κωδικα χαμηλου επιπουδου οταν εχω μεταγλωττιση τον κωδικα υψηλου επιπεδου?