[PDF] The stack and the stack pointer





Previous PDF Next PDF





x64 Cheat Sheet

x64 assembly code uses sixteen 64-bit registers. Register %rsp is used as the stack pointer a pointer to the topmost element in the stack.



Functions in MIPS

Oops in Strings/pointers (example from last time) Stack Pointer Saved ... Assembly language is untyped—there is no distinction between integers.



M6800 Assembly Language Programming

Program Counter (PC). Stack Pointer (SP). Index Register (X). Condition Code Register (CCR). Figure 3.2 - Registers of the MC6802 Microrprocessor. Page 3. 3.



Assembly Programming (III)

In AVR a stack is implemented as a block of consecutive bytes in the SRAM memory. ? A stack has at least two parameters: ? Bottom. ? Stack pointer.



Lecture 9: Assembly Programming Part 2

How would you convert this into assembly? int n = 10; Memory Instructions in MIPS assembly ... Special register $sp stores the stack pointer.



A Tiny Guide to Programming in 32-bit x86 Assembly Language

special purposes—the stack pointer (ESP) and the base pointer (EBP). In some cases namely EAX



A problem with parameter passing via stack Pointers and Arrays

– A function's activation record defines its “scope”. – We've seen examples of how to do this in Assembly. ?. Pointer. – Address of a variable in memory. – 



Procedure Stack operations

Computer Organization and Assembly Languages A push operation decrements the stack pointer by 2 or ... location pointed to by the stack pointer.



Y86 Assembly

Set up Stack pointer irmovl Stack %ebp. # Set up base pointer jmp Main. # Execute main program. # Array of 4 elements .align 4 array: .long 0xd .long 0xc0.



[PDF] The stack and the stack pointer

A reserved area of memory used to keep track of a program's internal operations including functions return addresses passed parameters etc A stack is



[PDF] The stack and the stack pointer

-Reverse Assembly Stack and Stack Pointer -What happens to stack and SP for instructions (e g PSHX JSR) -How the SP is used in getting to and leaving 



[PDF] Procedure Stack operations

A push operation decrements the stack pointer by 2 or 4 (depending on operands) and copies a value into the location pointed to by the stack pointer 0FF0



[PDF] Stack Operations Runtime Stack

The runtime stack is a memory array managed directly by the CPU using the ESP register known as the stack pointer register The ESP register holds a 32-bit



[PDF] Assembly Programming (III)

In AVR a stack is implemented as a block of consecutive bytes in the SRAM memory ? A stack has at least two parameters: ? Bottom ? Stack pointer



[PDF] Chapter 8 – Stacks

Initialize stack pointer at beginning of program STACK equ A subroutine is “called” in assembly using the MSP430 Single operand instructions:



[PDF] Quick Guide to Assembly in 161 0xbfffffff 0xbfffffc0 “top of the stack”

instruction pointer (EIP): register containing the address of the instruction to be executed Other examples: EAX (return value) etc Instructions



[PDF] Procedures and the Call Stack

Procedure/stack instructions • Calling conventions Stack Pointer: esp stack grows Pointer: ebp Stack frames support procedure calls Contents



[PDF] Stack Stack pointer and Subroutines in 8085 – With coding examples

location of the most recent data entry on the stack is known as the Stack Top How does a stack work in assembly language? We use two main instructions to 



[PDF] Stacks and Frames

variables and arguments by using offsets to the frame pointer assembly code actually contains the following two instructions: – pushl ebp

  • What is stack pointer assembly?

    The Stack Pointer is a special register in I/O Memory that points to space allocated in SRAM, referred to as The Stack. The Stack is used to temporarily store register values and return addresses when subroutines are called. The Stack Pointer is a 16-bit register defined in include files as SPH and SPL.
  • How to initialize stack pointer in assembly?

    To set up the stack pointers, enter each mode with interrupts disabled, and assign the appropriate value to the stack pointer. The stack pointer value set up in the reset handler is automatically passed as a parameter to __user_initial_stackheap() by C library initialization code.
  • What is SPL in AVR?

    SPH holds the most significant address byte, SPL the least significant. This is only true, if the AVR type has more than 256 byte SRAM. If not, SPH is undefined and must not and cannot be used.
  • Stack registers in x86
    In 8086, the main stack register is called stack pointer - SP. The stack segment register (SS) is usually used to store information about the memory segment that stores the call stack of currently executed program. SP points to current stack top.

