;=====================================================================
; Assignment1.asm – Homework Assignment 1
;
; Author: Sheng_Jiang
; Course: COSC 2425
; Date: 06/08/05
;=====================================================================
.386
.MODEL flat, stdcall
option casemap:none
include windows.inc
include kernel32.inc
include masm32.inc
includelib kernel32.lib
includelib masm32.lib
.DATA
;Playing with flags
FlagTest BYTE 0
SFlagTest SBYTE 0
;Summing up a series of unsigned numbers
DWORDArray DWORD 1,2,3,4,5,6,7,8,9,10
;Sum up all the positive and negative values
SDWORDArray SDWORD 1,-2,3,-4,5,-6,7,-8,9,-10
.CODE
main PROC
int 3
;Data for Playing with flags
mov FlagTest,1;
add FlagTest,255 ;set Carry flag ,FlagTest=0
add FlagTest,1 ;clear Carry flag ,FlagTest=1
sub FlagTest,1 ;set Zero flag ,FlagTest=0
add FlagTest,1 ;clear Zero flag ,FlagTest=1
sub SFlagTest,2 ;set Sign flag ,SFlagTest=-2
add SFlagTest,10 ;clear Sign flag ,SFlagTest=8
add SFlagTest,127 ;set Overflow flag ,SFlagTest=135
mov SFlagTest,0;
sub SFlagTest,100 ;clear Overflow flag,SFlagTest=-100
;Summing up a series of unsigned numbers
mov edi, OFFSET DWORDArray ;Begin
mov ecx, OFFSET DWORDArray+SIZEOF DWORDArray ;End
mov eax, 0 ;Initialize Sum
Sum1 :
add eax, [edi] ;sum
add edi, TYPE(DWORDArray) ;step to next
cmp ecx, edi ;loop test
jne Sum1 ;loop
; eax should be 55(37h) now
;Sum up all the positive and negative values
mov edi, OFFSET SDWORDArray ;Begin
mov ecx, OFFSET SDWORDArray+SIZEOF SDWORDArray;End
mov eax, 0 ;Initialize Sum
mov ebx, 0 ;Initialize Sum
Sum2 :
mov edx, [edi] ;compare edi with 0
cmp edx, 0
jl Sum2Neg ;jump to Sum2Neg, add to ebx if edi is a negative number
add eax, [edi] ;otherwise, add to eax
jmp Sum2Pos ;done, jump to loop point Sum2Pos
Sum2Neg:
add ebx, [edi] ;add to ebx if edi is a negative number
Sum2Pos:
add edi, TYPE(DWORDArray) ;step to next
cmp ecx, edi ;loop test
jne Sum2 ;loop
; eax should be 25(19h) now
; ebx should be -30(ffffffe2h) now
invoke ExitProcess, 0
main ENDP
END main
# makefile for Assignment1
PROJECT = Assignment1
NAME = Sheng_Jiang
Date = 5/25/05
ROOTDRIVE = C
VERSION = V1
SRCS =
$(PROJECT).asm
makefile
MASM32 = $(ROOTDRIVE):/masm32
ML = $(MASM32)/bin/ml
LINK = $(MASM32)/bin/link
Zip = H:/mydoc/Tools/Bin/zip
DEBUG = c:/masm32/debug/windbg
MLFLAGS = /I. /I $(MASM32)include /Zi /Zd /Zf /c /Fl /coff /Cp
LINKFLAGS = /subsystem:console /libpath:$(MASM32)lib /debug
DEBUGFLAGS = -QY -g -G -WF $(PROJECT).WEW
all: $(PROJECT).exe
$(PROJECT).obj: $(PROJECT).asm
$(ML) $(MLFLAGS) $(PROJECT).asm
$(PROJECT).exe: $(PROJECT).obj
$(LINK) $(LINKFLAGS) $(PROJECT).obj
clean:
del $(PROJECT).exe *.obj *.lst *.map *.pdb *.ilk
zip: clean
del $(NAME)_$(PROJECT)_$(VERSION).zip
$(Zip) $(NAME)_$(PROJECT)_$(VERSION).zip $(SRCS)
debug: $(PROJECT).exe
$(DEBUG) $(DEBUGFLAGS) $(PROJECT).exe
Leave a Reply