Quais são as especificidades de armazenar um inteiro assinado de 32 bits em um registrador?

votos
0

Meu tipo de número é número inteiro de dois assinado do complemento.

Em memória registra% RDI / edi / di, tenho 0xFFFFFFFF. Em% LER / ESI / si, tenho 0x80000000.

Minha instrução é addl %edi, %esi.

Como faço para adicionar corretamente esses?

Acho que a resposta é:

Desde que eu estou adicionando o registo de 32 bits completo, tenho o benefício de adicionar a quantidade 0xFFFFFFFF completo e 0x80000000.

Então, eu tenho um inteiro assinado adicionado a uma assinado, e ambos são de 32 bits. Estou efetivamente adicionando -2147483648 e 0x80000000. Desde 0x80000000 é 2147483648 em hexadecimal, eu adicionar esses dois e eu recebo zero.

A bandeira Zero é ativado a bandeira Carry é ativado (desde que eu estou adicionando o valor principal do registrador de 32 bits)

Publicado 20/10/2018 em 13:42
fonte usuário
Em outras línguas...                            


1 respostas

votos
4

Em complemento de 32 bits de dois, 0xFFFFFFFFrepresenta -1, e 0x80000000representa 2,147,483,648. A soma destes é -2147483649. Que não se encaixa em 32 bits, por isso transborda. O resultado calculado será 0x7FFFFFFF, o que representa 2,147,483,647.

No nível pouco: FFFFFFFFmais 80000000produz 17FFFFFFF, o que significa que 7FFFFFFFé armazenado no destino de 32 bits, e 1é uma realização.

Respondeu 20/10/2018 em 13:48
fonte usuário

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more