Você está na página 1de 9
Capitulo 3 Assembly 8051 SINTAXE DA LINGUAGEM ASSEMBLY Antes de se escrever em assembly, @ conveniente construir um fluxograma do programa. Um fluxograma nao faz referéncia a linguagem a utilizar, pelo que pode ger utilizado para programar qualquer microprocessador em qualquer linguagen. Os fluxogramas ajudam a dividir um programa grande em eubprogramas, permitinds também visualizar de uma forma mais Clara a construcéo do software para um projeto especifico, o que conduz a uma implementagac mais facil. A linguag: assembly ¢ ususlmente sscrita numa forma standard para que posse ser translada para ¢ linguagem maquina sspecifica, utilizando om lador, denomina: assembler, esta forma standard tem 4 campos Comeni ampo denominado Jebel um nome utilizado para representar um enderegs, ou uma rotina, o& accemblers impien restrighes 4 constituigsa dos nomes para os labels, muito devido ao fato de serem ainda programas que senvelvidos para func: m sobre o sistema operative MS-DOS e as restrigées so mais relativas ao proprio sistema operativo que ao assembler en sim mesmo. © campo OF-Code (Operation Code) contém os meménicos das instrugtes ou caso prefiram 0 op.code, cada familia de processadores tem o seu especifico instrugtes. Os camp Im of regi: ou enderegos sendo utilizado uma virgule para separar os operandos comentarios, 0 linha € inicializado p. comentarios nao geram cédigo ex el, serven para auxiliar conatrugso do programa. £ 1 esctever un programa sem comentarios, sob o risco de se este se indecifravel para 0 proprio Frogramador. Os que 2 instrucdo ou conjuntos de instru zen. deven ser comentadas com nome de rotina, a sua fungéc, as suas entradas s bem como registros utilizados. 1.1 Sub-Rotinas Quando um conjunto de instrugses se rey em que o 6 pete varias vezes s&o convenientes a Higo € escrito uma tmica vez. Uma ermina sempre a instrucao RET, para se chamar ada 2 instrugdo call label. Quando da chamada da sub-rotina o a instrugio a ser executada, ou 2 PCL © PCH, © fica que o rtir do enderego representado por Jabel. ois de executar a rotina encontra a instrugia RET, o processador PC com os valores que st no da pilha, a sxecugao continua partir da inetrugao imediatamente a seguir a chamada da sub-rotina. proce: seja, 0 conte! do registro PC (Program Counte: ee carrega o PC com o endereco representado pelo label, 0 que si processador continua a execugéo a Quando 1.2 Desenvolvimento de um programa Fara construir um programa para ser executado por um processad rio en primeiro lugar utilizar um processador de texto, para escreve fonte (inetrugées). Depois de escrito @ necessario, utilizar um assembler que gare o cédigo maquina, este assembler gera um amento objeto com o cédigo das instrugées em binaric, © um documenta de documentagaa que indica a localizacao codigo na meméria de programa variavel utilizados banco de registros utilizados... Como o programa para ser executado ¢ necess4rio ser carregado pela CPU, dependendo agora da forma de efetuar este mecaniomo, € comum ser necessario converter o cédigo maquina para um documento de formato denominado intel-hex que © compreendido pelos programadores de eprom.s, para isso é@ utilizado um utilitério, que permite efetuar essa conversio. 13 Diretivas do assembler De modo a disponibilizar o programa compl Geve dar aloumas indicagses a0 assembler, exenplo, devera indicar onde ficam @ as instrugSes na memoria de programa, quando é termina o programa... A estes comandos 940 designadas por diretivas assembler, as diretivas a semelhanga dos comentarios nio geram cédigo executavel. mente pronto para o assembler, este A diretiva ORG ¢ seguida de um enderego que indica ao assembler, qual o enderego onde deve ser colocado 0 oddigo correspondente as instrugdes 2 seguir 4 dir ORG, € comum no caso do 8081 colocar a diretiva ORG 0000h, pois o endere: set do 8051 € a posicko 0000h, seré neste endereco que o processado: executar a primeira instrugdo. A diretiva END indica ac processador que o programa terminou, ou seja, = partir dessa diretiva nao ¢ gerado mais codi retiva EQU define um simbolo usado para definir uma constante atribuindo um nome a uma constante, ou para definir uma varisvel atribuindo um nome a uma posigso de memoria segundos equ 030h A diretiva db define byte, memoria de programa exempl guardar joe no operando na mem db 07£h, 32h, 40h db ‘micro’ Guarda os bytes 7£h,32h,40h consecutivamente na meméria de ma a partir dos endereccs mem, db .micro., guarda © codigo ASCII correspondente as letras vmicro., dw define word guarda em vez dos 8 bite de db, 16 bits em 2 posigtes consecutivas de memdria, sendo o byte menos significative guardado sempre na posigas de memoria de enderego menos significative. 1.4 Macros A somelhanga das sub-rotinse os macros também permitem eubstituir grupos de instrugtes que necessitem de ser repetidas varias vezes, um macro é simplesmente um conjunto de instruges com uma sintaxe especifica. teste macro Al éndm Ns escrita do programa sempre que se pretender chamar 2 macro # 30 escrever o Seu nome, neste caso teste, Ao contrario do que suced= com as sub-rotinas aqui nog macros o essembler subs’ pelo cédigo, comparando com a utilizacdo das sub-rotinas, é mais eficiente, pois ndo existe a instrucao de salto nem a de retorno que torna o programa mais eficiente, tem, contudo o tui a chamada do macro inconveniente de aumentar a meméria de cole pois cada chamada implica a G80 de todo 0 codigo que constitui 15 Detecgao de erros depuragio Depois de compilar o programa caso nao existam erros de sintaxe o programa pode ser executads pelo processador. Antes ainda de o testar diretamente no processador © verificar a sua funcionalidade, p: execute © programa no 20 = fazer = sua depuraya exemplo, 0 DS51 da Keil software. lem utilizando um simulador da sua execugéo, como por 2. CONJUNTO DE INSTRUGOES DO 8051 2.1 Modos de enderegamento membros da familia 8051 exec mo goee eatao otimizadas para aplicagses de E-bit, S80 disponibilizades varios modos de endere 8. O conjunto de instrugses disponibi. que a flag carry, faz 0 papel desempenhado instrugées. junto de instrugdes. Estas acesso A menéria exagtes bit a bit, em facumulador em ou’ Enderecamento direto No endexegamento direto o operal cificade num registro de @ bits. 86 a RAM interna © o@ regietros de fungdes especiais podem utilizar este modo de enderegamento. a,7fh roma Acc com o contetdo de 7fh, resultado em Acc 7h, faz ove" légica entre o contedda de ithe Acc, resultado em 11th 7th} coloca o conteddo de 7fh na pilha 7th} retira da pilba para 7th up Enderegamento Indireto Neste modo © operando especifica um registro que contem o enderego. Ambas RAM.s internae e externa podem ser indiretamente endezegadas. 02 vegistros de enderecos para & bits podem ser RO ou R1, do respective banco que estiver selecicnads ou Stack Fointer SP. No caso do endereco ser de 1€ bits sé pode ser utilizado o data pointer DPTR. Exemplost add aero; Soma Ace com o conteddo da posigio de nesdria cuto fendereco estd en £0, resultado ex Acc ‘move o contetdo da posicao de menéria cujo enderezo est FO, resultado em Ace ‘move © conteddo da posic4o de menéria (externa) cujo @ enderero est en r0, resultado ex Acc Instrugées de registros Existem inatrugses que permitem 0 acesso aos RO 2 RT. Como 80 veis @ registros significa que podemos indicar qual o registro pretendido Instrugées que podem aceder aos registros nessa forma sao eficientes no codigo, poie fazem normainente necessario para representar o endere m que se elimine o byte Exemploe: mov r7,a_) move de Acc para £7 aul 7th,ra._; faz 0 ‘et 16gico de ro como conteddo de 7fh fic ayn} soma ro a Ace mais o Bit de carry, roaultads om Acc Instrugdes especificas a registros H& inetrugses que so especificas a certos registros, por exemplo, algumas apenas operam com o acumulador ou com o DETR, 0 op-code da instrugéo por ai 36 faz isso. Exemplos: clr a; coloca o acumilador a zero sep 2; troca aitbles om Asc She dyer} incremenca o per Enderegamento Imediato Quando um valor constante & utilizado como operando. £ comum em operagtes aritméticas, légicas © de transferéncia de dados. Exemplos: nov a, #200 1} coloca 100 decimal em acc Hel 4) #1220000; coloca a sero on 4 Bits menos aignificativos Ace sub a, 2 subtral cah de Acc @ carry e coloca, resultado em ace Enderegamento Indexado Aqui s6 a memria de programa pode ser acedida com este modo de enderegamentos come € abvio <6 pode ser utilizado para leitura, Este modo é direcionado para utilizagso com look-up tables, em que se pode usar como referencia da tabela o PC program counter ou © DPTR data pointer. Exemplos: move a, aasdptr 7 coloca am Acc o contetido da posigto de manéria de programa apontado pela soma Ge dptr e de Acc move a, ype } ‘coloca eno conteddo da posicao de nendria de Prograna apontado pela soma de pe e de Aco Apresenta-se seguidamente o conjunto de instrugtes completo em que ha a refevirt Bn - representa qualquer registro de RO a R7, recorde-se que a selecao do Banco registros de RO a R7 & efetuado om FSW. Ri - representa o registro RO ou R1 direto - qualquer posigao da memoria RAM (representa um enderego) fdata -constante de 2 bits f#datalé ~constante de 16 bite rel - salto relativo possivel para -128 ou +127 Addrll - Enderego (posigao de memoria de programa) limitado a llbits Addrlé - Identifica qualquer posigao da memria de programa (16 bits) 22 Instrugdes aritméticas Acumulador Mnemonica Descrictio Byte | maquina ROD _&, Ri ‘Soma registro ao Acumulador T L ADD A, direto’ ‘Soma Byte direto a 2 1 Acumulador Dhar Soma RAM tnd 7 7 Acumulador ADD A, #data ‘Som dado imediato ao 2 1 BDDC KR Soma registo ao Acumulador mais Carry ‘Soma Byte direto a0 Acumulador mais Carry BDDC _h, ORT ‘Soma Ram indir Acumulador mais Carry acumulador menos Borrow ‘Subtrai dado imediato do Acumulador menos Borrow BDDC K, Fata Soma dado imediato a0) T Acumulador mais Carry SURE A; Rn Subtrai registro do Acumulador T T menos Borrow BUEE XK, direto Subtrais byte direto do 2 T Acumulador menos Borrow SURE A, GRE Subtrai Ram indireta do T T Tncrementa Acumulad rementa byte di Decr Acumulador Decrementa Registro. Decrementa Byte direto Decrementa RAM indirec Incrementa Data Pointer Multiplica A por B Divide A por B Ajuste Decimal p adigio 23 Instrugdes logicas ‘Mneménica Descri¢ao Byte eS ah TE entre registro ¢ Acumulador 1 1 ANE —K,direto [7 entre byte direto © Acumulador | 2 T fan BGR FT entre RAM indhiteta © 7 T Acumulador ANE —K#data—[-E" entre dado imediato © z T Scumulador Fet0-K Fe entre Acumulador e Byie dein T PANG atrero, Fare [1 entra dado ime z ORLA, Rn OU" entre registro e Ac T ORB directo [OU entre byte direto e T Acumulador ORL hor ‘OU entre RAM indiretae T T Neumulador [ORL #data FOU" entre dado mechato e z T Acumulador ORL direto,® OU" entre Acumulador © Byte z T iteto RE ‘OU entra dado imediato Byte 7 z aireto,¥aa | Greto ta Lh in ‘OU-EXCLUSIVO® enire rexistroe | 1 T Acumulador TREK, diets | “OU-EXCLUSIVO entre byte z diroto e Acumnulador Ha ‘OU-EXCLUSIVO™ entre RAM T T indireta e Acumulador TRL i #aata-0U-EXCLUSIVO" enir z T imediato ¢ Acumulador TRL —“aireto,8 —[-ou-EXCLUSIVO’ entre z T Acumulador ¢ Byte direto Toto, FaaES—[-OU-EXCLUSIVO’ entra dado 3 z imodiato Byte dircto Coe Timpa Acumulador (A-0) I T er [Complementa Acumulador (AA) 1 1 1 1 RL ___¥ Rotagio do Acumulalora esquerda [1 1 RL do Acumuladora esquerd 1 1 82 do Carry RR Rotagio do Acumuladora diet T T RRS Rotagéio do Acumulador & direita T T fs do Carry amare Troca nibbles do Acumulador T 7 24 Instrugdes de Transferencia de dados Mneménica Descrigao Byte | ipaguina Ova Move Registro para Acumulador T 1 HOV ___h, direto [Move Byte dircto para Acumulador_| > T HOY Kor Move RAM indireta para T T Scumulador ROY ——K-Faata——PMove dado imediato para z T Scumulador OTF Move Acumulavor para Regisio PROV Fa diFeto_[ Move Acumulador para Registro HOV __fa data [Move Acumulador para Registro 2 1 HOV _-direto,A [Move Acumulador para Byte direto | > T MOV__-direto,®n [Move Acumulador para Byte direto MOV direto,direto Ov MOV “direto, Fdata [Move Acumulador para Byte direto Tireto, ORT Move Acumulador para Byte dire Move Acumula Byte direto, lor p RAM indireta com Acumulador ov — oir Move Acumulador para RAM T T indirect OV @hi,direto [Move Acumulador para RAM z indirec MOV GRE, #data [Move Acumulador para RAM. 7 indinect HOV DPIR, Wdatals [Carrega o DPTR com constante de ¥ 2 Lo bits OVC —X.@X+DPTR [Move o codigo do byte relative ao T 2 DPTR para o Acumulador HOVE, @KPC Move 0 cidigo do byte relativo ao I 2 PC para © Acumulador HOVE 4, GRE Move RAM externa (Sbils)p T 2 Acumulade HOVE, @DPTR Move RAM externa (16 bils) para o T 2 Acumulador HO SRL Move © Acumulador para RAM T 2 externa (8 bits) COPE, Move o Acumulador para RAN T 2 externa (16 bits) PUSH direto [Coloca byte direto na pilhar FOF__direto Retira byte directo da pilha 2 2 CHAE Troca Registro com Acumulador T T CH __K,direto— [Troca RAM indireta com 2 i Acumulador CHDK, @RE Troca 4 bits ~ significativos da 7 25 2.6 Instrugdes booleanas ‘Mneménica Descrigao t (Coloca a zero Mag de carry Coloca a zero bit (Coloca a um Mag de carry Coloca aum bit Ciclos maquina, ‘Complement Ta ‘Complementa bit E bit com carry TE" complemento de bit com carry ‘OU bit com carry ‘ORL 0, 7bit ‘OUT complemento de bit com carry mov _—c, bit Move bit par Moy bee Move C para bit Instrugdes de salto Mnemonica Descricao Byte ae rel Salta se earny=1 suet Salte se carry se Bit rel__[Saltade bit-1 SWE ____bit,rel [Salta se bit-O 31 te) ‘Salta se (bite cary y—1 3 2 ACREE_adariz [Chamada subrotina (Ibis) 2 ERLE _adarie [Chama subrotina (16 b 3 REF Retoma de subrotina 1 REIT Retoma de subrotina de servigo a H 2 interrupgiio Sri [Salto absouto( Tits) 2 EaNP“adaeie Salto absoluto (16 bits) 3 BINP ret Salto pequeno (enderego relativo de 2 2 8 bits) SHP_GAWDPTR [Salto indireto relative ao DPTR aE Fer Salta se Acumutador=0 suz ret Salta se Acumulador diferente de 2 2 CONE _A,dixeto, rel [Compara Byte direio ao, Acumulador ¢ salta se no for igual ea ——XFaata- FI [Compara dado imediato a0 3 2 Acumulado ¢ salta se nao for igual [ean En, #data, rel PCompara dado imediato ao 3 2 Acumulador ¢ salta se nao for igual [CONE ORL, #data, ret [Compara dado imediato a RAM 2 indireta {ta se no for igual Donzi ¥ot Decrementa registro ¢ salla se no Tor] 2 z zero Due direto,rel [Decrementa Byte direto ¢ salta se 3 2 no for zero Nao faz nada, 2.7 Insteugées que afetam as flags indicada na figur: signif: ea flag afetan as flags. acl. fica FLAGS Fuacs INSTRUCTION c ov AC INSTRUCTION Cc Ov AC ADD t : t CLRE o Anoc tat crc ' suBB tat ANIL, bit t muL 0 3 NLC. Bi t ov o ORLC. bt t DA t ORL C, Bi t RRC : MOV C; bi t RLC ‘ CINE t seTac 1 Figura 1: instrugoes que afetam as fags Referéncias ‘Secure Microcontrollers- Dallas Semiconductor, 2000 Embedded Microcontrollers and Processors, Volume | - Intel, 1996

Você também pode gostar