Friday 19 January 2018

0x66 binary options


Opções binárias Broker Apesar de opções binárias são uma forma relativamente nova de comércio dentro do mercado de ações e outros mercados financeiros, é uma área em rápido crescimento dos mercados de investimento. Os comerciantes experientes são dabbling com esta técnica e abriu a porta para que muitos comerciantes do principiante investem nos mercados. No entanto, é essencial compreender os processos e riscos associados a este tipo de negociação. As opções binárias transformaram-se um navio negociando legal em 2008 em que os Estados Unidos o reconheceram como uma maneira válida, embora diferente de negociar na troca conservada em estoque. É reconhecido como uma das maneiras mais fáceis para qualquer um começar a negociar especialmente aqueles sem experiência. Quando você troca em opções binárias você nunca possui uma mercadoria ou ativo. Em vez disso, você está especulando sobre se o preço de um ativo específico geralmente definido pelo preço da ação, vai para cima ou para baixo dentro de um período de tempo definido. Na verdade, você está apostando ou fazendo uma previsão sobre o movimento do preço de um determinado ativo de você obtê-lo direito você ganhar dinheiro, se não, você perde dinheiro. Cada especulação é geralmente muito curto prazo. Há uma boa quantidade de informações fornecidas a você antes do comércio, se você usar o software online ou um corretor de opções binário aprovado. Em essência, você escolhe um ativo e decidir se o preço vai para cima ou para baixo você não pode hedge suas apostas e espero que ele vai ficar o mesmo Isso torna o conceito de seu investimento muito simples ou o preço se move na direção que você diz que você vai Obter um retorno sobre o seu investimento, ou, ele se move o caminho oposto e você não recebe nada. Depois de ter escolhido o seu activo, em seguida, o seu corretor de opções binárias irá dizer-lhe a percentagem de retorno que você receberá se você estiver correto. Em seguida, você precisa escolher o prazo para sua especulação e quanto dinheiro você está disposto a cometer. Depois de ter decidido todos esses fatores e você está feliz com a sua decisão, iniciar o comércio, selecionando executar em sua tela. A negociação de opção binária de espera e espera é uma das poucas áreas de investimento onde você vai saber exatamente o que seu retorno será fornecer o preço das ações se move na direção certa. Você também está aberto para negociação em uma enorme variedade de mercados se moeda, ações ou commodities o princípio é o mesmo em todos os mercados. De fato, as opções binárias são uma das maneiras mais fáceis de negociar nos mercados internacionais sem precisar de várias contas de corretagem e complicar seus investimentos. Apenas 3 etapas simples a seu sucesso Registre-se e obtenha um presente Fund sua conta de troca e obtenha um sentido do mercado do bônus Predict e ganhe o PASSO 1 - Registre-se e obtenha um Registo do presente tomará menos de um minuto. Você receberá imediatamente sua conta de negociação e todas as ferramentas necessárias para uma negociação bem-sucedida. Nós avaliamos altamente sua escolha. É por isso que preparamos os presentes para você: aulas de vídeo de opções binárias. PASSO 2 - Financiar sua Conta de Negociação e obter um Bônus Você pode financiar uma conta logo após o registro. Estes são os serviços de financiamento mais populares, que lidam conosco: Ao financiar uma conta de negociação, você pode obter os fundos adicionais como um bônus. Ao investir mais, o seu bônus pode ser mesmo dobrado Mac, PC, tablet ou qualquer smartphone mais de 100 ativos disponíveis para negociação. De qualquer dispositivo, a qualquer momento e com um alto nível de segurança. Criando estas plataformas de negociação, nós trabalhamos cada detalhe, a fim de lhe fornecer as condições confortáveis ​​para multiplicar o seu sucesso Garantias retiradas processamento dentro de 1 hora Possibilidade de comércio durante fins de semana Ampla gama de métodos de financiamento e retiradas 100 garantidos de negociação com os dados Finpari 2017. Finpari Todos os direitos reservados Ao negociar opções binárias como com quaisquer ativos financeiros, há uma possibilidade que você pode sustentar um Perda parcial ou total de seus fundos de investimento na negociação. Como resultado, é expressamente aconselhado que você nunca deve investir com, ou negociar sobre, o dinheiro que você não pode dar ao luxo de perder através desta forma de negociação. A Finpari não oferece garantias de lucro nem evita perdas na negociação. O Website eo Conteúdo podem estar disponíveis em vários idiomas. A versão em inglês é a versão original e a única que vincula a Finpari prevalecerá sobre qualquer outra versão em caso de discrepância. A Finpari não será responsável por quaisquer traduções errôneas, inadequadas ou enganosas da versão original para outras línguas. A Finpari, nem os seus agentes ou parceiros não estão registados e não prestam quaisquer serviços no território dos EUA. Sobre o nosso CompanyX86-64 Codificação de instrução 1: Quando qualquer prefixo REX é usado, SPL, BPL, SIL e DIL são usados. Caso contrário, sem qualquer prefixo REX AH, CH, DH e BH são utilizados. Legacy Prefixos Cada instrução pode ter até quatro prefixos. Às vezes, um prefixo é necessário para a instrução enquanto ele perde seu significado original (isto é, um prefixo obrigatório). Os prefixos a seguir podem ser usados, a ordem não importa: Grupo de prefixo 1 0xF0: prefixo LOCK 0xF2: prefixo REPNE / REPNZ 0xF3: REP ou prefixo REPE / REPZ Grupo de prefixo 2 0x2E: Substituição de segmento CS 0x36: Substituição de segmento SS 0x3E: DS Override de segmento 0x26: Substituição de segmento de ES 0x64: Substituição de segmento de FS 0x65: Substituição de segmento de GS 0x2E: Ramificação não tomada 0x3E: Ramificação tomada Grupo de prefixo 3 0x66: Prefixo de substituição de opérande Grupo de prefixo 4 0x67: Ou mais prefixos de um único grupo, o comportamento é indefinido. Alguns processadores ignoram os prefixos subseqüentes do mesmo grupo ou usam apenas o último prefixo especificado para qualquer grupo. Prefixo LOCK Com o prefixo LOCK, certas instruções read-modify-write são executadas atomicamente. O prefixo LOCK só pode ser usado com as seguintes instruções ou ocorre uma exceção de código de operação inválida: ADC, ADD, E, BTC, BTR, BTS, CMPXCHG, CMPXCHG8B, CMPXCHG16B, DEC, INC, NEG, XADD, XCHG e XOR. REPNE / REPNZ, REP e REPE / REPZ prefixos Os prefixos de repetição fazem com que as instruções de manipulação de string sejam repetidas. O prefixo REP repetirá a instrução associada até CX vezes, diminuindo CX com cada repetição. Ele pode ser usado com as instruções INS, LODS, MOVS, OUTS e STOS. REPE e REPZ são sinônimos e repitam a instrução até CX atingir 0 ou quando ZF é definido como 0. Ele pode ser usado com as instruções CMPS, CMPSB, CMPSD, CMPSW, SCAS, SCASB, SCASD e SCASW. REPNE e REPNZ também são sinônimos e repetem a instrução até que CX atinja 0 ou quando ZF for ajustado para 1. Ele pode ser usado com as instruções CS, SS, DS, DSPS, SCPS, SCASB, SCPS e SCASW, Prefixos de substituição de segmento de ES, FS e GS As substituições de segmento são usadas com instruções que fazem referência à memória não-stack. O segmento padrão é implícito pela instrução, e usando uma substituição específica força o uso do segmento especificado para operandos de memória. Em 64 bits, as substituições de segmentos CS, SS, DS e ES são ignoradas. Substâncias tomadas / não tomadas de ramo As sugestões de ramo podem ser usadas para diminuir um pouco o impacto da interpretação errônea do ramo. O ramo tomado dica é uma dica forte, enquanto o ramo não tomado dica é uma dica fraca. As dicas de ramo só são suportadas pela Intel desde o Pentium 4. Se usá-los em arquiteturas AMD tem qualquer efeito (positivo ou negativo) em tudo não é conhecido. Prefixo de sobreposição de tamanho de operando e tamanho de endereço O tamanho de operando padrão eo tamanho de endereço podem ser substituídos usando esses prefixos. Consulte a tabela a seguir: 1: certas instruções padrão (ou fixas em) operandos de 64 bits e não precisam do prefixo REX para isso, consulte esta tabela. NASM NASM determina o tamanho do operando observando os campos MODRM. reg ou (para um registro) MODRM. rm. Quando ambos são de 32 bits, o tamanho do operando torna-se 32 bits. Mesmo para 16 bits e 64 bits. Quando eles diferem, um erro ocorre em tempo de compilação. O tamanho do endereço é determinado olhando (para um operando de memória) o campo MODRM. rm ou o SIB. base. SIB. index e deslocamento, nessa ordem. Assim, quando SIB. base utiliza um registo de 16 bits (tal como AX), o tamanho de endereço torna-se de 16 bits. Usando um deslocamento de 32 bits resultará no deslocamento sendo truncado. Opcode O conjunto de instruções x86-64 define muitos opcodes e muitas maneiras de codificá-los, dependendo de vários fatores. Opcodes herdados Os opcodes legacy (e x87) consistem em, nesta ordem: Prefix obrigatório Certas instruções (especialmente as instruções SIMD) requerem um prefixo obrigatório (0x66, 0xF2 ou 0xF3), que se parece com um prefixo de modificador normal. Quando um prefixo obrigatório é necessário, é colocado com os prefixos de modificador antes do prefixo REX (se houver). Prefixo REX O prefixo REX só está disponível no modo longo. Uso Um prefixo REX deve ser codificado quando: usando o tamanho do operando de 64 bits e a instrução não padrão para o tamanho do operando de 64 bits ou usando um dos registradores estendidos (R8 a R15, XMM8 a XMM15, YMM8 a YMM15, CR8 a CR15 E DR8 a DR15) ou utilizando um dos registos de byte uniforme SPL, BPL, SIL ou DIL. Um prefixo REX não deve ser codificado quando: usando um dos registradores de alto byte AH, CH, BH ou DH. Em todos os outros casos, o prefixo REX é ignorado. O uso de vários prefixos REX é indefinido, embora os processadores parecem usar apenas o último prefixo REX. As instruções que predefinem o tamanho de operando de 64 bits no modo longo são: Opcode O opcode pode ter 1, 2 ou 3 bytes de comprimento. Dependendo da seqüência de escape do opcode, um mapa de opcode diferente é selecionado. Possíveis sequências de opcode são: Note que opcodes pode especificar que o campo REG no byte ModR / M é fixado em um valor específico. OpCodes VEX / XOP Um prefixo VEX / XOP deve ser codificado quando: a instrução tem apenas o seu opcode VEX / XOP e não são usados ​​ou são usados ​​mais de três operandos (por exemplo, operações de fonte não destrutiva) ou Quando se utilizam registos de destino XMM de 128 bits, os bits 128-255 do registo YMM correspondente devem ser eliminados. Um prefixo VEX / XOP não deve ser codificado quando: ao utilizar registos de destino XMM de 128 bits, os bits 128-255 do registo YMM correspondente não devem ser alterados. Existem muitas instruções VEX e XOP, todas as quais podem ser codificadas usando o prefixo de escape VEX / XOP de três bytes. Os prefixos de escape VEX e XOP usam campos com a seguinte semântica: 1: No modo protegido / compatibilidade, isto é apenas disp32. Mas no modo longo este é RIPdisp32 (para endereços de 64 bits) ou EIPdisp32 (para endereços de 32 bits, ou seja, com o prefixo de substituição de tamanho de endereço, veja aqui). 2: No modo longo, para codificar disp32 como no modo protegido / compatibilidade, use o byte SIB. Endereçamento relativo RIP / EIP O endereçamento em x86-64 pode ser relativo ao valor do ponteiro de instrução atual. Isso é indicado com os registros de ponteiro de instrução RIP (64 bits) e EIP (32 bits), que não estão expostos ao programa e podem não existir fisicamente. O endereçamento RIP-relativo permite que os arquivos de objeto sejam independentes da localização. SIB O byte SIB tem os seguintes campos: Este campo indica o fator de escala de SIB. index, onde s (como usado nas tabelas) é igual a 2 SIB. scale. O registro de índice para usar. Consulte Registros para os valores a serem usados ​​para cada um dos registros. O REX. X, VEX. Campo X pode estender este campo com 1 bit mais significativo para 4 bits total. O registro base a ser usado. Consulte Registros para os valores a serem usados ​​para cada um dos registros. O REX. B, VEX. B pode estender este campo com 1 bit mais significativo para 4 bits total. Endereçamento de 32/64 bits O significado do byte SIB ao usar o endereçamento de 32 ou 64 bits é o seguinte. O campo Mod Mods ModR / M eo campo de índice bytes SIB são usados ​​verticalmente, o campo base de bytes SIB eo bit REX / VEX / XOP. B horizontalmente. O s é o fator de escala. B. Base. X. Index e Mod estão em binário. 1: Nenhum registro de base é codificado. 2: Nenhum registro de índice é codificado. Deslocamento Um valor de deslocamento é um desvio de 1, 2, 4 ou 8 bytes adicionado ao endereço calculado. Quando um deslocamento de 8 bytes é usado, nenhum operando imediato é codificado. O valor de deslocamento, se houver, segue os bytes ModR / M e SIB discutidos acima. Quando as tabelas ModR / M ou SIB indicam que é necessário um valor disp, ou sem um byte ModR / M o uso de moffset (AMD) ou moffs (Intel) na sintaxe mnemônica da instrução, então os bytes de deslocamento são necessários. Imediata Algumas instruções exigem um valor imediato. A instrução (ea coluna operando-tamanho na tabela acima) determinam o comprimento do valor imediato. O imm8 mnemônico (ou tamanho de operando de 8 bits) significa um valor imediato de um byte, imm16 (ou tamanho de operando de 16 bits) significa um valor imediato de dois bytes, imm32 (ou tamanho de operando de 32 bits) um valor de quatro bytes E imm64 (ou operando tamanho 64-bit) um valor de oito bytes. Quando um valor imediato de 8 bytes é codificado, nenhum deslocamento pode ser codificado. Consulte também Referências ExternasR Levine Consulting LLC - Especialistas do Microsoft Access Bancos de dados personalizados Quickbooks / MS Access Integration Treinamento do MS Access Excel Migration Programação personalizada Criamos aplicativos profissionais e fáceis de usar do Microsoft Access há mais de 20 anos. Nossos programas personalizados atenderão às suas necessidades de negócios perfeitamente. Custom software pode realmente acabar custando menos do que off-the-shelf software porque você controla os recursos que você deseja. O programa personalizado direito certamente melhorará sua linha inferior. EDI O Microsoft Access pode ser usado como 8220bridge8221 entre dados EDI, (in-coming ou out-going) e outros softwares. Porque o acesso é barato e muito poderoso. Vale a pena considerá-lo nessa capacidade. Podemos ajudá-lo a decidir se esta abordagem faz sentido para você Quickbooks / Microsoft Access de compartilhamento de dados Se sua empresa está usando Quickbooks você pode estender seus recursos de relatórios, exportando dados Quickbooks no Access. Isso permitirá que você crie praticamente qualquer tipo de relatório que você possa imaginar. Os dados também podem ser exportados do Microsoft Access para Quickbooks. Os usuários podem inserir dados financeiros em telas de acesso simples, em seguida, criar faturas, ordens de vendas, etc em Quickbooks com o toque de um botão. Professional Database Evaluation Já possui uma base de dados do Microsoft Access Conhece: (1) Se está a armazenar os seus dados correctamente. (2) Se os relatórios são precisos. (3) Se ele pode ser expandido como suas necessidades de negócios mudam. Uma avaliação profissional do seu banco de dados facilitará sua mente e posicioná-lo para tomar uma decisão informada sobre seu uso posterior. Desenvolvimento Ágil / Rápido O Microsoft Access é uma ferramenta front-end / back-end fortemente integrada que pode levá-lo de conceito para beta incrivelmente rápido. Você pode apresentar os interessados ​​com menus, telas de entrada de dados e formulários interativos de consulta para que eles possam testar. Porque o acesso é tão acessível, há pouco risco. Necessidades Avaliação Se você aren8217t certeza se você precisa de um banco de dados personalizado ou não, podemos ajudá-lo a decidir. Como não temos participação em nenhum produto que recomendamos, nossas necessidades de clientes são o único critério para nossas decisões. Muitas vezes, verifica-se que o software existe que irá atender às suas necessidades. Também fazemos treinamento do Microsoft Access se você decidir que você e / ou sua equipe gostariam de aprender a criar e usar seu próprio banco de dados. Porque nós cobramos por hora, não a pessoa, você pode decidir quantas pessoas recebem treinado em um tempo, e manter as pessoas juntas com base em seus níveis de experiência. . ,. . ,. . . . . 24opção,,,. ,. C,, (),,. ,,. - benzóico. - benzóico. . CySECBeginners introdução à linguagem assembler AVR Cálculos em linguagem assembler O menor número inteiro a ser manipulado em assembler é um byte com oito bits. Isso codifica números entre 0 e 255. Tais bytes se encaixam exatamente em um registro da MCU. Todos os números maiores devem ser baseados neste formato básico, usando mais de um registro. Dois bytes produzem uma palavra (intervalo de 0. 65.535), três bytes formam uma palavra mais longa (intervalo de 0. 16.777.215) e quatro bytes formam uma palavra dupla (intervalo de 0. 4.294.967.295). Os bytes simples de uma palavra ou uma palavra dupla podem ser armazenados em qualquer registro que você preferir. As operações com estes únicos bytes são programadas byte by byte, então você não tem que colocá-los em uma linha. A fim de formar uma linha para uma palavra dupla, poderíamos armazená-lo assim:.DEF r16 dw0.DEF r17 dw1.DEF r18 dw2.DEF r19 dw3 dw0 para dw3 estão em uma linha nos registros. Se precisarmos iniciar esta palavra dupla no início de uma aplicação (por exemplo, para 4.000.000), isto deverá ter a seguinte aparência:.EQU dwi 4000000 define a constante LDI dw0, LOW (dwi) Os 8 bits mais baixos para R16 LDI dw1, BYTE2 (Dwi) bits 8. 15 a R17 LDI dw2, BYTE3 (dwi) bits 16. 23 a R18 LDI dw3, BYTE4 (dwi) bits 24. 31 a R19 Assim, dividimos este número decimal chamado dwi em suas porções binárias e embalado Para os pacotes de quatro bytes. Agora você pode calcular com esta palavra dupla. Às vezes, mas em casos raros, você precisa de números negativos para calcular com. Um número negativo é definido interpretando o bit mais significativo de um byte como bit de sinal. Se for 0, o número é positivo. Se for 1, o número é negativo. Se o número for negativo nós geralmente não armazenamos o resto do número como é, mas usamos seu valor invertido. Invertido significa que -1 como um inteiro byte não é escrito como 1,0000001 mas como 1,1111111 vez. Isso significa: subtrair 1 de 0 e esquecer o estouro. O primeiro bit é o bit de sinal, sinalizando que este é um número negativo. Por que esse formato diferente (subtraindo o número negativo de 0) é usado é fácil de entender: adicionando -1 (1,1111111) e 1 (0,0000001) produz exatamente zero, se você esquecer o estouro que ocorre durante essa operação Nineth bit). Em um byte, o maior número a ser tratado é 127 (binário 0,1111111), o menor é -128 (binário 1,0000000). Em outras linguagens de computador este formato de número é chamado de inteiro curto. Se você precisar de um maior intervalo de valores, você pode adicionar outro byte para formar um valor inteiro normal, variando de 32.767. -32.768), quatro bytes fornecem um intervalo de 2.147.483.647. -2,147,483,648, normalmente denominado LongInt ou DoubleInt. Números inteiros positivos ou assinados nos formatos discutidos acima usam o espaço disponível de forma mais eficaz. Outro formato de número menos denso, mas mais fácil de manusear é armazenar números decimais em um byte para um dígito cada. O dígito decimal é armazenado em seu formato binário em um byte. Cada dígito de 0.9 precisa de quatro bits (0000. 1001), os quatro bits superiores do byte são zeros, soprando muito ar no byte. Para lidar com o valor 250 precisamos de pelo menos três bytes, por exemplo: Instruções para a configuração: LDI R17,0x02 Byte superior LDI R16,0x50 Byte inferior Para definir esta correta, você pode usar a notação binária (0b.) Ou a notação hexadecimal (0x.) Para definir os bits apropriados para a sua posição de nibble correta. Cálculo com BCDs compactados é um pouco mais complicado em comparação com a forma binária. Alterações de formato para seqüências de caracteres são tão fácil como com BCDs. O comprimento dos números ea precisão dos cálculos são limitados apenas pelo espaço de armazenamento. Muito semelhante ao formato descompactado BCD é armazenar números em formato ASCII. Os dígitos de 0 a 9 são armazenados usando sua representação ASCII (ASCII Código Padrão Americano para Intercâmbio de Informações). ASCII é um formato muito antigo, desenvolvido e otimizado para escritores de teletipo, desnecessariamente muito complicado para uso de computador (você sabe o que um char chamado End of Transmission EOT significava quando foi inventado), muito limitado no intervalo para outras línguas dos EUA 7 bits por caractere), ainda usado em comunicações hoje devido aos esforços limitados de alguns programadores de sistemas operacionais para mudar para sistemas de seqüência mais efetivos. O antigo sistema é apenas coberto pelo europeu 5-bit longo teletype conjunto de caracteres chamado Baudot conjunto ou ainda usado código Morse. Dentro do sistema de código ASCII o dígito decimal 0 é representado pelo número 48 (hex 0x30, binário 0b0011.0000), o dígito 9 é 57 decimal (hex 0x39, binário 0b0011.1001). ASCII wasnt projetado para ter esses números no início do conjunto de códigos como já existem caracteres de comando como o acima mencionado EOT para o teletipo. Portanto, ainda temos que adicionar 48 a um BCD (ou set bit 4 e 5 para 1) para converter um BCD para ASCII. Os números formatados em ASCII precisam do mesmo espaço de armazenamento como BCDs. Carregar 250 para um conjunto de registros representando esse número seria assim: A representação ASCII desses caracteres é gravada nos registradores. Que isola os quatro bits inferiores (o nibble inferior) só é possível com registos acima de R15. Se você precisar fazer isso, use um dos registradores R16 para R31 SBR R16,0b00110000 Definir bits 4 e 5 para um CBR R16,0b00110000 Limpar bits 4 e 5 para zero LDI R16,0b10101010 Inverter todos os bits pares EOR R1, R16 em O registo R1 e o resultado da loja em R1 inverte o conteúdo no registo R1 e substitui os zeros por um e vice-versa. Diferente disso é o complemento de Twos, que converte um número assinado positivo em seu complemento negativo (subtraindo de zero). Isso é feito com a instrução So 1 (decimal: 1) yields -1 (1.1111111 binário), 2 yields -2 (1.1111110 binário), e assim por diante. CLT clear T-bit ou SET set T-bit ou BST R2 R2 copy register R2, bit 2 para o T-bit Mudança e rotação de números binários significa multiplicação e divisão por 2. Shifting tem várias sub-instruções . O bit anterior 7, agora deslocado para o bit 6, é preenchido com um 0, enquanto o bit anterior 0 é deslocado para o bit de transporte do registo de estado. Este bit de transporte poderia ser usado para arredondar para cima e para baixo (se definido, adicione um ao resultado). Exemplo, divisão por quatro com arredondamento: LSR R1 divisão por 2 BRCC Div2 Saltar se não arredondar para cima INC R1 arredondar para cima Div2: LSR R1 Divisão novamente para 2 BRCC DivE Saltar se não arredondar para cima INC R1 Arredondar para cima DivE: Fácil com binários, desde que você divida por múltiplos de 2. Como com deslocamento lógico o bit anterior 0 vai para o carry bit no registro de status. LSL R1 Deslocamento lógico à esquerda do byte inferior ROL R2 Deslocamento à esquerda do byte superior A mudança lógica deixada na primeira instrução desloca o bit 7 para ser carregado, a instrução ROL rola para o bit 0 do byte superior. Seguindo a segunda instrução, o bit de transporte tem o bit anterior 7. O bit de transporte pode ser usado para indicar um estouro (se o cálculo de 16 bits é executado) ou para rolar para bytes superiores (se for feito mais de 16 bits de cálculo ). LSR R2 Deslocamento lógico Direita, bit 0 para transportar ROR R1 Rotate Direita e shift carry no bit 7 Sua fácil divisão com grandes números. Você vê que a aprendizagem de assembler não é tão complicado. ROR R1 ROR R1 ROR R1 ROR R1 podemos realizar isso com um único Isto troca o nibble superior e inferior. Observe que o conteúdo dos nibbles superiores será diferente após a aplicação desses dois métodos. As seguintes operações de cálculo são muito complicadas para os iniciantes e demonstram que o assembler é apenas para especialistas extremos, oi. Leia o seu próprio risco ADD R2, R4 primeiro adicionar os dois bytes baixos ADC R1, R3, em seguida, os dois bytes de alta Em vez de um segundo ADD usamos ADC na segunda instrução. Isso significa adicionar com carry, que é definido ou apagado durante a primeira instrução, dependendo do resultado. Já assustado o suficiente por essa matemática complicada Se não: tomar este SUB R2, R4 primeiro o byte de baixa SBC R1, R3, em seguida, o alto byte Novamente o mesmo truque: durante a segunda instrução nós subtração outro 1 do resultado se o resultado de A primeira instrução teve um estouro. Respire a respiração Se sim, lide com o seguinte Agora, comparamos uma palavra de 16 bits em R1: R2 com a de R3: R4 para avaliar se ela é maior que a segunda. Em vez de SUB, usamos a instrução de comparação CP. Em vez de SBC, usamos CPC: CP R2, R4 comparam bytes inferiores CPC R1, R3 comparam bytes superiores Se o sinalizador carry está definido agora, R1: R2 é menor que R3: R4. Se o Zero-bit no registro de status for ajustado depois disso, nós sabemos que R16 é 0xAA. Se o carry-bit é definido, sabemos, é menor. Se ele não estiver configurado eo Zero-bit não estiver definido, também sabemos que é maior. Se o Z-bit é ajustado o registro R1 é zero e nós podemos seguir com as instruções BREQ, BRNE, BRMI, BRPL, BRLO, BRSH, BRGE, BRLT, BRVC ou BRVS ao ramo em torno de um bocado. Ainda conosco Se sim, aqui estão alguns cálculos BCD compactados. Adicionar dois BCDs compactados pode resultar em dois overflows diferentes. O carry usual mostra um overflow, se o maior dos dois nibbles transborda para mais de 15 decimal. Outro excesso, do menor para o nibble superior ocorre, se os dois petiscos menores adicionar mais de 15 decimal. Para dar um exemplo, somamos os BCDs 49 (hex 49) e 99 (hex 99) compactados para render 148 (hex 0x148). Adicionando-os em matemática binária, resulta em um byte segurando hex 0xE2, não ocorra desbordamento de bytes. O menor dos dois nibbles teve um overflow porque 9918 eo nibble inferior só pode lidar com números até 15. O overflow foi adicionado ao bit 4, o menor bit significativo do nibble superior. Que é correto Mas o menor nibble deve ser 8 e é apenas 2 (18 0b0001.0010). Devemos adicionar 6 a esse nibble para produzir um resultado correto. O que é bastante lógica, porque sempre que o menor nibble chega a mais de 9 temos que adicionar 6 para corrigir esse nibble. O nibble superior é totalmente incorreto, porque é 0xE e deve ser 3 (com um 1 transbordando para o próximo dígito superior do BCD compactado). Se adicionarmos 6 a este 0xE chegamos a 0x4 eo carry é definido (0x14). Então o truque é adicionar esses dois números e, em seguida, adicionar 0x66 para corrigir os 2 dígitos do BCD compactado. Mas parar: o que se adicionando o primeiro eo segundo número não resultaria em um estouro para o nibble superior E não resultar em um dígito acima de 9 no menor nibble Adicionando 0x66, resultaria em um resultado totalmente incorreto. O 6 inferior só deve ser adicionado se o nibble inferior ou transborda para o nibble superior ou resulta em um dígito maior do que 9. O mesmo com o nibble superior. Como sabemos, se ocorreu um estouro do menor para o nibble superior A MCU define um bit H no registrador de status, o bit de semi-carry. A tabela a seguir mostra os diferentes casos que são possíveis após a adição de R1 e R2 e adicionando hex 0x66 depois disso. Para programar um exemplo, assumimos que os dois BCDs compactados estão em R2 e R3, R1 irá conter o estouro e R16 e R17 estão disponíveis para cálculos. R16 é o registro de adição para adicionar 0x66 (o registro R2 não pode adicionar um valor constante), R17 é usado para corrigir o resultado dependendo dos diferentes sinalizadores. Adicionando R2 e R3 vai como isso: LDI R16,0x66 para adicionar 0x66 para o resultado LDI R17,0x66 para subtrair mais tarde do resultado ADD R2, R3 adicionar os dois BCDs de dois dígitos BRCC NoCy1 saltar se nenhum byte overflow ocorre INC R1 Incrementar o próximo byte mais alto ANDI R17,0x0F não subtrair 6 do maior nibble NoCy1: BRHC NoHc1 saltar se não meia-carry ocorreu ANDI R17,0xF0 não subtrair 6 de menor nibble NoHc1: ADD R2, R16 adicionar 0x66 para o resultado BRCC NoCy2 salto Se nenhum carry ocorreu INC R1 incrementar o próximo byte mais alto ANDI R17,0x0F não subtrair 6 de maior nibble NoCy2: BRHC NoHc2 saltar se não meia-carry ocorreu ANDI R17,0xF0 não subtrair 6 de menor nibble NoHc2: SUB R2, R17 subtrair correção Um pouco mais curto do que isso: LDI R16,0x66 ADD R2, R16 ADD R2, R3 BRCC NoCy INC R1 ANDI R16,0x0F NoCy: BRHC NoHc ANDI R16,0xF0 NoCy: SUB R2, R16 Pergunta a pensar: Por que isso é igualmente Correto e onde está o truque Todos os formatos de números podem ser convertidos para qualquer outro formato. A conversão de BCD para ASCII e vice-versa já foi mostrado acima (manipulações Bit). A conversão de BCDs compactados também não é muito complicada. Primeiro temos que copiar o número para outro registro. Com o valor copiado, alteramos os nibbles com SWAP para trocar o superior eo inferior. A parte superior é removida, e. Por AND ing com 0x0F. Agora temos o BCD do nibble superior e podemos usar como é ou definir bit 4 e 5 para converter para um caractere ASCII. Depois disso, copiamos o byte novamente e tratamos o nibble inferior sem primeiro SWAP ping e obtemos o BCD mais baixo. Um pouco mais complicado é a conversão de dígitos BCD para um binário. Dependendo dos números a serem manipulados, limpe primeiro os bytes necessários que manterão o resultado da conversão. Começamos com o dígito BCD mais alto. Antes de adicionar isso ao resultado, multiplicamos o resultado por 10. Para fazer isso, copiamos o resultado para outro lugar. Em seguida, multiplicamos o resultado por quatro (dois turnos à esquerda ou rolos). Adicionando o resultado copiado anteriormente para este produz uma multiplicação com 5. Agora uma multiplicação com 2 (deslocamento à esquerda / rolo) produz o resultado de 10 vezes. Agora adicionamos o BCD e repetimos esse algoritmo até que todos os dígitos decimais sejam convertidos. Se, durante uma dessas operações, ocorre um carry do resultado, o BCD é muito grande para ser convertido. DezTab:.DW 10000, 1000, 100, 10 e pode ser lido wordwise com a instrução LPM da tabela. Em seguida, deslocar os bits individuais do binário à esquerda para fora dos registos para o carry. Se for um, adicione o número na tabela ao resultado lendo os números da tabela usando LPM. Isso é mais complicado de programar e um pouco mais lento do que o método acima. Um terceiro método é calcular o valor da tabela, começando com 000001, adicionando este BCD consigo mesmo, cada vez depois de ter deslocado um bit do binário para a direita e adicionado o BCD.

No comments:

Post a Comment