Forums before death by AOL, social media and spammers... "We can't have nice things"
|    comp.lang.asm.x86    |    Ahh, the lost art of x86 assembly    |    4,675 messages    |
[   << oldest   |   < older   |   list   |   newer >   |   newest >>   ]
|    Message 4,302 of 4,675    |
|    bilsch01 to All    |
|    Re: pusha and popa changes to sp registe    |
|    24 Jan 21 17:11:11    |
      From: fy247@nospicedham.always.com              On 1/20/21 11:23 PM, bilsch01 wrote:       > I read the x86 instruction reference. It is clear to me that pusha       > will decrement sp by 16. But it sounds like popa will increment sp by       > only 14. Is that correct?       >       > The text of the reference for popa says:       >       > Pops doublewords (POPAD) or words (POPA) from the stack into the       > general-purpose registers. The registers are loaded in the following       > order: EDI, ESI, EBP, EBX, EDX, ECX, and EAX (if the operand-size       > attribute is 32) and DI, SI, BP, BX, DX, CX, and AX (if the operand-size       > attribute is 16). (These instructions reverse the operation of the       > PUSHA/PUSHAD instructions.) The value on the stack for the ESP or SP       > register is ignored. Instead, the ESP or SP register is incremented       > after each register is loaded.       >              I rearranged the beginning of the program (MSDOS 5.0 FAT16 boot sector)       and entered values of sp register to the left of the instructions that       cause a change. It is a useful tool to determine some values (on paper)       as the program proceeds. I wonder if what I have following the popa       instructions is a good guess, or does anybody have a better suggestion?              TIA. Bill S.              00000000 xor ax,ax       00000002 mov ds,ax       00000004 mov ss,ax       00000006 7c00 mov sp,0x7c00       00000009 mov bp,sp       0000000B cld       0000000C sti       0000000D mov [bp+0x24],dl       00000010 mov al,[bp+0x10]       00000013 mul word [bp+0x16]       00000016 add ax,[bp+0xe]       00000019 adc dl,dh       0000001B add ax,[bp+0x1c]       0000001E adc dx,[bp+0x1e]       00000021 7bfe push byte +0x54       00000023 7c00 pop es       00000024 7bfe push ds       00000025 mov bx,0x53a       00000028 mov si,0x7e00       0000002B mov cx,[bp+0x11]       0000002E 7bfc push es       0000002F 7bfa call 0x11d              0000011D 7bea pusha               [ax ]--> 7bf8        [cx ]--> 7bf6        [dx ]--> 7bf4        [bx ]--> 7bf2 0x53a        [spi]--> 7bf0        [bp ]--> 7bee 0x7c00        [si ]--> 7bec 0x7e00        [di ]--> 7bea              0000011E 7be8 push es       0000011F 7be6 push ss       00000120 7be4 push ss       00000121 7be2 push dx       00000122 7be0 push ax       00000123 7bde push es       00000124 7bdc push ss       00000125 7bda push byte +0x1       00000127 7bd8 push byte +0x10       00000129 mov si,sp       0000012B mov dl,[bp+0x24]       0000012E 7bd6 push dx       0000012F 7bd4 push dx       00000130 7bd2 push dx       00000131 mov ah,0x8       00000133 int 0x13       00000135 les bx,[si+0x4]       00000138 jc 0xf9       0000013A and cx,byte +0x3f       0000013D mov [bp+0x18],cx       00000140 movzx ax,dh       00000143 inc ax       00000144 mov [bp+0x1a],ax       00000147 mul cx       00000149 xchg ax,di       0000014A mov ax,[si+0x8]       0000014D mov dx,[si+0xa]       00000150 jz 0x16c       00000152 cmp dx,di       00000154 jnc 0x16c       00000156 div di       00000158 xchg ax,dx       00000159 div cl       0000015B mov cl,0x2       0000015D xchg ch,dl       0000015F shr dx,cl       00000161 xchg ah,cl       00000163 inc cx       00000164 or cl,dl       00000166 xchg dh,al       00000168 or al,al       0000016A jz 0x174       0000016C mov ah,0x42       0000016E 7bd0 push ss        0000016F 7bd2 pop es [es]=0       00000170 mov byte [bp+0x2],0xe       00000174 inc ax       00000175 mov dl,[bp+0x24]       00000178 int 0x13       0000017A jc 0x138       0000017C 7be8 lea sp,[si+0x10]       0000017F add word [si+0x10],byte +0x20       00000183 7bea pop es       00000184 7bfa popa               [7bec]--> di        [7bee]--> si        [7bf0]--> bp        [7bf2]-->        [7bf4]--> bx        [7bf6]--> dx        [fbf8]--> cx        [7bfa]--> ax              00000185 inc ax       00000186 jnc 0x189       00000188 inc dx       00000189 7bfc ret              00000032 7bfe pop es [es]=0x54       00000033 mov di,0x200       00000036 sub di,byte +0x20       00000039 jc 0x2e       0000003B 7bfc push si       0000003C lea si,[si-0x10]       0000003F cmp [si+0xf],bh       00000042 jc 0x65       00000044 7bec pusha               [ax ]--> 7bfa        [cx ]--> 7bf8        [dx ]--> 7bf6        [bx ]--> 7bf4        [spi]--> 7bf2        [bp ]--> 7bf0        [si ]--> 7bee        [di ]--> 7bec              00000045 ja 0x51       00000047 mov al,[0x417]       0000004A and al,0xf       0000004C cmp al,[si+0xe]       0000004F jnz 0x56       00000051 mov cx,0xb       00000054 repe cmpsb       00000056 7bfc popa               [7bee]--> di        [7bf0]--> si        [7bf2]--> bp        [7bf4]-->        [7bf6]--> bx        [7bf8]--> dx        [7bfa]--> cx        [7bfc]--> ax              00000057 jnz 0x3c       00000059 7bf8 push word [bx+di+0x20]       0000005C cmp [si+0xc],bx       0000005F jnz 0x3b       00000061 7bfa pop word [bx]       00000063 jmp short 0x3c       00000065 7bfc pop si       00000066 loop 0x36              00000068 7bfe pop di       00000069 mov sp,bp       0000006B mov [bx-0x20],di       0000006E 7bfc push dx       0000006F 7bfa push ax       00000070 les bx,[si+0xa]       00000073 xchg bh,cl       00000075 7bf8 push es       00000076 7bf6 push di       00000077 mov bl,[bp+0xd]       0000007A lea ax,[di-0x2]       0000007D mul bx       0000007F add ax,[bp-0x4]       00000082 adc dx,[bp-0x2]       00000085 or di,di       00000087 jz 0x102       00000089 7bf8 call 0x11d       0000008C dec bx       0000008D loopne 0x89              --- SoupGate-Win32 v1.05        * Origin: you cannot sedate... all the things you hate (1:229/2)    |
[   << oldest   |   < older   |   list   |   newer >   |   newest >>   ]
(c) 1994, bbs@darkrealms.ca