Δημοσιεύτηκε: 21 Οκτ 2008, 18:08
- Κώδικας: Επιλογή όλων
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 ειναι αρκετα διαφορετικα