(8051), kako spremeniti 16 hex številko bit za december številko?

J

JerryYiu

Guest
MOV, R2 (100)
MOV B, # 10
DIV, B

RET

Sem našel ta nekje vendar DIV, lahko B ukvarjale le z 8 bit, kaj je koda za 16-bitno pretvorbo?

pojasnite koncept in mi vzorčno kodo
hvala veliko.

 
Narediti nekaj domače naloge in spremenite to kodo za delovanje z 2-bytes samo ..

Koda:

; Hexa v decimalne

;

; Hexa INPUT 8 bajtov AT XX0.XX1.XX2.XX3.XX4.XX5.XX6.XX7

; RABA kot decimalni seštevalnik ŠTEVILKA: YY0.YY1.YY2.YY3.YY4.YY5.YY6.YY7.YY8

; Decimalni OUTPUT 9 BAJTOV AT: ZZ0.ZZ1.ZZ2.ZZ3.ZZ4.ZZ5.ZZ6.ZZ7.ZZ8

;

; V mojem primeru, yy8 in zz8 ni nikoli uporabljen v tem rutinsko, ampak vse

, To so 26 bytes zaporedni naslov v, pri čemer xx0 najnižjo.

;

X2D: CALL CLEARYZ;; Počisti vse YY in ZZ bytes

MOV YY0, # 1;; decimalno seštevalnika = 1

,,,

MOV R0, # XX7;; Locate KOLIKO BAJTOV s podatki

MOV B, # 8;; MOŽNI 8 bajtov W / PODATKI O XX

BITS1: MOV, @ R0;; GET BYTE FROM INPUT REGISTER

CJNE, # 0, BITS2;; JUMP če je ugotovljeno, prvi ne ZERO

December R0, pojdite k nižjim BYTE

DJNZ B, BITS1;, en bajt SESTAVLJENO, GO AGAIN

;;

BITS2: MOV, # 8;; 8 bitov na BYTE, B vsebuje BYTE #

MUL AB;; = količina BITS W / DATA

MOV BITS,,, SAVE

CJNE, # 0, X2DMAIN2;, B = število znakov W / DATA

RET;, se vrnejo, če SAMO ničlami na XX

;;

X2DMAIN1: CALL X2DSHIFTD;; SHIFT decimalno REZULTAT

X2DMAIN2: CALL X2DSHIFTH;; SHIFT hexa

JNC X2DMAIN3, in če je ne izvaja, šele SKIP

CALL X2DADD;; ADD NEW REZULTAT

X2DMAIN3: DJNZ BITS, X2DMAIN1;; ONE BIT SESTAVLJENO, GO AGAIN

RET;; GENERAL Izhod iz to rutinsko

,, ZZ0 - ZZ7 VSEBUJE decimalno REZULTAT

;;

X2DSHIFTD: MOV R0, # YY0;; YY * 2 (decimalno)

MOV B, # 8;, število bajtov,

CLR C;; POTREBA PRENOS ZERO

X2DSHIFTD1: MOV, @ R0;; IGNORE LAST PRENOS

ADDC, @ R0;; ADD BYTE, da se

DA,, decimalno POPRAVEK

MOV @ R0,,, da ga proda nazaj

INC R0;, POJDI NA UPPER BYTE

DJNZ B, X2DSHIFTD1;, DO IT 8 bajtov

RET;; RETURN

;;

X2DSHIFTH: MOV R0, # XX7;, SHIFT XX7 -> XX0 PRAVICA 1 BIT

MOV B, # 8;, število bajtov,

SHIFTR0B: CLR C;; POTREBA PRENOS ZERO

SHIFTR0B1: MOV, @ R0;; GET BYTE

RRC,, zavrtite naravnost skozi PRENOS BIT

MOV @ R0,,, ga shranite NAZAJ

December R0, pojdite k nižjim BYTE

DJNZ B, SHIFTR0B1;, še enkrat "B" TIMES

RET;; RETURN

;;

X2DADD: MOV R0, # ZZ0;; GET REZULTAT ZZ 8 bajtov REGISTER

MOV B, # 8;; 8 bajtov

MOV R1, # YY0;; GET YY OPERATOR

CLR C;; POTREBA Raznijeti

X2DADD1: MOV, @ R0;; ZZ = ZZ YY (8BYTES) W / DAA

ADDC, @ R1;; ADD BYTE TO BYTE 8 krat

DA,, decimalno POPRAVEK

MOV @ R0,,, da ga proda nazaj

INC R0;; udarec POINTER NEXT BYTE

INC R1;; udarec POINTER NEXT BYTE

DJNZ B, X2DADD1;, en bajt SESTAVLJENO, GO AGAIN

MOV, ZZ8;; LAST PRENOS do 9. bajt ZZ

ADDC, # 0;, samo prepeljali na ZZ8

MOV ZZ8, A;;

RET;; RETURN
 

Welcome to EDABoard.com

Sponsor

Back
Top