Controllo utente in corso...

Appunti per la programmazione in assembler.(Documento Word, 13 pag.) ( formato doc)

VOTO: stellastellastella Appunto inviato da leons

Le istruzioni per lo spostamento dati (In questi appunti vi parlo un po' di assembler) By Leons Le istruzioni per lo spostamento dati sono possibili solo i seguenti spostamenti: memoria registro registro registro Non sono possibili spostamenti da memoria a memoria e per far ciò si deve ricorrere all'uso di registri di supporto: memoria registro memoria Esempi di spostamenti memoria , NON AMMESSI, sono (in linguaggio macchina): mov byte/word [100],[200] mov byte/word [bx],[50] Esercizio (facile!): espandere questi spostamenti usando ad es. al/ax come registro di supporto. > MOVIl metodo più comune per spostare i dati è quello di utilizzare l'istruzione MOV. La sintassi completa dell'istruzione è la seguente: MOV < registro|memoria > , < registro|memoria|valore imm. > Alcuni esempi sono: mov ax,7 ;valore --> registro mov mem,45 ;valore --> memoria mov ax,bx ;registro --> registro mov mem[bx],7 ;valore --> memoria (indiretto) ... ... > XCHGUn'altra istruzione per eseguire spostamenti di dati è XCHG che scambia tra loro i due operandi : XCHG < registro|memoria > , < registro|memoria > Ad esempio: xchg ax,bx ; pippo:=ax; ; ax:=bx; ; bx:=pippo; Attenzione che non è possibile fare lo scambio di due dati entrambi in memoria. > LAHF e SAHFPer esaminare il registro dei flag esistono queste due istruzioni: LAHF che carica in AH, SAHF che li salva. Spero vi sia sorto un dubbio. Come faccio a far stare l'intero registro di flag in 8 bit ??Bene queste due istruzioni lavorano solo sugli 8 bit meno significativi del registro.Esistono comunque altre due istruzioni per salvare e ripristinare l'intero registro di flag nello Stack ma le vedremo dopo. -- CONVERTIRE LE DIMENSIONI DI UN DATO --Siccome trasferire dati tra registri di diversa dimensione non è consentito,per fare questo tipo di operazione si devono prendere alcuni accorgimenti.Prima di tutto ci si comporta in modo diverso a seconda che il dato abbia o no il segno.Nel caso di SIGNED VALUE l'Assembly mette a disposizione due istruzioni:CBW (Convert Byte to Word) e CWD (Convert Word to Doubleword).CBW converte il dato a 8 bit con segno contenuto in AL mettendolo in AX (16bit). CWD come la precendente prende il dato in AX (16bit) e lo mette in DX:AX.Per capire meglio vediamo un esempio: .DATA mem8 DB -5 mem16 DW -5 .CODE .... .... mov al,mem8 ;mette in AL -5 (FBh) cbw ;converte (8--> 16)(FBh--> FFFBh) in AX mov ax,mem16 ;AX=-5 (FFFBh) cwd ;converte (16--> 32)(FFFBh--> FFFF:FFFBh) in DX:AX -- USARE I PUNTATORI -- > LEAL'istruzione LEA (Load Effective Address) carica un puntatore di tipo NEAR nel registro specificato, la sua sintassi è : LEA registro,memoria Ad esempio: LEA dx,stringa ;carica in dx l'offset di stringa equivale a MOV dx,OFFSET stringa NOTA : il secondo modo (con l'uso di MOV) in tal caso è più veloce essendo l'OFFSET una costante nota all'assembler che quindi non deve essere calcolata.Nota: più veloce in tal caso significa risparmiare qualche ciclo di clock (!!!), ma ciò avviene solo sugli 8088 (!!! Continua »

vedi tutti gli appunti di informatica »
Carica un appunto Home Appunti
Pagina eseguita in 0.285676956177 secondi