; CIS-261
; Week06demo.asm
; @topic W060101 Examples of DATA segment values and MOV instructions
; @brief MOV instruction uses EBX register as data placeholder or an address pointing to memory
.386 ; Tells MASM to use Intel 80386 instruction set.
.MODEL FLAT ; Flat memory model
option casemap:none ; Treat labels as case-sensitive
.CONST ; Constant data segment
.STACK 100h ; (default is 1-kilobyte stack)
.DATA ; Begin initialized data segment
mydata BYTE 10, 20, 30, 40, 50 ; array of five bytes
shortval WORD 111, 222, 333
table1 DWORD 20 DUP (?)
status BYTE 7 DUP (0)
intval DWORD 77778888h
.CODE ; Begin code segment
_main PROC ; Beginning of code
mov [intval], 11112222h ; store value 11112222h in memory pointed by label intval
mov EBX, intval ; get value at intval and put it in EBX
mov EBX, [intval] ; same as above -- and strongly preferred syntax
mov EBX, OFFSET intval ; load "address of" intval into EBX
mov DWORD PTR [EBX], 33334444h ; use EBX as memory address and store 789 there
ret
_main ENDP
END _main ; Marks the end of the module and sets the program entry point label
In Visual Studio immediate window:
? intval ; this prints the value at memory location of intval
2004322440 ; this is 77778888h
? &intval ; this prints the address
0x01344062 intval ; this is what it prints