The stack and the stack The stack and the stack pointerpointerIf you "google" the word stack, one of the definitions you will get is:If you "google" the word stack, one of the definitions you will get is:A reserved area of memory used to keep track of a program's internal operations, including functions, return addresses, passed parameters, etc. A stack is A reserved area of memory used to keep track of a program's internal operations, including functions, return addresses, passed parameters, etc. A stack is usually maintained as a "last in, first out" (usually maintained as a "last in, first out" (LIFOLIFO) data structure, so that the last item added to the structure is the first item used.) data structure, so that the last item added to the structure is the first item used.Sometimes is useful to have a region of memory for temporary storage,Sometimes is useful to have a region of memory for temporary storage, which which does not have to be allocated as named variables.does not have to be allocated as named variables. When you use subroutines and interrupts it will be essential to have such a storage When you use subroutines and interrupts it will be essential to have such a storage region.region.Such region is called a Such region is called a StackStackThe The Stack PointerStack Pointer (SP) register is used to indicate the location of the last item put onto (SP) register is used to indicate the location of the last item put onto the stack.the stack.When you PUT something ONTO the stack (When you PUT something ONTO the stack (PUSHPUSH onto the stack), the SP is decremented onto the stack), the SP is decremented beforebefore the item is placed on the stack. the item is placed on the stack.When you take something OFF of the stack (When you take something OFF of the stack (PULLPULL from the stack), the SP is incremented from the stack), the SP is incremented after the item is pulled from the stack.after the item is pulled from the stack.Before you can use a stack you have to initialize the SP to point to one value higher thanBefore you can use a stack you have to initialize the SP to point to one value higher than the highest memory location in the stack.the highest memory location in the stack.For the HC12 use a block of memory from about $3B00 to $3BFF for the stack.For the HC12 use a block of memory from about $3B00 to $3BFF for the stack.For this region of memory, initialize the stack pointer to For this region of memory, initialize the stack pointer to $3C00$3C00. Use LDS (Load Stack. Use LDS (Load Stack Pointer) to initialize the stack pointer.Pointer) to initialize the stack pointer.The stack pointer is initialized only one time in the program.The stack pointer is initialized only one time in the program.0x3BFA0x3BFB0x3BFC0x3BFD0x3BFE0x3BFF0x3C00Memoryusedby MCU(Debug12Data)

The stack is an array of memory dedicated to The stack is an array of memory dedicated to temporary storagetemporary storageSP points to location last item placed in blockSP points to location last item placed in blockSP SP decreasesdecreases when you put an item on the stack when you put an item on the stackSP SP increasesincreases when you pull the item from the stack when you pull the item from the stackFor the HC12, use For the HC12, use 0x3c000x3c00 as initial SP as initial SPSTACK:STACK:EQUEQU$3C00$3C00LDSLDS#STACK#STACKA B

D X Y SPPCCCR0x3BFA0x3BFB0x3BFC0x3BFD0x3BFE0x3BFF0x3C00Memoryusedby MCU0x3BF60x3BF70x3BF80x3BF9

