Konference: SAPI-1 a československé mikropočítače
Od: | Jiri Biba |
Datum: | 14.2.2013 18:48 |
Předmět: | asmbler, kterak na to |
Mam tady trosku programatorskej problem a nebo mam dnes nakej slabej den.
Porovnani dvou 16 bitovych cisel v Z80, neco jako je 8 bitu instrukce CP neco, tedy compare A s necim.
Bude rovnocene fungovat tohle:
OR A
SBC HL,BC
ADD HL,BC
Bude to umet priznak C a Z jako instrukce CP ? Podle me by do melo dat Z pri rovnosti a CY pokud bude BC vetsi nez HL. HL ani BC se nezmeni. Nenastavuje to jeste neco jinyho, pripadne nemuze to jeste neco ovlivnit na vstupu, kdyz tam nuluju CY? Nemuzu nikde nalyzt jak se presne nastavujou priznaky u 16 bitovejch operacich. Neco mi v tom useku nahodne nejde, a nemuzu to nalyzt.
A jeste jedna vec. Mam 16 bitu stary cislo stopy, kde aktualne sedi disk. Pri pozadavku vystavit na novou stopu je potreba poslat prikaz „Step in“ (do stredu disku),nebo „Step out“ (ke kraji disku) tolikrat, kolik je rozdil mezi starou a novou hodnotou. Rozdil muze byt samozrejme kladnej i zapornej. Stopa je nejvic 1024 dec. Takze jsem to udelal takhle, HL je aktualni, DE nova pozadovana stopa:
SEEK:
OR A
SBC HL,DE ;stara – nova = +/- rozdil
RET Z ;stejny, nemusis nic
JP NC,SEEK_IN ;kladny, smer in
LD A,H
CPL ;dvojkovej doplnek high
LD H,A
LD A,L
CPL ;dvojkovej doplnek low
LD L,A
INC HL ;pricteni 1 k doplnku
LD E,COM_OUT ;command Step out
JP SPOL
SEEK_IN:
LD E,COM_IN ;command Step in
SPOL:
LD C,RADIC
LOOP:
OUT (C),E ;prikaz do radice
DEC HL
LD A,H
OR L
JP NZ,LOOP ;dokud nejsou vsechny
RET
Muze to chodit? Hlavne, jestli ta cast kolem doplku je spravne, nebo zda to nejde udelat nejak jinak a ne takhle klopotne nadvakrat. Kdyz to nepujde na prvni slapnuti, zkurvim disk....
Jsem jedno ucho a voko.
Diky
Jirka
[2013/1 (16)] [2013/2 (90)] [2013/3 (37)] [2013/4 (48)] [2013/5 (36)] [2013/6 (128)] [2013/7 (27)] [2013/9 (29)] [2013/10 (64)] [2013/11 (63)]