| | |
Push Instruction
![]() |
The behavior is equivalent to:
But that's not valid code because sp can't be used for addressing and memory to memory moves are illegal. To get the same effect legally, you could do this:
But that makes use of two extra registers. Better to simply use push, no?
Assembly Syntax (Toggle Plain Text)
sub sp,2 mov [sp],[si]
Assembly Syntax (Toggle Plain Text)
sub sp,2 mov bp,sp mov ax,[si] mov [bp],ax
I'm here to prove you wrong.
•
•
Join Date: Mar 2006
Posts: 10
Reputation:
Solved Threads: 0
YA PUSH IS EASY , BUT THIS IS A QUESTION IN MY TEST
I WAS SOLVE IT IN ANOTHER WAY :
is it true ?? :o
I WAS SOLVE IT IN ANOTHER WAY :
Assembly Syntax (Toggle Plain Text)
push [SI] MOV BX,[SI] MOV DI,SP DEC DI MOV [DI],BH DEC DI MOV [DI],BL MOV SP,DI
is it true ?? :o
•
•
Join Date: Mar 2006
Posts: 10
Reputation:
Solved Threads: 0
is it false when i use DI instead of Bp Assembly Syntax (Toggle Plain Text)
sub sp,2 mov di,sp mov ax,[si] mov [di],ax
i wait 4 ur reply >is it false when i use DI instead of Bp
No, di can be used for addressing just as easily as bp. However, it benefits clarity to use the registers that are traditionally expected, and bp is expected as a reference to the stack pointer even if it isn't required. Thats like using bx as a loop counter instead of cx. Readers will pause to wonder why you chose to do something different.
>is it true ??
No. If you're using bx then I'll wager you're working in 16-bit mode rather than 8-bit mode. In that case, the stack is set at 16 bits, no matter what you try to push onto it. So when you decrement di, you're moving it by 16 bits instead of 8, which will give you *two* pushes. Even worse, the first value you push has an indeterminate low byte and the second value has an indeterminate high byte. This would be better:
No, di can be used for addressing just as easily as bp. However, it benefits clarity to use the registers that are traditionally expected, and bp is expected as a reference to the stack pointer even if it isn't required. Thats like using bx as a loop counter instead of cx. Readers will pause to wonder why you chose to do something different.
>is it true ??
No. If you're using bx then I'll wager you're working in 16-bit mode rather than 8-bit mode. In that case, the stack is set at 16 bits, no matter what you try to push onto it. So when you decrement di, you're moving it by 16 bits instead of 8, which will give you *two* pushes. Even worse, the first value you push has an indeterminate low byte and the second value has an indeterminate high byte. This would be better:
Assembly Syntax (Toggle Plain Text)
push [SI] MOV BX,[SI] MOV DI,SP DEC DI MOV [DI],BX MOV SP,DI
I'm here to prove you wrong.
![]() |
Similar Threads
- addcc instruction (Assembly)
- push ndps printer driver settings? (Novell)
- I just need a push! (C)
- "Error Message - tried to execute invalid instruction" (C++)
- Using x86 Assembly Language with Microsoft Visual C++ (C++)
Other Threads in the Assembly Forum
- Previous Thread: does anybody know any asm site for g4 (macintosh) assembly ?
- Next Thread: ASM Problem[Please help me]
| Thread Tools | Search this Thread |






