Pereiti prie turinio

Reikia pagalbos sudarant programos algoritmą


Rekomenduojami pranešimai

Sveiki, nežinau ar čia lengvas dalykas ar ne, bet pats nelabai pagaunu jo...Žodžių kalba eina apie asemblerio programavima, tačiau manau sudarant programos algoritmą programavimo kalba nėra labai svarbi,Na tai esme tokia: dėstytojas prisikabino prie blogos programos, pataisiau ją na ir paprašė padaryti jos algoritma... programavimo nesimokau, t.y studijos visai apie kitka nu bet taip išėjo , kad reikėjo pasimokyti asemblerio kalba.Galbūt kas nors iš čia esančių galėtu padėti sudaryti algoritmą ? Kiek klausiau tai programavimo kalba visai nėra svarbi, nes čia tiesiog reikia programą suskaidyti į tuos blokus, tačiau neteko man daryti jokio algoritmo dėl to nežinau kuom tie blokai skiriasi ( pagooglinau tai radau kai čia juos sudarineti, tačiau kadangi nenoriu nešti blogo darbo prašau pagalbos ). Programos kodas atrodo taip:

org 100h
mov ah, 0
mov al, 13h
int 10h

;T raide;
mov cx, 160
mov dx, 10
mov al, 15
u1: mov ah, 0ch
int 10h
dec cx
cmp cx, 120
jae u1

mov cx, 140
mov dx, 70
mov al, 15
u2: mov ah, 0ch
int 10h
dec dx
cmp dx, 10
ja u2
;O raide;
mov cx, 220
mov dx, 70
mov al, 15
u3: mov ah, 0ch
int 10h
dec dx
cmp dx, 10
ja u3

mov cx, 180
mov dx, 70
mov al, 15
u4: mov ah, 0ch
int 10h
dec dx
cmp dx, 10
ja u4

mov cx, 220
mov dx, 70
mov al, 15
u5: mov ah, 0ch
int 10h
dec cx
cmp cx, 180
ja u5

mov cx, 220
mov dx, 10
mov al, 15
u6: mov ah, 0ch
int 10h
dec cx
cmp cx, 180
ja u6

ret
end

Pati pradžia algoritmo man kaip ir aiški, apsirašau biblioteką, nustatau grafini režimą na ir prasideda ciklai t.y 6 ciklai, vat jų algoritmo ir nežinau kaip nubraižyti...Pradžia gaunasi kažkas tokio:

 

Algoritmas

Redagavo tomka080
Nuoroda į pranešimą
Dalintis kituose puslapiuose

Labas,

 

imant iš google: https://stackoverflow.com/questions/30187367/differences-between-int-10h-int-16h-int-21h#30188146

Each INT represents a functions family, where usually AH represents the function number.

 

For example :

 

INT 0x10 is used for screen manipulation

 

AH=0x00 -> set video mode

AX=0x1003 -> Set Blinking mode

AH=0x13 -> write string

AH=0x03 -> get cursor position

INT 0x10 with AH = 0x00 and AL = 3 (mov ax, 3) means: set video mode to TextMode 80x25 chars and 16 colors.

 

 
org 100h
mov ah, 0
mov al, 13h 
int 10h

;T raide;
mov cx, 160
mov dx, 10
mov al, 15
; pradžioje cx = 160
; kol cx >= 120 (t.y. 40 kartų) sukame ciklą:
; ah = 12 
; išvedam į ekraną (kai ah=0Ch funkcija "Write graphics pixel"; AL = Color, BH = Page Number, CX = x, DX = y)
; cx= cx-1
; vadinasi dedam baltus (nes AL=15) pikselus į koordinates:
; 160, 10
; 159, 10
; ...
; 120, 10
; gauname horizontalią liniją 160,10 - 120,10
u1: mov ah, 0ch
int 10h
dec cx
cmp cx, 120
jae u1


mov cx, 140
mov dx, 70
mov al, 15
;ciklo pradžia
; cx =140, dx=70
; ciklo metu cx (X koordinatė) nesikeičia
; DX (Y koordinatė keičiasi nuo 70 iki 10)
; išvedinėjame pikselius:
; 140, 70
; 140, 69
; ...
; 140, 10
; gauname vertikalią liniją 140, 70 - 140, 10
u2: mov ah, 0ch
int 10h
dec dx
cmp dx, 10
ja u2
; prasukus šiuos du ciklus ekrane turi matytis T raidė

