0% found this document useful (0 votes)
267 views24 pages

Assemly Language 02: To Pay More Attention To Gain Better Result

The document discusses assembly language programming concepts including arithmetic operations, accessing variable addresses, procedures, and loops. It provides sample assembly code and memory maps that demonstrate: 1. Performing arithmetic operations and accepting user input to sum two integers. 2. Getting the addresses of variables and drawing the memory map of a program. 3. Passing values to procedure arguments by reference using pointers to modify the original variable values. 4. Using a loop that performs an operation multiple times.

Uploaded by

tuan luu
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PPTX, PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
267 views24 pages

Assemly Language 02: To Pay More Attention To Gain Better Result

The document discusses assembly language programming concepts including arithmetic operations, accessing variable addresses, procedures, and loops. It provides sample assembly code and memory maps that demonstrate: 1. Performing arithmetic operations and accepting user input to sum two integers. 2. Getting the addresses of variables and drawing the memory map of a program. 3. Passing values to procedure arguments by reference using pointers to modify the original variable values. 4. Using a loop that performs an operation multiple times.

Uploaded by

tuan luu
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PPTX, PDF, TXT or read online on Scribd
You are on page 1/ 24

+

To pay more ASSEMLY


attention to gain LANGUAGE 02
better result
+
Objectives
After studying this chapter, you should be able to:
 Perform arithmetic operations
 Access variable’s address
 Draw the memory map of a program
 Understand the way procedures work.
 Use a loop operation
+
Contents

 1- Arithmetic operations
 2- Access variable’s address and memory map
 3- Procedure with pointer parameters
 4- Use Loops
1- Arithmetic Operations
EX06_Adding.asm
Write a MASM program that will accept 2 integers, then sum of
them will be print out.
EX06_Adding.asm - Source code
; EX06_Adding.asm Accept 2 integers, sum of them will be printed out
include \masm32\include\masm32rt.inc
sum PROTO :DWORD, :DWORD ; prototype a method + 2 parameters
.code
start: ; The CODE entry point of the program
call main ; branch to the "main" procedure
exit
; «««««««««««««««««««««««««««««««««««««««««««««««««««««««
main proc
LOCAL var1:DWORD ; 2 DWORD integral variables
LOCAL var2:DWORD ;
LOCAL result:DWORD ; Result of operation
; Input 2 integers
mov var1, sval(input("Enter number 1 : "))
mov var2, sval(input("Enter number 2 : "))
; Invoke the procedure SUM to compute their sum, result in EAX
push eax ; store EAX to STACK
invoke sum, var1 , var2
mov result, eax ; result = EAX
pop eax ; restore EAX from STACK
EX06_Adding.asm - Source code

; Print the result


print chr$("Sum of them:")
print str$(result)

ret
main endp
; ««««««««««««««««««««««««««««
sum proc v1: DWORD, v2:DWORD
mov eax, v1 ; eax= v1
add eax, v2 ; eax = eax + v2 -> Result in eax
ret
sum endp

end start
+ 2- Access Variable’s Address

 Thefollowing program depicts how to get


addresses of variables:
 The operator OFFSET for global variables
 The instruction LEA for local variables
 Draw memory map of a program
Addresses.asm- Access Variable’s Address
+

Data segment (txt2)4206964


(global (aReal)4206960 5809
variables)

I love you
(txt1)4206596
(anInt)4206592 123

(var1)1245112 1000
Stack segment
(local variables)
Addresses.asm- Access Variable’s Address
+
(txt2)4206964
(aReal)4206960 5809

Data segment
(global variables) I love you
(txt1)4206596
(anInt)4206592 123

(var1)1245112 1000