An example of some code which An example of some code which uses the stackuses the stackStack pointer:Stack pointer:Initialize ONCE before the first use (LDS #STACK)Initialize ONCE before the first use (LDS #STACK)Points to last used storage locationPoints to last used storage locationDecreases when you put something on stack, and increases when you take something off stackDecreases when you put something on stack, and increases when you take something off stackSTACK:STACK:equequ$3C00$3C00ldslds#STACK#STACKldaaldaa#$2e#$2eldxldx#$1254#$1254pshapshapshxpshxclraclraldxldx#$ffff#$ffffCODE THAT USES A & XCODE THAT USES A & Xpulxpulx

pulapula0x3BFA0x3BFB0x3BFC0x3BFD0x3BFE0x3BFF0x3C00Memoryusedby MCUA X SP An example of some code which An example of some code which uses the stackuses the stack

SubroutinesSubroutinesA subroutine is a section of code which performs a specific task, usually a task which needs to be executed by different parts of the program.A subroutine is a section of code which performs a specific task, usually a task which needs to be executed by different parts of the program.Example:Example:org $1000org $1000-Math functions, such as square root (sqrt)-Math functions, such as square root (sqrt) ::Because a subroutine can be called from different places in a program, you cannot getBecause a subroutine can be called from different places in a program, you cannot get :: out of a subroutine with an instruction such as out of a subroutine with an instruction such ascall sqrtcall sqrt ::????jmp labeljmp label :: call sqrtcall sqrtBecause you would need to jump to different places depending upon which section ofBecause you would need to jump to different places depending upon which section of :: the code called the subroutine. the code called the subroutine. ::

swiswiWhen you want to call the subroutine your code has to save the address where When you want to call the subroutine your code has to save the address where thethe subroutine should return tosubroutine should return to. It does this by saving the return address on the . It does this by saving the return address on the stackstack..

sqrt:sqrt:compute square rootcompute square root :: - This is done automatically for you when you get to the subroutine by- This is done automatically for you when you get to the subroutine by :: using using JSRJSR (Jump to Subroutine) or BSR (Branch to Subroutine) (Jump to Subroutine) or BSR (Branch to Subroutine)jmp labeljmp label instruction. This instruction pushes the address of the instruction instruction. This instruction pushes the address of the instruction following the JSR (BSR) instruction on the stackfollowing the JSR (BSR) instruction on the stackAfter the subroutine is done executing its code, it needs to After the subroutine is done executing its code, it needs to return to the address saved return to the address saved on the on the stackstack..

- This is done automatically when you return from the subroutine by- This is done automatically when you return from the subroutine by using RTS (Return from Subroutine) instruction. This instruction pullsusing RTS (Return from Subroutine) instruction. This instruction pulls the return address off the stack and loads it into the PC.the return address off the stack and loads it into the PC.

SubroutinesSubroutinesCaution:Caution: The subroutine will probably need to use some HC12 registers to do its work. However, the calling code may be using its registers form some The subroutine will probably need to use some HC12 registers to do its work. However, the calling code may be using its registers form some reason - the calling code may not work correctly if the subroutine changes the values of the HC12 registers.reason - the calling code may not work correctly if the subroutine changes the values of the HC12 registers.To avoid this problem, the subroutine should save the HC12 registers before it uses them, and restore the HC12 registers after it is done with them.To avoid this problem, the subroutine should save the HC12 registers before it uses them, and restore the HC12 registers after it is done with them.

Example of a subroutine to delay for certain Example of a subroutine to delay for certain amount of timeamount of time; Subroutine to wait for 100 ms; Subroutine to wait for 100 msDelay:Delay:ldaaldaa#250#250Loop2:Loop2:ldxldx#800#800Loop1:Loop1:dexdexbnebneLoop1Loop1decadecabnebneLoop2Loop2rtsrtsWhat is the problem with this subroutine?What is the problem with this subroutine?It changes the values of the registers that are most frequently used: A and XIt changes the values of the registers that are most frequently used: A and XHow can we solve this problem?How can we solve this problem?

Example of a subroutine to delay for certain Example of a subroutine to delay for certain amount of timeamount of timeTo solve, save the values of A and X on the stack before using them, and restore them before returning.To solve, save the values of A and X on the stack before using them, and restore them before returning.; Subroutine to wait for 100 ms; Subroutine to wait for 100 msDelay:Delay:pshapshapshxpshxldaaldaa#250#250Loop2:Loop2:ldxldx#800#800Loop1:Loop1:dexdexbnebneLoop1Loop1decadecabnebneLoop2Loop2pulxpulx; restore registers; restore registerspulapula

rtsrts

A sample programA sample program; Program to make binary counter on LEDS; Program to make binary counter on LEDS; The program uses a subroutine to insert a delay between counts; The program uses a subroutine to insert a delay between countsprog:prog:equequ$1000$1000

PORTB:PORTB:equequ$0001$0001

DDRA:DDRA:equequ$0002$0002

DDRB:DDRB:equequ$0003$0003

orgorgprogprogldslds#STACK#STACK; initialize stack; initialize stackldaaldaa#$ff#$ff; put all 1s into DDRA; put all 1s into DDRAstaastaaDDRADDRA; to make PORTA output; to make PORTA outputclrclrPORTAPORTA; put $00 into PORTA; put $00 into PORTAloop:loop:jsrjsrdelaydelay; wait a bit; wait a bitincincPORTAPORTA; add 1 to PORTA; add 1 to PORTAbrabralooploop; repeat forever; repeat forever; Subroutine to wait for 100 ms; Subroutine to wait for 100 msdelay:delay:pshapshapshxpshxldaaldaa#250#250loop2:loop2:ldxldx#800#800loop1:loop1:dexdexbnebneloop1loop1decadecabnebneloop2loop2pulxpulxpulapulartsrts

JSR and BSR place return address on stackJSR and BSR place return address on stackRTS returns to instruction after JSR or BSRRTS returns to instruction after JSR or BSRSTACK:STACK:equequ$3C00$3C00orgorg$1000$10001000 CF 3C 001000 CF 3C 00ldslds#STACK#STACK1003 16 10 071003 16 10 07jsrjsrMY_SUBMY_SUB1006 7F1006 7Fswiswi1007 CE 12 341007 CE 12 34MY_SUB:MY_SUB:ldxldx#$1234#$1234100A 3D100A 3DrtsrtsA B

D X Y SPPCCCR0x3BFA0x3BFB0x3BFC0x3BFD0x3BFE0x3BFF0x3C00Memoryusedby MCU0x3BF60x3BF70x3BF80x3BF9

Another example using a subroutineAnother example using a subroutineUsing a subroutine to wait for an event to occur then take actionUsing a subroutine to wait for an event to occur then take actionWait until bit 7 of address $00CC is set.Wait until bit 7 of address $00CC is set.Write the value of ACCA to address $00CFWrite the value of ACCA to address $00CF; This routine waits until the HC12 serial port is ready, then send a byte of data to the serial port; This routine waits until the HC12 serial port is ready, then send a byte of data to the serial portputchar:putchar:brclrbrclr$00CC,#$80,putchar$00CC,#$80,putchar; Data Terminal Equip. ready; Data Terminal Equip. readystaastaa$00CF$00CF; Send char; Send charrtsrts; Program to send the word "hello" to the HC12 serial port; Program to send the word "hello" to the HC12 serial portldxldx#str#strloop:loop:ldaaldaa1,x+1,x+beqbeqdonedonejsrjsrputcharputcharbrabralooploopdone:done:swiswistr:str:fccfcc"hello""hello"; form constant character; form constant characterdc.bdc.b$0a,$0d,0$0a,$0d,0; CR-LF; CR-LF

Another example using a subroutineAnother example using a subroutineA complete program to write to the screenA complete program to write to the screenprog:prog:equequ$1000$1000

data:data:equequ$2000$2000 stack:stack:equequ$3c00$3c00

orgorgprogprogldslds#stack#stack; initialize stack; initialize stackldxldx#str#str; load pointer to "hello"; load pointer to "hello"loop:loop:ldaaldaa1,x+1,x+beqbeqdonedone; is done then end program; is done then end programjsrjsrputcharputchar; write character to screen; write character to screenbrabralooploop; branch to read next ; branch to read next charactercharacterdone:done:swiswiputchar:putchar:brclrbrclr$00CC,$80,putchar$00CC,$80,putchar; check is serial port is ; check is serial port is readyreadystaastaa$00CF$00CF; and send; and sendrtsrtsorgorgdatadatastr:str:fccfcc"hello""hello"; form constant character; form constant characterdc.bdc.b$0a,$0d,0$0a,$0d,0; CR-LF; CR-LF

JSR and BSR place return address on stackJSR and BSR place return address on stackRTS returns to instruction after JSR or BSRRTS returns to instruction after JSR or BSR

Using DIP switches to get data into the HC12Using DIP switches to get data into the HC12DIP switches make or break a connections (usually to ground)DIP switches make or break a connections (usually to ground)5V

Using DIP switches to get data into the HC12Using DIP switches to get data into the HC12To use DIP switches, connect one end of each switch to a resistorTo use DIP switches, connect one end of each switch to a resistorConnect the other end of the resistor to +5VConnect the other end of the resistor to +5VConnect the junction of the DIP switch and the resistor to an input port on the HC12Connect the junction of the DIP switch and the resistor to an input port on the HC12When the switch is open, the input port sees a logic 1 (+5V)When the switch is open, the input port sees a logic 1 (+5V)When the switch is closed, the input sees a logic 0 (0V)When the switch is closed, the input sees a logic 0 (0V)5V5VPB0PB1

Looking at the state of a few input pinsLooking at the state of a few input pinsWant to look for a particular pattern on 4 input pinsWant to look for a particular pattern on 4 input pins-For example want to do something if pattern on -For example want to do something if pattern on PB3-PB0 is 0110PB3-PB0 is 0110Don't know or care what are on the other 4 pins (PB7-PB4)Don't know or care what are on the other 4 pins (PB7-PB4)Here is the wrong way to do it:Here is the wrong way to do it:ldaaldaaPORTBPORTBcmpacmpa#b0110#b0110beqbeqtasktaskIf PB7-PB4 are anything other than 0000, you will not execute the task.If PB7-PB4 are anything other than 0000, you will not execute the task.You need to mask out the Don't Care bits before checking for the pattern on the bits you are interested inYou need to mask out the Don't Care bits before checking for the pattern on the bits you are interested inldaaldaaPORTBPORTBandaaandaa#b00001111#b00001111cmpacmpa#b00000110#b00000110beqbeqtasktaskNow, whatever pattern appears on PB7-4 is ignoredNow, whatever pattern appears on PB7-4 is ignored

Using an HC12 output port to control an LEDUsing an HC12 output port to control an LEDConnect an output port from the HC12 to an LED.Connect an output port from the HC12 to an LED.Using an output port to control an LEDUsing an output port to control an LEDPA0

Resistor, LED, andGround connected internally insidebreadboardWhen a current flowsThrough an LED, it emits light

Making a pattern on a 7-segement LEDMaking a pattern on a 7-segement LEDWant to make a particular pattern on a 7-segmen LED.Want to make a particular pattern on a 7-segmen LED.Determine a number (hex or binary) that will generate each element of the patternDetermine a number (hex or binary) that will generate each element of the pattern-For example, to display a 0, turn on segments a, b, c, d, e, and f, or bits 0, 1, 2, 3, 4, and 5 of PTH. The binary pattern is 00111111,-For example, to display a 0, turn on segments a, b, c, d, e, and f, or bits 0, 1, 2, 3, 4, and 5 of PTH. The binary pattern is 00111111, or $3for $3f-To display 0, 2, 4, 6, 8, the hex numbers are $3f, $5b, $66, $7d, $7f.-To display 0, 2, 4, 6, 8, the hex numbers are $3f, $5b, $66, $7d, $7f.Put the numbers in a tablePut the numbers in a tableGo through the table one by one to display the patternGo through the table one by one to display the patternWhen you get to the last element repeat the loopWhen you get to the last element repeat the loop a f b g

e c d

Flow chart to display the patterns on a 7-segement Flow chart to display the patterns on a 7-segement LEDLED0x3f0x5b0x660x7d0x7ftable A X

table_endStartPort H OutputPoint toFirst entryGet entryOutput toPORT HInc pointerX < endL1:L2:ldaa #$ffstaa DDRHldx #tableldaa 0,xstaa PORTHinxcpx #end_tablebls L2bra L1

Program to display the patterns on a 7-segement Program to display the patterns on a 7-segement LEDLED; Program to display patternsprog:equ$1000delay:pshadata:equ$2000pshxstack:equ$3C00ldaa#250PTH:equ$0260Loop2:ldx#8000DDRH:equ$0262Loop1:dexorgprogbneLoop1

lds#stackdecaldaa#$ffbneLoop2 staaDDRHpulx

L1:ldx#tablepula

quotesdbs_dbs14.pdfusesText_20
[PDF] stack pointer diagram

[PDF] stack pointer example

[PDF] stack pointer in 8086

[PDF] stack program in c pdf

[PDF] stack variable c++

[PDF] stack variable constructor

[PDF] stack vs heap data structures

[PDF] stacked cups program in c

[PDF] stacks are known as ________ data structures.

[PDF] stade de france 13 novembre 2019

[PDF] stagecoach

[PDF] stagecoach b5

[PDF] stagecoach banbury

[PDF] stages of child language acquisition a level

[PDF] stages of child language acquisition slideshare