Vie mi nekto vysvetlit co robi prikaz asebleru 8080 CPI a ako mam chapat cpi '9'+1
Fórum › Assembler
Prikazy Asembleru
instrukce cpi porovná obsah akumulátoru tedy registru A s hodnotout těsně za znakem 9. Podle porovnání budou nastaveny příznaky - přenosu, když to bude 9,8,7.... Naopak třeba v ASCII je znak "a" nad takže tam to příznak nenastaví.
Diky za odpovet.Program ma zaulohu spocitat cisla.Este by ste mi mohli vysvetlit ten program. mvi nacitava stup z klavesnice? neviem ako mam chapat cpi 10, cpi 13,cpi 0... cpi 10 a ostatne sa porovnavaju z cim?
org 1000
dcx sp ; inicializacia zasobnika (0FFFFh)
lxi h,text1
call putstr ; vypis text1
mvi d,0 ; pocitadlo cislic
char_loop:
call getchar
cpi 10 ; koniec vstupu?
jz char_end
cpi 13
jz char_end
cpi '0'
jc char_loop ; menej ako '0'?
cpi '9'+1
jnc char_loop ; viac ako '9'+1?
inr d ; cislica
jmp char_loop
char_end:
lxi h,text2 ; vypis text2
call putstr
mov a,d
adi '0' ; hodnota a jej ASCII tvar ...
call putchar
call newline
hlt
include 'examples\8080\include\getline.inc'
include 'examples\8080\include\putstr.inc'
include 'examples\8080\include\putchar.inc'
include 'examples\8080\include\getchar.inc'
include 'examples\8080\include\newline.inc'
text1: db 'Pocet cislic vo vstupe (getchar) ...',10,13,'Vloz text: ',0
text2: db 10,13,'Cislic: ',0
vlozeny: ds 30
getchar predpokladam nacte znak do akumulatoru..
cpi akumulator nejspis nemeni.. tak kontrolni otazka: s cim se porovnavaji hodnoty zadane u cpi, kdyz se porovnavaji s akumulatorem?
cislo 12 jako retezec se ti muze rozlozit do znaku 49 a 50. Cpi 10 porovna znak 10 to je rozdilne od znaku 1 a 2 tudiz bude Z=0 jakoze se nerovna. Priznak Z je od Zero a nastavi se kdyz po virtualnim odecteni zbyde 0 coz v tomhle pripade mimochodem nastane na konci radku ktery se oznaci prave znakem 10+13. Oddelene .....10,13
/jinak představ si řetězec
"123456A"+konec řádku neboli ENTER - ten se převede do čísel v paměti která je organizovaná
8 bitově jako čísla binárně do 255. Zkonvertujem je raději do decimální soustavy. tedy:
49,50,51,52,53,54,65,13,10,0,0,0,0,0,0...
Na začátku programu nastavíš ukazatel na ty data bude ukazovat na jedničku
neboli číslo 49. Pak v té řadě čísel ještě vidíš 13 a 10 ty představují konec řádku(enter).
instrukcí CPI 13 porovnáváš ten obsah načteného registru A s 13. Tozn. nejřív existuje
instrukce pro načtení do registru A. Pak popořadě krokem prochází všechna čísla.
Ve všech případech je Z=0 (49,50,51,52,53,54,65) Až na konci řádku, který je
představován znakem s obvykle dvěma kódy 13,10 se zde vrátí u první 13ky -> Z=1 a může zareagovat následný podmíněný skok.
Přidej příspěvek
Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku
×Vložení zdrojáku
×Vložení obrázku
×Vložení videa
Uživatelé prohlížející si toto vlákno
Podobná vlákna
Převod asembleru do hex — založil Nnet
Seřazení čísel v asembleru — založil Galland
At příkazy — založil ...
Příkazy aj. — založil Petr G...
Príkazy — založil hirakami