Stack segment
(local variables)
Addresses.asm- Access Variable’s Address
+
Addresses.asm- Source code
+
; Addresses.asm
; Draw memory of a program
; Access address and value of aReal
include \masm32\include\masm32rt.inc print chr$("Address of aReal:")
.data ; initialized data mov eax, OFFSET aReal
anInt DD 123 print str$(eax)
txt1 db "I love you", 0 print chr$(", value:")
.data? ; Un-initialized data mov aReal, 5809
aReal DD ? print str$(aReal)
txt2 db 128 dup (?) print chr$(13,10)
.code ; Access address and value of txt2
start: ; The CODE entry point to the program print chr$("Address of txt2:")
call main ; branch to the "main" procedure mov eax, OFFSET txt2
exit print str$(eax)
; «««« print chr$(", value:")
main proc print OFFSET txt2
LOCAL var1: DWORD print chr$(13,10)
; Access address and value of local var var1
; Access address and value of anInt mov var1, 1000
print chr$("Address of anInt:") print chr$("Address of var1:")
mov eax, OFFSET anInt ; Operator OFFSET will get address of a global var lea eax, var1 ; LEA get local variable address
print str$(eax) print str$(eax)
print chr$(", value:") print chr$(", value:")
print str$(anInt) print str$(var1)
print chr$(13,10) print chr$(13,10)
; Access address and value of txt1 ret
print chr$("Address of txt1:") main endp
mov eax, OFFSET txt1 ; ««««««««««««««««««
print str$(eax) end start
print chr$(", value:")
print OFFSET txt1
print chr$(13,10)
+ Swap1.asm
 This program depicts passing values to arguments when calling a
procedure

 Program that will accept 2 integers, swap them then print out results.

 This version can not perform requirements successfully because the


procedure swap1 accesses variables directly

Comment:
This program can
not swap 2 values
Swap1.asm – Source code
+
Swap1.asm – Memory Map when the procedure Swap1 is
+ called

From main
call Stack
1245112 var1: 123 Stack of
main
1245104 var2: 456

1245088 v2: 456 Stack of


swap1
1245084 v1: 123

Copy var1  v1 Procedure swap1


Copy var2  v2
All statements do not
can not modify
relate to var1. var2 values of
arguments
Swap2.asm
+
 This program will repair the failure of the previous program in which
a procedure is declared using pointers (address of data)

1245112 (var1) var1: 123 Stack of


main
1245104 (var2) var2: 456

1245088 (add1) 1245104 Stack of


swap2
1245084 (add2) 1245112

t1= value at add1


To change values of t2= value at add2
var1 and var2 Value at add1 = t2
Value at add2= t1
Swap2.asm – Source code
+
Swap2.asm – Source code
+

1245112 (var2) var1: 123 Stack of


main
1245104 (var1) var2: 456
Swap2.asm – Source code
+

1245112 (var2) var1: 123 Stack of


main
1245104 (var1) var2: 456

1245088 (add2) 1245104 Stack of


swap2
1245084 (add1) 1245112

t1= value at add1


To change values of t2= value at add2
var1 and var2 Value at add1 = t2
Value at add2= t1
3-Loop.asm
The following program depicts a way to use loop.
Program will perform 3 times, for each time, 2 integers will be
accepted then sum of them is print out.
Loop.asm – Source code
Loop.asm
– Source
code
Exercises
Develop a program that will perform n times, for each time, 2
integers will be accepted then sum of them is printed out. Value
of n is received from user.

Develop a program that will print out the nth element of the
Fibonacci sequence.
Index 1 2 3 4 5 6 7 8 9 10
Fib. 1 1 2 3 5 8 13 21 34 55

If (n = 1 or n =2) eax=1
Else
t1=1; t2= 1
loop n-2 times
eax = t1 + t2
t1= t2
t2 = eax
eax contains the result
Exercises
Develop a procedure for computing n! using the following
prototype:
factorial PROTO : DWORD

In the procedure main of the ASM program, the integer n will be


accepted then value of n! will be printed out
n! = 1* 2 * 3* …. * n
+ Summary

 Arithmetic operations
 Accessing variable’s address
 Drawing the memory map of a program
 The way procedures work.
 Using loops

You might also like