;O raide;
mov cx, 220
mov dx, 70
mov al, 15
u3: mov ah, 0ch
int 10h
dec dx
cmp dx, 10
ja u3
; ciklo pradžioje X=220, Y = 70, pikselio spalva balta
; cikle mažinam Y koordinatę nuo 70 iki 11
; išvedinėjam baltus taškus (kai ah=0Ch ir int 10h) ir 
; po ciklo prasisukimo gauname vertikalią liniją 220,70 - 220,10

mov cx, 180
mov dx, 70
mov al, 15
u4: mov ah, 0ch
int 10h
dec dx
cmp dx, 10
ja u4
; analogiškai Y mažėja nuo 70 iki 10, gauname vertikalią liniją 180, 70 - 180,10
; tad po šių dviejų ciklų turime dvi vertikalias linijas - ties X=180 ir ties X= 220

mov cx, 220
mov dx, 70
mov al, 15
u5: mov ah, 0ch
int 10h
dec cx
cmp cx, 180
ja u5
; X = 220, cikle mažėja iki 180
; išvedinėjam baltus taškus (kai ah=0Ch ir int 10h) 
; Y (dx) nesikeičia, vadinasi gausim horizontalią liniją 220,70 - 180,70

mov cx, 220
mov dx, 10
mov al, 15
u6: mov ah, 0ch
int 10h
dec cx
cmp cx, 180
ja u6
; brėžiam viršutinę horizontalią liniją - CX mažėja nuo 220 iki 180
; Y nesikeičia ir yra 10
; vadinasi išvedę baltus taškus gausime liniją 220, 10 - 180, 0

; teoriškai tai pavadinta raide "O" bet man atrodo paprasčiausias kvadratas
ret
end
; pabaiga

 

Viskas, ko aš nesuprtatau šiame kode - kodėl pirmame cikle naudojamas jae, o visuose kituose cikluose - ja. Tad teoriškai pirmoji linija turėtų būti 1 pixeliu ilgesnė. Nesupratau kam to reikia

 

P.S. Beje, tavo paveiksliuko nerodo

Nuoroda į pranešimą
Dalintis kituose puslapiuose

Labas,

 

imant iš google: https://stackoverflow.com/questions/30187367/differences-between-int-10h-int-16h-int-21h#30188146

Each INT represents a functions family, where usually AH represents the function number.

 

For example :

 

INT 0x10 is used for screen manipulation

 

AH=0x00 -> set video mode

AX=0x1003 -> Set Blinking mode

AH=0x13 -> write string

AH=0x03 -> get cursor position

INT 0x10 with AH = 0x00 and AL = 3 (mov ax, 3) means: set video mode to TextMode 80x25 chars and 16 colors.

 

 
org 100h
mov ah, 0
mov al, 13h 
int 10h

;T raide;
mov cx, 160
mov dx, 10
mov al, 15
; pradžioje cx = 160
; kol cx >= 120 (t.y. 40 kartų) sukame ciklą:
; ah = 12 
; išvedam į ekraną (kai ah=0Ch funkcija "Write graphics pixel"; AL = Color, BH = Page Number, CX = x, DX = y)
; cx= cx-1
; vadinasi dedam baltus (nes AL=15) pikselus į koordinates:
; 160, 10
; 159, 10
; ...
; 120, 10
; gauname horizontalią liniją 160,10 - 120,10
u1: mov ah, 0ch
int 10h
dec cx
cmp cx, 120
jae u1


mov cx, 140
mov dx, 70
mov al, 15
;ciklo pradžia
; cx =140, dx=70
; ciklo metu cx (X koordinatė) nesikeičia
; DX (Y koordinatė keičiasi nuo 70 iki 10)
; išvedinėjame pikselius:
; 140, 70
; 140, 69
; ...
; 140, 10
; gauname vertikalią liniją 140, 70 - 140, 10
u2: mov ah, 0ch
int 10h
dec dx
cmp dx, 10
ja u2
; prasukus šiuos du ciklus ekrane turi matytis T raidė

