Δημοσιεύτηκε: 21 Οκτ 2008, 18:08
από 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;

}





θα προσπαθησω να κανω μετατροπει τον κωδικα απο MASM για windows 16 bit σε linux NASM 32 bit

καλη μου επιτυχια

να ρωτησω κατι αλλο για οποιον ξερει? ποσο διαφερουν οι εντολες απο 16 bit X86 σε 32 bit X86?

ενα τμημα του προγραμματος σε assembly(masm 16 bit windows) που εχω ποσταρει ή καποιο αλλο παραδειγμα πως θα γινοταν, πως θα το μετατρεψω σε nasm 32 bit? γιατι εδω τα πραγματα απ οτι βλεπω γιατι ερχομαι σε πρωτη επαφη με nasm ειναι αρκετα διαφορετικα