Slide Assembly Computer Architecture
Slide Assembly Computer Architecture
ASSEMLY
LANGUAGE 01
+
Objectives
; -------------------------------
end start ; Tell MASM where the program ends
Run a program using the
Menu File/Cmd Prompt
The command
dir *.exe will
show all exe
files stored in
the current
folder.
Run an
application by
it’s file name
(.exe can be
ignored)
EX02_ProcDemo.asm
Procedures are a fundamental building block of programs that are
build directly into the processor using CALL and RET instructions.
This shows how simple it is to do in MASM.
include \masm32\include\windows.inc ; always first start: ; The CODE entry point to the
include \masm32\macros\macros.asm program
; ----------------------------------------------------------------- call main ; branch to the "main" procedure
; include files for function calls exit
; ----------------------------------------------------------------- ; «««««««««««««««««««««««««««««
include \masm32\include\masm32.inc
include \masm32\include\gdi32.inc main proc
include \masm32\include\user32.inc print chr$("Hi, I am in the 'main' procedure",13,10)
include \masm32\include\kernel32.inc ret ; return to the next instruction after
; ------------------------------------------------ "call"
; Library files that have definitions for function main endp
; exports and tested reliable prebuilt code.
; ------------------------------------------------ ; «««««««««««««««««««««««««
includelib \masm32\lib\masm32.lib
includelib \masm32\lib\gdi32.lib end start ; Tell MASM where the program
includelib \masm32\lib\user32.lib ends
includelib \masm32\lib\kernel32.lib
Comments in MASM
Comments are ignored by the assembler
; Comment line
COMMENT delimiter
[Comment block, extending to the closing delimiter]
delimiter
Code
EX03_Data.asm
Print a string declared in the program using the operator OFFSET.
The OFFSET operator tells MASM that the text data is at an OFFSET within
the file which means in this instance that it is in the .DATA section.
Data are declared in
the .data are called as
global data
Basic Data Types in MASM32
Type Abb Size Integer Types Allowed
r (byte range
s)
BYTE DB 1 -128.. 127 Character, string
.data
txtmsg db "I am data in the initialised data section",0
; «««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««
main proc
LOCAL txtinput:DWORD ; a "handle" for the text returned by "input"
mov txtinput, input("Type some text at the cursor : ") ; get input string
invoke show_text, txtinput ; show inputted string
ret
main endp
; «««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««
show_text proc string:DWORD
print chr$("This is what you typed at the cursor",13,10," *** ")
print string ; show the string at the console
print chr$(" ***",13,10)
ret
show_text endp
; «««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««
end start ; Tell MASM where the program ends
Intel CPU 32-bit Registers
64-bit Lower Lower Lower 8
Intel register 32 bits 16 bits bits
rax eax ax al
CPU rbx ebx bx bl
Register rcx
rdx
ecx
edx
cx
dx
cl
dl
s rsi
rdi
esi
edi
si
di
sil
dil
rbp ebp bp bpl
rsp esp sp spl
CS Code Segment r8 r8d r8w r8b
DS: Data Segment
r9 r9d r9w r9b
SS: Stack Segment
r10 r10d r10w r10b
r11 r11d r11w r11b
r12 r12d r12w r12b
r13 r13d r13w r13b
r14 r14d r14w r14b
r15 r15d r15w r15b
https://msdn.microsoft.com/en-us/library/windows/hardware/ff561499(v=vs.85).aspx
EX05-Numbers.asm
(1) How to receive numbers from user?
Raw data from keyboard are string. The function sval(string) will convert num-
string to signed number.
(2) How to perform a simple addition using registers
add reg1, reg2 will accumulate value in reg2 to reg1
(2) How to print value in a register/variable to screen
Function str$(number) num-string
(3) How to compare a memory variable to an immediate number
Use the instruction CMP reg, reg/ CMP reg, var/ CMP var, reg/ CMP mem,
immed/ CMP reg, immed (immed= immediate vakue)
(4) How to branching to different labels after camparation? Instruction Syntax
Use jumps: JE (equal), JG (greater than), JL (less than)
EX05-Numbrers.asm
Variables Declarations, Input data, Converting data types
EX05-Numbers.asm
Comparing and Branching
EX05-Numbers.asm
; EX05_Numbers.asm
; Declare program model and all libraries using only one file
include \masm32\include\masm32rt.inc
Source code .code
start: ; The CODE entry point to the program
call main ; branch to the "main" procedure
exit
; «««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««
main proc
LOCAL var1:DWORD ; 2 DWORD integral variables
LOCAL var2:DWORD ;
LOCAL str1:DWORD ; a string handle for the input data
; compare 2 variables and process the result
; test the MOV and ADD instructions
mov eax, var1 ; copy var1 to eax
print chr$("Add 2 registers: 100 + 250= ")
cmp eax, var2 ; CMP REG, VAR mov eax, 100 ; copy the IMMEDIATE number 100 into the EAX register
je equal ; jump if var1 is equal to 100 to "equal" mov ecx, 250 ; copy the IMMEDIATE number 250 into the ECX register
jg bigger ; jump if var1 is greater than 100 to "bigger" add ecx, eax ; ADD EAX to ECX
jl smaller ; jump if var1 is less than 100 to "smaller" print str$(ecx) ; show the result at the console
print chr$(13,10,13,10) ; 2 empty lines
bigger:
print chr$("The number 1 you entered is greater than number 2",13,10)
jmp over
smaller:
print chr$("The number 1 you entered is smaller than number 2",13,10)
over:
ret
main endp
; «««««««««««««««««««««««««««««««««««««««««««««
Part 2:
Write a MASM
program that will print
the following cantor of
Hàn Mặc Tử
+ Summary