;O raide;
mov cx, 220
mov dx, 70
mov al, 15
u3: mov ah, 0ch
int 10h
dec dx
cmp dx, 10
ja u3
; ciklo pradžioje X=220, Y = 70, pikselio spalva balta
; cikle mažinam Y koordinatę nuo 70 iki 11
; išvedinėjam baltus taškus (kai ah=0Ch ir int 10h) ir 
; po ciklo prasisukimo gauname vertikalią liniją 220,70 - 220,10

mov cx, 180
mov dx, 70
mov al, 15
u4: mov ah, 0ch
int 10h
dec dx
cmp dx, 10
ja u4
; analogiškai Y mažėja nuo 70 iki 10, gauname vertikalią liniją 180, 70 - 180,10
; tad po šių dviejų ciklų turime dvi vertikalias linijas - ties X=180 ir ties X= 220

mov cx, 220
mov dx, 70
mov al, 15
u5: mov ah, 0ch
int 10h
dec cx
cmp cx, 180
ja u5
; X = 220, cikle mažėja iki 180
; išvedinėjam baltus taškus (kai ah=0Ch ir int 10h) 
; Y (dx) nesikeičia, vadinasi gausim horizontalią liniją 220,70 - 180,70

mov cx, 220
mov dx, 10
mov al, 15
u6: mov ah, 0ch
int 10h
dec cx
cmp cx, 180
ja u6
; brėžiam viršutinę horizontalią liniją - CX mažėja nuo 220 iki 180
; Y nesikeičia ir yra 10
; vadinasi išvedę baltus taškus gausime liniją 220, 10 - 180, 0

; teoriškai tai pavadinta raide "O" bet man atrodo paprasčiausias kvadratas
ret
end
; pabaiga

 

Viskas, ko aš nesuprtatau šiame kode - kodėl pirmame cikle naudojamas jae, o visuose kituose cikluose - ja. Tad teoriškai pirmoji linija turėtų būti 1 pixeliu ilgesnė. Nesupratau kam to reikia

 

P.S. Beje, tavo paveiksliuko nerodo

Jae netyčia turbut pasirašė.Dėkui už išaiškinimą dabar gal ir lengviau bus nubrėžti algoritmą, pažiurek dabar jau turėtu veikti paveikslelis, tačiau vistiek nesigaudau, kaip tą algortimą braižyti ir kokius blokus naudoti, sakė, kad reik kiekvieną ciklą atskirai padaryt..

Nuoroda į pranešimą
Dalintis kituose puslapiuose

O po to brėži rombą, kuriame rašai: ar CX>120? jei taip - pereina į funkciją "padėti pixel", jei ne - pereiti į sekančia trapeciją kurioje parašyta " custatome CX=..., DX=... ir pikselio spalvą= 15 (balta), po to vėl ciklas (rombas). Ir taip padarai kelis rombus (ciklus).

Nuoroda į pranešimą
Dalintis kituose puslapiuose

O po to brėži rombą, kuriame rašai: ar CX>120? jei taip - pereina į funkciją "padėti pixel", jei ne - pereiti į sekančia trapeciją kurioje parašyta " custatome CX=..., DX=... ir pikselio spalvą= 15 (balta), po to vėl ciklas (rombas). Ir taip padarai kelis rombus (ciklus).

Nenoriu įkyrėti bet galbūt galėtum pabraižyti bent vieną ciklą , kad ir su paint :D ? O pagal tai manau kitus ir pats nusibraižysiu.

Nuoroda į pranešimą
Dalintis kituose puslapiuose

Prisijunkite prie diskusijos

Jūs galite rašyti dabar, o registruotis vėliau. Jeigu turite paskyrą, prisijunkite dabar, kad rašytumėte iš savo paskyros.

Svečias
Parašykite atsakymą...

×   Įdėta kaip raiškusis tekstas.   Atkurti formatavimą

  Only 75 emoji are allowed.

×   Nuorodos turinys įdėtas automatiškai.   Rodyti kaip įprastą nuorodą

×   Jūsų anksčiau įrašytas turinys buvo atkurtas.   Išvalyti redaktorių

×   You cannot paste images directly. Upload or insert images from URL.

Įkraunama...
  • Dabar naršo   0 narių

    Nei vienas registruotas narys šiuo metu nežiūri šio puslapio.

×
×
  • Pasirinkite naujai kuriamo turinio tipą...