Bonjour à tous je suis entrain de suivre un cour sur l'assembleur, celui à cet adresse http://beuss.developpez.com/tutoriels/pcasm/ . Je début totalement dans le domaine donc si je dis quelques conneries c'est normal .

l'auteur de ce cour utilise des fonctions en assembleur utilisé par du code C . L'assembleur utilisé est Nasm que j'ai installé sous seven .

J'utilise codeblocks et j'ai créé un projet en mode console puis ensuite j'ai ajouté un fichier first.asm qui est le premier code exemple du cour , en ajoutant ce fichier au projet il est reconnu comme source ASM c'est déja ça j'ai envie de dire mais le chemin semble encore long .

De plus l'auteur utilise une bibliothèque maison qui se sert des fonctions C contenu dans stdio.h pour les entrées sorties (je n ai pas encore trouve ou la téléchargé d’ailleurs mais ça viendra ),

pour ce premier code il utilise trois fonctions pour lire un entier afficher un entier et une chaine de caractère .
Donc je suppose que je vais devoir télécharger sa bibliothèques et la mettre dans le dossier qu'il faut dans le dossier d'installation d' nasm ou ailleurs . Bon la je suis un peu bloqué ce tuto n'étant pas destinés aux zéro en assembleur ^^

si vous pouviez m'aidez à configurer correctement mes outils afin que je puisse faire fonctionner ce bout de code, je vous en serez très reconnaissant .

Voici le code de base que j 'essaie de faire tourner :


Code :
1
2
3
4
5
6
7
8
9
10
11
 
#include <stdio.h>
#include <stdlib.h>
 
int main()
{
    int ret_status;
    ret_status = asm_main();
    return ret_status ;
 
}


Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
 
 
 
 
;
; file: first.asm
; First assembly program. This program asks for two integers as
; input and prints out their sum.
;
; To create executable:
; Using djgpp:
; nasm -f coff first.asm
; gcc -o first first.o driver.c asm_io.o
;
; Using Linux and gcc:
; nasm -f elf first.asm
; gcc -o first first.o driver.c asm_io.o
;
; Using Borland C/C++
; nasm -f obj first.asm
; bcc32 first.obj driver.c asm_io.obj
;
; Using MS C/C++
; nasm -f win32 first.asm
; cl first.obj driver.c asm_io.obj
;
; Using Open Watcom
; nasm -f obj first.asm
; wcl386 first.obj driver.c asm_io.obj
 
%include "asm_io.inc"
;
; initialized data is put in the .data segment
;
segment .data
;
; These labels refer to strings used for output
;
prompt1 db    "Enter a number: ", 0       ; don't forget nul terminator
prompt2 db    "Enter another number: ", 0
outmsg1 db    "You entered ", 0
outmsg2 db    " and ", 0
outmsg3 db    ", the sum of these is ", 0
 
 
;
; uninitialized data is put in the .bss segment
;
segment .bss
;
; These labels refer to double words used to store the inputs
;
input1  resd 1
input2  resd 1
 
 
 
;
; code is put in the .text segment
;
segment .text
        global  _asm_main
_asm_main:
        enter   0,0               ; setup routine
        pusha
 
        mov     eax, prompt1      ; print out prompt
        call    print_string
 
        call    read_int          ; read integer
        mov     [input1], eax     ; store into input1
 
        mov     eax, prompt2      ; print out prompt
        call    print_string
 
        call    read_int          ; read integer
        mov     [input2], eax     ; store into input2
 
        mov     eax, [input1]     ; eax = dword at input1
        add     eax, [input2]     ; eax += dword at input2
        mov     ebx, eax          ; ebx = eax
        dump_regs 1               ; dump out register values
        dump_mem 2, outmsg1, 1    ; dump out memory
;
; next print out result message as series of steps
;
        mov     eax, outmsg1
        call    print_string      ; print out first message
        mov     eax, [input1]     
        call    print_int         ; print out input1
        mov     eax, outmsg2
        call    print_string      ; print out second message
        mov     eax, [input2]
        call    print_int         ; print out input2
        mov     eax, outmsg3
        call    print_string      ; print out third message
        mov     eax, ebx
        call    print_int         ; print out sum (ebx)
        call    print_nl          ; print new-line
 
        popa
        mov     eax, 0            ; return back to C
        leave                     
        ret