initial checkin from subversion
This commit is contained in:
2
printf1/compile
Normal file
2
printf1/compile
Normal file
@@ -0,0 +1,2 @@
|
||||
nasm -f elf -l printf1.lst printf1.asm
|
||||
gcc -o printf1 printf1.o
|
||||
BIN
printf1/printf1
Normal file
BIN
printf1/printf1
Normal file
Binary file not shown.
47
printf1/printf1.asm
Normal file
47
printf1/printf1.asm
Normal file
@@ -0,0 +1,47 @@
|
||||
; printf1.asm print an integer from storage and from a register
|
||||
; Assemble: nasm -f elf -l printf.lst printf1.asm
|
||||
; Link: gcc -o printf1 printf1.o
|
||||
; Run: printf1
|
||||
; Output: a=5, eax=7
|
||||
|
||||
; Equivalent C code
|
||||
; /* printf1.c print an int and an expression */
|
||||
; #include <stdio.h>
|
||||
; int main()
|
||||
; {
|
||||
; int a=5;
|
||||
; printf("a=%d, eax=%d\n", a, a+2);
|
||||
; return 0;
|
||||
; }
|
||||
|
||||
; Declare some external functions
|
||||
;
|
||||
extern printf ; the C function, to be called
|
||||
|
||||
SECTION .data ; Data section, initialized variables
|
||||
|
||||
a: dd 5 ; int a=5;
|
||||
fmt: db "a=%d, eax=%d", 10, 0 ; The printf format, "\n",'0'
|
||||
|
||||
|
||||
SECTION .text ; Code section.
|
||||
|
||||
global main ; the standard gcc entry point
|
||||
main: ; the program label for the entry point
|
||||
push ebp ; set up stack frame
|
||||
mov ebp,esp
|
||||
|
||||
mov eax, [a] ; put a from store into register
|
||||
add eax, 2 ; a+2
|
||||
push eax ; value of a+2
|
||||
push dword [a] ; value of variable a
|
||||
push dword fmt ; address of ctrl string
|
||||
call printf ; Call C function
|
||||
add esp, 12 ; pop stack 3 push times 4 bytes
|
||||
|
||||
mov esp, ebp ; takedown stack frame
|
||||
pop ebp ; same as "leave" op
|
||||
|
||||
mov eax,0 ; normal, no error, return value
|
||||
ret ; return
|
||||
|
||||
Reference in New Issue
Block a user