Assembly 8088

  • View
    44

  • Download
    0

Embed Size (px)

Text of Assembly 8088

Texto traduzido pelo Power Translator PRO ====================================== = = GUIA do GAVIN A ====================================== de ASSEMBLER 80x86 = = direitos autorais (c) Estey de Gavin, 1995. Todos direitos reservaram. Isto originalmente foi escrito para a Revista do Empresrio de Games e depois de receber lotes de realimentao positiva que eu adicionei e expandiram. Gastei muito tempo trabalhar em ele e em eu apreciaria ouvir de voc se gostasse de ele. Se quer entrar em contato comigo ento email me em: gavin@senator.demon.co.uk ou em CompuServe 100767,1325 OS RECURSOS QUE SERIAM -------------------------------------- TIL--. H vrios recursos que pode achar til: A lista de Instrues e coordenaes: Se tem TASM ento o "Montador de Turbo de Borland Referncia Rpida" tem uma lista de instrues e coordenaes at 486. O "Pentium de Intel Operador Familiar Manual: Volume 3" so igualmente teis. A lista de Interromper: H vrios livros que tenha esta informao mas mais para cima datar Ralf Marrom Interrompe lista disponvel livremente em quatro partes em ftp: //x2ftp.oulu.fi/pub/msdos/programmin onde XX a verso. Um livro que cobre ambos estes temas e uma referncia til de

assemblia "O guia de Revolutionary a Linguagem de montagem", ISBN 1-874416-12-5 publised por Prensa de WROX. A VISTA GERAL DO 80x86 -------------------------------------- FAMILIAR--. A famlia 80x86 era primeira comeada em 1981 com os 8086 e o novo membro o Pentium que foi libertado treze anos mais tarde em 1994. So todos para trs compatveis um com o outro mas cada novas geraes adicionou caractersticas e mais velocidade que a lasca prvia. Hoje h muito poucos computadores em uso que tm os 8088 e 8086 lascas neles como so muito outdated e lento. H alguns 286's mas seus nmeros esto inclinando como hoje software torna-se mais e mais exigir. Regular os 386, primeiro CPU de 32 bits do Intel, agora est inclinando e parece que os 486 est agora a entrada sistema plano. O Representation de nmeros em ---------------------------- binrio--. Antes de ns comece a entender como programar na assemblia melhor tentar entender como nmeros so representados em computadores. Os nmeros so armazenados em binrio, baseia dois. H vrios termos que so usados para descrever nmeros diferentes de tamanho e eu descreverei o que estes meio. 1 BIT: 0 Um bit o pedao simples de dados que existe. Seu qualquer um um ou um zero.

1 NIBBLE: 0000 4 BITS O nibble quatro bits ou metade um byte. A nota que tem um valor mximo de 15 (1111 = 15). Isto a base para o hexadecimal (baseia 16) sistema de nmero que usado como longe mais fcil entender. Os nmeros de Hexadecimal vo de 1 a F e so seguido por um h declarar que o esto em hex. i.e. Fh = 15 decimal. Os nmeros de Hexadecimal que comeam com uma letra so prefixed com uns 0 (zero). 1 BYTE 00000000 2 NIBBLES 8 BITS Um byte 8 bits ou 2 nibbles. Um byte tem um valor mximo de FFh (255 decimal). Porque um byte 2 nibbles o representation de hexadecimal dois algarismos de hex em fileira i.e. 3Dh. O byte tambm aquele tamanho dos registros de 8 bits que ns estaremos cobrindo mais tarde. 1 PALAVRA 0000000000000000 2 BYTES 4 NIBBLES 16 BITS Uma palavra dois bytes que so stuck junto. Uma palavra tem um valor mximo de (65,536 de FFFFh). Desde que uma palavra quatro nibbles, representado por quatro algarismos de hex. Isto o tamanho dos registros de 16 bits. -------------------------------------- De registros--. Os registros so um lugar no CPU onde um nmero podem ser armazenados e podem ser manipulados. H trs tamanhos de registros: de 8 bits, de 16 bits e em 386 e acima de 32 bits. H quatro tipos de registros

diferentes; registros gerais de propsito, registros de segmento, registros de ndice e registros de pilha. Primeiramente eis descries dos registros principais. Os registros de pilha e registros de segmento sero cobertos mais tarde. Propsito geral Registra ----------------------------------------. Estes so registros de 16 bits. H quatro registros gerais de propsito; MACHADO, BX, CX e DX. So fendem para cima em registros de 8 bits. O MACHADO fende para cima em AH que contem o byte alto e AL que contem o byte baixo. Em 386's e acima h registros tambm de 32 bits, estes tm os mesmos nomes como os registros de 16 bits mas com um 'E' em frente i.e. EAX. Pode usar AL, AH, MACHADO e EAX separadamente e os tratam como separa registros para algumas tarefas. Se MACHADO conteve 24689 decimal: AL DE AH 01100000 01110001 AH seria 96 e AL seriam 113. Se adicionasse um a AL seria 114 e AH seriam inalterados. SI, DI, SP e BP tambm podem ser usados como registros gerais de propsito mas tem usos mais especficos. Eles no so fendem em dois halves. O ndice Registra ----------------------------------------. Estes s vezes so chamados registros de pointer e eles so registros de

