Assembly Lecture 3 Introduction to 8086 · 2019-11-13 · Introduction to 8086 Assembly Lecture 3...
Transcript of Assembly Lecture 3 Introduction to 8086 · 2019-11-13 · Introduction to 8086 Assembly Lecture 3...
![Page 1: Assembly Lecture 3 Introduction to 8086 · 2019-11-13 · Introduction to 8086 Assembly Lecture 3 Object files, compiling, assembling and linking. Compiling a C file test.c compiler](https://reader030.fdocuments.us/reader030/viewer/2022040209/5e3da1eeb270913d2e58fe25/html5/thumbnails/1.jpg)
Introduction to 8086 Assembly Lecture 3
Object files, compiling, assembling and linking
![Page 2: Assembly Lecture 3 Introduction to 8086 · 2019-11-13 · Introduction to 8086 Assembly Lecture 3 Object files, compiling, assembling and linking. Compiling a C file test.c compiler](https://reader030.fdocuments.us/reader030/viewer/2022040209/5e3da1eeb270913d2e58fe25/html5/thumbnails/2.jpg)
Compiling a C file
test.ccompiler (gcc)
executable
![Page 3: Assembly Lecture 3 Introduction to 8086 · 2019-11-13 · Introduction to 8086 Assembly Lecture 3 Object files, compiling, assembling and linking. Compiling a C file test.c compiler](https://reader030.fdocuments.us/reader030/viewer/2022040209/5e3da1eeb270913d2e58fe25/html5/thumbnails/3.jpg)
Compiling a C file, object files
test.ccompiler (gcc)
test.o executablelinker (ld)
object file
![Page 4: Assembly Lecture 3 Introduction to 8086 · 2019-11-13 · Introduction to 8086 Assembly Lecture 3 Object files, compiling, assembling and linking. Compiling a C file test.c compiler](https://reader030.fdocuments.us/reader030/viewer/2022040209/5e3da1eeb270913d2e58fe25/html5/thumbnails/4.jpg)
Object files, libraries and linking
test.ccompiler (gcc)
test.o executablelinker (ld)
requiredlibraries
object file
![Page 5: Assembly Lecture 3 Introduction to 8086 · 2019-11-13 · Introduction to 8086 Assembly Lecture 3 Object files, compiling, assembling and linking. Compiling a C file test.c compiler](https://reader030.fdocuments.us/reader030/viewer/2022040209/5e3da1eeb270913d2e58fe25/html5/thumbnails/5.jpg)
Modular programming in C
test.c
fact.c
test.o
fact.o
compiler (gcc)
compiler (gcc)
requiredlibraries
executablelinker (ld)
![Page 6: Assembly Lecture 3 Introduction to 8086 · 2019-11-13 · Introduction to 8086 Assembly Lecture 3 Object files, compiling, assembling and linking. Compiling a C file test.c compiler](https://reader030.fdocuments.us/reader030/viewer/2022040209/5e3da1eeb270913d2e58fe25/html5/thumbnails/6.jpg)
high-level to low-level hierarchy
test.ccompiler (gcc)
test.o testlinker (ld)
object file
test.asm assembler
executable(machine code)assembly fileC file
compiler (gcc)
![Page 7: Assembly Lecture 3 Introduction to 8086 · 2019-11-13 · Introduction to 8086 Assembly Lecture 3 Object files, compiling, assembling and linking. Compiling a C file test.c compiler](https://reader030.fdocuments.us/reader030/viewer/2022040209/5e3da1eeb270913d2e58fe25/html5/thumbnails/7.jpg)
Object files
● Machine code + metadata (unresolved symbols, etc.)○ for linking, debugging, etc.○ https://en.wikipedia.org/wiki/Object_file○ https://en.wikipedia.org/wiki/Object_code
● Object file formats○ Common Object File Format (COFF)○ Relocatable Object Module Format (OMF)○ Executable and Linkable Format (ELF)
![Page 8: Assembly Lecture 3 Introduction to 8086 · 2019-11-13 · Introduction to 8086 Assembly Lecture 3 Object files, compiling, assembling and linking. Compiling a C file test.c compiler](https://reader030.fdocuments.us/reader030/viewer/2022040209/5e3da1eeb270913d2e58fe25/html5/thumbnails/8.jpg)
Assembling assembly files
test.asmassembler (nasm)
test.o executablelinker (ld)
object file
![Page 9: Assembly Lecture 3 Introduction to 8086 · 2019-11-13 · Introduction to 8086 Assembly Lecture 3 Object files, compiling, assembling and linking. Compiling a C file test.c compiler](https://reader030.fdocuments.us/reader030/viewer/2022040209/5e3da1eeb270913d2e58fe25/html5/thumbnails/9.jpg)
Our first assembly program (64 bit)
look at: http://cs.lmu.edu/~ray/notes/nasmtutorial/
![Page 10: Assembly Lecture 3 Introduction to 8086 · 2019-11-13 · Introduction to 8086 Assembly Lecture 3 Object files, compiling, assembling and linking. Compiling a C file test.c compiler](https://reader030.fdocuments.us/reader030/viewer/2022040209/5e3da1eeb270913d2e58fe25/html5/thumbnails/10.jpg)
Our first assembly program (64 bit)
look at: http://cs.lmu.edu/~ray/notes/nasmtutorial/
![Page 11: Assembly Lecture 3 Introduction to 8086 · 2019-11-13 · Introduction to 8086 Assembly Lecture 3 Object files, compiling, assembling and linking. Compiling a C file test.c compiler](https://reader030.fdocuments.us/reader030/viewer/2022040209/5e3da1eeb270913d2e58fe25/html5/thumbnails/11.jpg)
Assembling, linking and running (64 bit)
first.asmassembler (nasm)
first.o a.outlinker (ld)
object file
nasm -f elf64 first.asm ld first.o
executable
● Assemble: nasm -f elf64 first.asm● Link: ld first.o● Execute: ./a.out
assembly file
![Page 12: Assembly Lecture 3 Introduction to 8086 · 2019-11-13 · Introduction to 8086 Assembly Lecture 3 Object files, compiling, assembling and linking. Compiling a C file test.c compiler](https://reader030.fdocuments.us/reader030/viewer/2022040209/5e3da1eeb270913d2e58fe25/html5/thumbnails/12.jpg)
Assembling, linking and running (64 bit)
first.asmassembler (nasm)
first.o a.outlinker (ld)
object file
nasm -f elf64 first.asm ld first.o
executable
nasm -f elf64 first.asm
assembly file
assemblerinput assembly file
create 64 bit ELF object file format
![Page 13: Assembly Lecture 3 Introduction to 8086 · 2019-11-13 · Introduction to 8086 Assembly Lecture 3 Object files, compiling, assembling and linking. Compiling a C file test.c compiler](https://reader030.fdocuments.us/reader030/viewer/2022040209/5e3da1eeb270913d2e58fe25/html5/thumbnails/13.jpg)
Our first assembly program (32 bit)
![Page 14: Assembly Lecture 3 Introduction to 8086 · 2019-11-13 · Introduction to 8086 Assembly Lecture 3 Object files, compiling, assembling and linking. Compiling a C file test.c compiler](https://reader030.fdocuments.us/reader030/viewer/2022040209/5e3da1eeb270913d2e58fe25/html5/thumbnails/14.jpg)
Our first assembly program (32 bit)
![Page 15: Assembly Lecture 3 Introduction to 8086 · 2019-11-13 · Introduction to 8086 Assembly Lecture 3 Object files, compiling, assembling and linking. Compiling a C file test.c compiler](https://reader030.fdocuments.us/reader030/viewer/2022040209/5e3da1eeb270913d2e58fe25/html5/thumbnails/15.jpg)
Assembling, linking and running (64 bit)
first32.asmassembler (nasm)
first32.o a.outlinker (ld)
object file
nasm -f elf first32.asm ld first32.o
executable
● Assemble: nasm -f elf first32.asm● Link: ld -m elf_i386 first32.o ● Execute: ./a.out
assembly file
![Page 16: Assembly Lecture 3 Introduction to 8086 · 2019-11-13 · Introduction to 8086 Assembly Lecture 3 Object files, compiling, assembling and linking. Compiling a C file test.c compiler](https://reader030.fdocuments.us/reader030/viewer/2022040209/5e3da1eeb270913d2e58fe25/html5/thumbnails/16.jpg)
Assembling, linking and running (64 bit)
nasm -f elf first32.asm
assemblerinput assembly file
create 32 bit ELF object file format
first32.asmassembler (nasm)
first32.o a.outlinker (ld)
object file
nasm -f elf first32.asm ld first32.o
executableassembly file
![Page 17: Assembly Lecture 3 Introduction to 8086 · 2019-11-13 · Introduction to 8086 Assembly Lecture 3 Object files, compiling, assembling and linking. Compiling a C file test.c compiler](https://reader030.fdocuments.us/reader030/viewer/2022040209/5e3da1eeb270913d2e58fe25/html5/thumbnails/17.jpg)
Assembling, linking and running (64 bit)
ld -m elf_i386 first32.o
linker input object file (32 bit ELF format)create 32 bit executable
first32.asmassembler (nasm)
first32.o a.outlinker (ld)
object file
nasm -f elf first32.asm ld first32.o
executableassembly file
![Page 18: Assembly Lecture 3 Introduction to 8086 · 2019-11-13 · Introduction to 8086 Assembly Lecture 3 Object files, compiling, assembling and linking. Compiling a C file test.c compiler](https://reader030.fdocuments.us/reader030/viewer/2022040209/5e3da1eeb270913d2e58fe25/html5/thumbnails/18.jpg)
Compiling and linking C files
#include <stdio.h>
int fact(int);
int main() { int x = 8; printf("x!=%d\n", fact(x)); return 0;}
int fact(int n) { return n==0 ? 1 : n*fact(n-1);}
test.c fact.c
![Page 19: Assembly Lecture 3 Introduction to 8086 · 2019-11-13 · Introduction to 8086 Assembly Lecture 3 Object files, compiling, assembling and linking. Compiling a C file test.c compiler](https://reader030.fdocuments.us/reader030/viewer/2022040209/5e3da1eeb270913d2e58fe25/html5/thumbnails/19.jpg)
Compiling and linking C files
test.c
fact.c
test.o
fact.o
gcc -c test.c
requiredlibraries
executablegcc -c fact.c
ld -dynamic-linker /lib64/ld-linux-x86-64.so.2 /usr/lib/x86_64-linux-gnu/crt1.o /usr/lib/x86_64-linux-gnu/crti.o test.o fact.o /usr/lib/x86_64-linux-gnu/libc.so /usr/lib/x86_64-linux-gnu/crtn.o
linking
compile to object file
compile to object file
![Page 20: Assembly Lecture 3 Introduction to 8086 · 2019-11-13 · Introduction to 8086 Assembly Lecture 3 Object files, compiling, assembling and linking. Compiling a C file test.c compiler](https://reader030.fdocuments.us/reader030/viewer/2022040209/5e3da1eeb270913d2e58fe25/html5/thumbnails/20.jpg)
Compiling and linking C files
test.c
fact.c
test.o
fact.o
gcc -c test.c
requiredlibraries
executablegcc -c fact.c
easier: let gcc do the linking
gcc test.o fact.o
gcc runs ld with appropriate arguments
compile to object file
compile to object file
![Page 21: Assembly Lecture 3 Introduction to 8086 · 2019-11-13 · Introduction to 8086 Assembly Lecture 3 Object files, compiling, assembling and linking. Compiling a C file test.c compiler](https://reader030.fdocuments.us/reader030/viewer/2022040209/5e3da1eeb270913d2e58fe25/html5/thumbnails/21.jpg)
Compiling C files to 32 bit apps
Compile to 32 bit executable on a 64 bit system:
● First, install the 32 bit libraries:○ sudo apt-get install libc6-dev-i386○ sudo apt-get install libx32gcc-4.8-dev○ sudo apt-get install gcc-multilib
● You might need to install:○ sudo apt-get install gcc-6-multilib
![Page 22: Assembly Lecture 3 Introduction to 8086 · 2019-11-13 · Introduction to 8086 Assembly Lecture 3 Object files, compiling, assembling and linking. Compiling a C file test.c compiler](https://reader030.fdocuments.us/reader030/viewer/2022040209/5e3da1eeb270913d2e58fe25/html5/thumbnails/22.jpg)
32 bit Compiling and linking C files
test.c
fact.c
test.o
fact.o
gcc -m32 -c test.c
requiredlibraries
executable
ld -m elf_i386 -dynamic-linker /lib/ld-linux.so.2 /usr/lib32/crt1.o /usr/lib32/crti.o test.o fact.o /usr/lib32/libc.so /usr/lib32/crtn.o
liking (32 bit)
compile to object file
compile to object file
gcc -m32 -c fact.c
![Page 23: Assembly Lecture 3 Introduction to 8086 · 2019-11-13 · Introduction to 8086 Assembly Lecture 3 Object files, compiling, assembling and linking. Compiling a C file test.c compiler](https://reader030.fdocuments.us/reader030/viewer/2022040209/5e3da1eeb270913d2e58fe25/html5/thumbnails/23.jpg)
32 bit Compiling and linking C files
test.c
fact.c
test.o
fact.o
requiredlibraries
executable
easier: let gcc do the linking
gcc -m32 test.o fact.o
gcc runs ld with appropriate arguments
compile to object file
compile to object file
gcc -m32 -c test.c
gcc -m32 -c fact.c
![Page 24: Assembly Lecture 3 Introduction to 8086 · 2019-11-13 · Introduction to 8086 Assembly Lecture 3 Object files, compiling, assembling and linking. Compiling a C file test.c compiler](https://reader030.fdocuments.us/reader030/viewer/2022040209/5e3da1eeb270913d2e58fe25/html5/thumbnails/24.jpg)
Our second assembly program!
● We do (mostly) 32 bit assembly● We use the functions/macros from the book (Carter, PC Assembly
Language, 2007) for IO
![Page 25: Assembly Lecture 3 Introduction to 8086 · 2019-11-13 · Introduction to 8086 Assembly Lecture 3 Object files, compiling, assembling and linking. Compiling a C file test.c compiler](https://reader030.fdocuments.us/reader030/viewer/2022040209/5e3da1eeb270913d2e58fe25/html5/thumbnails/25.jpg)
I/O functions and macros from the book
call print_int prints EAX as singed integer
call print_char prints the character whose ascii code is stored in AL
call print_string prints the string whose starting address is stored in EAX, string must be null-terminated (C-string)
call print_nl prints a newline character
call read_int reads an integer from standard input and stores it into EAX
call read_char read a character from standard input and stores its ascii code in EAX
dump_regs <num> (MACRO) prints out values of registers and flags (<num> is some number like 12 making debugging easier)
Carter, PC Assembly Language, 2007.
![Page 26: Assembly Lecture 3 Introduction to 8086 · 2019-11-13 · Introduction to 8086 Assembly Lecture 3 Object files, compiling, assembling and linking. Compiling a C file test.c compiler](https://reader030.fdocuments.us/reader030/viewer/2022040209/5e3da1eeb270913d2e58fe25/html5/thumbnails/26.jpg)
Our second assembly program!
driver.c
myprog.asm
driver.o
myprog.o
executableLink
compile to object file
assemble to object file
C libraries
asm_io.asm asm_io.oassemble to object file
![Page 27: Assembly Lecture 3 Introduction to 8086 · 2019-11-13 · Introduction to 8086 Assembly Lecture 3 Object files, compiling, assembling and linking. Compiling a C file test.c compiler](https://reader030.fdocuments.us/reader030/viewer/2022040209/5e3da1eeb270913d2e58fe25/html5/thumbnails/27.jpg)
steps to run our program
0. Install the Netwide Assembler○ sudo apt install nasm
1. Download the example files (including IO files) from the books website: http://pacman128.github.io/pcasm/
○ for linux click on the link linux_examples to download the files○ there are links for other platforms as well
2. Copy the files asm_io.inc, asm_io.asm and cdecl.h to your current working directory.
3. Compile the file asm_io.asm to object file (creating asm_io.inc)○ nasm -f elf -d ELF_TYPE asm_io.asm
4. Create a file named driver.c
![Page 28: Assembly Lecture 3 Introduction to 8086 · 2019-11-13 · Introduction to 8086 Assembly Lecture 3 Object files, compiling, assembling and linking. Compiling a C file test.c compiler](https://reader030.fdocuments.us/reader030/viewer/2022040209/5e3da1eeb270913d2e58fe25/html5/thumbnails/28.jpg)
steps to run our program
4. Create a file named driver.c simply calling an assembly function:
(alternatively, copy the files driver.c and cdecl.h to your current directory.)
void asm_main();
int main() {
asm_main();
return 0;}
![Page 29: Assembly Lecture 3 Introduction to 8086 · 2019-11-13 · Introduction to 8086 Assembly Lecture 3 Object files, compiling, assembling and linking. Compiling a C file test.c compiler](https://reader030.fdocuments.us/reader030/viewer/2022040209/5e3da1eeb270913d2e58fe25/html5/thumbnails/29.jpg)
steps to run our program
5. Install the 32 bit C libraries (if not installed)○ sudo apt-get install libc6-dev-i386○ sudo apt-get install libx32gcc-4.8-dev○ sudo apt-get install gcc-multilib (if needed)○ sudo apt-get install gcc-6-multilib (if needed)
6. Compile driver.c to 32 bit object file (creating driver.o)○ gcc -m32 -c driver.c
![Page 30: Assembly Lecture 3 Introduction to 8086 · 2019-11-13 · Introduction to 8086 Assembly Lecture 3 Object files, compiling, assembling and linking. Compiling a C file test.c compiler](https://reader030.fdocuments.us/reader030/viewer/2022040209/5e3da1eeb270913d2e58fe25/html5/thumbnails/30.jpg)
steps to run our program
7. Create your main assembly file containing the asm_main label ○ here the file named myprog.asm and looks like this:
%include "asm_io.inc"
segment .text
global asm_main
asm_main:enter 0,0pusha
mov eax, 100mov ebx, 20sub eax, ebx
call print_int ; print EAXcall print_nl ; print a new line
dump_regs 1111 ; printing the system state (registers, etc.)
popaleaveret
![Page 31: Assembly Lecture 3 Introduction to 8086 · 2019-11-13 · Introduction to 8086 Assembly Lecture 3 Object files, compiling, assembling and linking. Compiling a C file test.c compiler](https://reader030.fdocuments.us/reader030/viewer/2022040209/5e3da1eeb270913d2e58fe25/html5/thumbnails/31.jpg)
steps to run our program
7. Create your main assembly file containing the asm_main label ○ here the file named myprog.asm and looks like this:
%include "asm_io.inc"
segment .text
global asm_main
asm_main:enter 0,0pusha
mov eax, 100mov ebx, 20sub eax, ebx
call print_int ; print EAXcall print_nl ; print a new line
dump_regs 1111 ; print registers, etc
popaleaveret
void asm_main();
int main() {
asm_main();
return 0;} driver.c
myprog.asm
![Page 32: Assembly Lecture 3 Introduction to 8086 · 2019-11-13 · Introduction to 8086 Assembly Lecture 3 Object files, compiling, assembling and linking. Compiling a C file test.c compiler](https://reader030.fdocuments.us/reader030/viewer/2022040209/5e3da1eeb270913d2e58fe25/html5/thumbnails/32.jpg)
steps to run our program
8. Compile your assembly code to 32 bit object file (creating myprog.o)○ nasm -f elf myprog.asm
9. link the object files myprog.o, asm_io.o, driver.o (and the C libraries) to create the executable
○ gcc -m32 driver.o myprog.o asm_io.o
10. run the executable and see the output○ ./a.out
![Page 33: Assembly Lecture 3 Introduction to 8086 · 2019-11-13 · Introduction to 8086 Assembly Lecture 3 Object files, compiling, assembling and linking. Compiling a C file test.c compiler](https://reader030.fdocuments.us/reader030/viewer/2022040209/5e3da1eeb270913d2e58fe25/html5/thumbnails/33.jpg)
steps to run our program
driver.c
myprog.asm
driver.o
myprog.o
executable
gcc -m32 driver.o myprog.o asm_io.o
Link
compile to object file
assemble to object file
gcc -m32 -c driver.c
nasm -f elf myprog.asm
nasm -f elf -d ELF_TYPE asm_io.asm
C libraries
asm_io.asm asm_io.oassemble to object file
![Page 34: Assembly Lecture 3 Introduction to 8086 · 2019-11-13 · Introduction to 8086 Assembly Lecture 3 Object files, compiling, assembling and linking. Compiling a C file test.c compiler](https://reader030.fdocuments.us/reader030/viewer/2022040209/5e3da1eeb270913d2e58fe25/html5/thumbnails/34.jpg)
steps to run our program
%include "asm_io.inc"
segment .text
global asm_main
asm_main:enter 0,0pusha
mov eax, 100mov ebx, 20sub eax, ebx
call print_int ; print EAXcall print_nl ; print a new line
dump_regs 1111 ; print registers, etc
popaleaveret
void asm_main();
int main() {
asm_main();
return 0;}
driver.cmyprog.asm
![Page 35: Assembly Lecture 3 Introduction to 8086 · 2019-11-13 · Introduction to 8086 Assembly Lecture 3 Object files, compiling, assembling and linking. Compiling a C file test.c compiler](https://reader030.fdocuments.us/reader030/viewer/2022040209/5e3da1eeb270913d2e58fe25/html5/thumbnails/35.jpg)
All commands
nasm -f elf -d ELF_TYPE asm_io.asm
gcc -m32 -c driver.c
nasm -f elf myprog.asm
gcc -m32 driver.o myprog.o asm_io.o
./a.out
![Page 36: Assembly Lecture 3 Introduction to 8086 · 2019-11-13 · Introduction to 8086 Assembly Lecture 3 Object files, compiling, assembling and linking. Compiling a C file test.c compiler](https://reader030.fdocuments.us/reader030/viewer/2022040209/5e3da1eeb270913d2e58fe25/html5/thumbnails/36.jpg)
Determine output file name (-o option)
nasm -f elf -d ELF_TYPE asm_io.asm
gcc -m32 -c driver.c
nasm -f elf myprog.asm
gcc -m32 driver.o myprog.o asm_io.o -o myprog
./myprog
![Page 37: Assembly Lecture 3 Introduction to 8086 · 2019-11-13 · Introduction to 8086 Assembly Lecture 3 Object files, compiling, assembling and linking. Compiling a C file test.c compiler](https://reader030.fdocuments.us/reader030/viewer/2022040209/5e3da1eeb270913d2e58fe25/html5/thumbnails/37.jpg)
All commands
to make your life easier I have created a simple bash script named run.sh
nasm -f elf -d ELF_TYPE asm_io.asm && gcc -m32 -c driver.cnasm -f elf $1.asm &&gcc -m32 -o $1 driver.c $1.o asm_io.o &&./$1
run.sh
![Page 38: Assembly Lecture 3 Introduction to 8086 · 2019-11-13 · Introduction to 8086 Assembly Lecture 3 Object files, compiling, assembling and linking. Compiling a C file test.c compiler](https://reader030.fdocuments.us/reader030/viewer/2022040209/5e3da1eeb270913d2e58fe25/html5/thumbnails/38.jpg)
All commands
to make your life easier I have created a simple bash script named run.sh
nasm -f elf -d ELF_TYPE asm_io.asm && gcc -m32 -c driver.cnasm -f elf $1.asm &&gcc -m32 -o $1 driver.c $1.o asm_io.o &&./$1
run.sh
![Page 39: Assembly Lecture 3 Introduction to 8086 · 2019-11-13 · Introduction to 8086 Assembly Lecture 3 Object files, compiling, assembling and linking. Compiling a C file test.c compiler](https://reader030.fdocuments.us/reader030/viewer/2022040209/5e3da1eeb270913d2e58fe25/html5/thumbnails/39.jpg)
Writing your own program
● Take the same steps as above● You source file should be like this (or use skel.asm from the book file)
%include "asm_io.inc"
segment .text
global asm_main
asm_main:enter 0,0pusha
; write your assembly code here!
popaleaveret