16 bits. Eles principalmente so usados para instrues de barbante. H trs SI de registros de ndice (ndice de fonte), DI (ndice de destino) e IP (pointer de instruo). Em 386's e acima h registros tambm de 32 bits de ndice: EDI e ESI. Voc tambm pode usar BX a barbantes de ndice. IP um registro de ndice mas nao podem ser manipulados diretamente como armazena o endereo da prxima instruo. A pilha registra ----------------------------------------. BP e SP so registros de pilha e so usados quando lida com a pilha. Sero cobertos quando conversamos sobre a pilha mais tarde. Os segmentos e compensars ----------------------------------------. Os desenhistas originais dos 8088 decidido que ningum jamais necessitar usar mais que um megabyte de memria ento construram a lasca ento nao podia aceder acima isso. O problema aceder um megabyte inteiro 20 bits so necessitados. Os registros s tm 16 bits e eles nao querisam usar dois porque isso seria 32 bits e eles pensaram que isto seria demais para anyone. Surgiram com o que eles pensaram era que um meio esperto resolvesse este problema: segmentos e compensars. Isto um meio de fazer o enderear com dois registros mas nao 32 bits. COMPENSAR = SEGMENTO * 16 SEGMENTO = COMPENSAR / 16 (os 4 bits mais baixos so perdidos) Um registro contem o segmento e outro registro contem o compensar. Se pe

os dois registros junto voc recebe um endereo de 20 bits. O 0010010000010000 DE SEGMENTO --. - COMPENSAR ----0100100000100010 de 20 bits Enderea 00101000100100100010 ==== = = ==== de DS = = ==== = = ==== de SI = = O aviso que DS e SI sobrepem. Isto como DS: SI usado para fazer um 20 endereo de bit. O segmento est em DS e o compensar est em SI. A anotao normal para um Segmento/Compensar par : SEGMENTO: COMPENSAR Os registros de segmento so: CS, DS, ES, SS. Nos 386 + h tambm FS e GS. Compense registros so: BX, DI, SI, BP, SP, IP. Em 386 + mode1 protegido, QUALQUER registro geral (nao um registro de segmento) pode ser usado como um Compensar registro. (Exceto IP, que voc nao pode manipular diretamente). Se voc agora esto pensando aquela assemblia estar realmente duro e voc nao entende segmentos e compensars absolutamente ento nao preocupam-se. Eu nao entendi-os a princpio mas lutei em e sabido que eles no eram to duro de usar em prtica. O -------------------------------------- DE PILHA--. Como h s seis registros que so usados mais operaes, voc provavelmente esto perguntando-se como fazem-no evitar isso. fcil. H algo chamou uma pilha que uma rea de memria que voc pode poupar e

poder restaurar valores a. Isto uma rea de memria que como uma pilha de pratos. O ltimo pe em ser o primeiro que tomam fora. Isto s vezes referido a como Dura Em Primeiro Fora (LOFO) ou Primeiro Em Primeiro para fora (LIFO). Se outro pedao de dados posto na pilha cresce para baixo. Como pode ver a pilha comea num endereo alto e cresce para baixo. Assegura-se que voc nao pe dados demais na pilha nem vai ir overflow. UMA APRESENTAO A -------------------------------------- DE INSTRUES DE ASSEMBLIA--. H muitas instrues na assemblia mas h s aproximadamente vinte que tm que saber e usaro muito freqentemente. A maioria de instrues so compostas de trs carteres e tem um operand ento uma vrgula ento outro operand. Por exemplo por uns dados num registro voc usa a instruo de MOV. o machado de mov, 10; pem 10 em bx de mov de machado, 20; pem 20 em cx de mov de bx, 30; pem 30 em dx de mov de cx, 40; pem 40 em dx O aviso que em alguma coisa de montador depois que um; (semicolon) ignorado. Isto muito til para comentar seu cdigo. O EMPURRO E ESTOURO: DUAS INSTRUES USAR O -------------------------------------- DE PILHA--. Sabe sobre a pilha mas como nao por dados num para fora de ele. H duas

instrues simples que necessita saber: empurro e estouro. Eis a sintaxe para seu uso: O EMPURRO Pe um pedao de dados sobre o topo da pilha A sintaxe: dados de empurro O ESTOURO Pe o pedao de dados do topo da pilha num registro especificado ou varivel. A sintaxe: registro de estouro ou varivel Este exemplo de cdigo demonstra como usar o empurro e instrues de estouro o cx de empurro; pe cx no machado de empurro de pilha; pe machado no cx de estouro de pilha; pe valor de pilha em machado de estouro de cx; pe valor de pilha em machado O aviso que os valores de CX e MACHADO sero trocados. H uma instruo trocar dois registros: XCHG, que reduziria o fragmento prvio a "machado de xchg, cx". TIPOS DE -------------------------------------- DE OPERAND--. H trs tipos de operands em montador: registro imediato e memria. Imediato um nmero que ser sabido em compilao e sempre ser o mesmo por exemplo '20' ou "UM". Um operand de registro qualquer propsito geral ou registro de ndice por MACHADO de exemplo ou SI. Um operand de memria um varivel que armazenado em memria que ser coberto mais

tarde. ALGUMAS INSTRUES QUE VOC NECESSITAR SABER ----------------------------------------. Isto uma lista de algumas instrues importantes que voc necessita saber antes de voc pode entender ou pode escrever programas de assemblia. MOV move um valor de um lugar a outro. A sintaxe: destino de MOV, f