Assembly kezdő program

Assembly kezdő program
2007-11-23T10:57:01+01:00
2007-11-25T09:36:39+01:00
2022-11-06T19:35:36+01:00
Adamka1999
Helló! Adott ez a kód, órán csinálta a tanár a köv. példára: Input: A, B, C, billentyűzet, enter végjellel; A,B,Cє Z
Output: "A + B – C = E", képernyőre
Pl.:
8
4
3
8 + 4 – 3 = 9
Egy másik programot írt át, ami nem is tudom mit csinált, de sztem így ebben a kódban vannak felesleges részek, lehet hogy nincsenek, csak én gondolom így... Segítség kellene, hogy mik a feles részek...

MODEL SMALL .STACK KOD SEGMENT ASSUME CS:KOD,DS:NOTHING DecKiir PROC PUSH AX ; regiszerek lementese PUSH BX PUSH CX PUSH DX MOV BX,10 ;oszto beallitasa XOR CX,CX @OsztCikl: OR AX,AX ;csak flageket allit, ax-et valtozatlanul hagyja JZ @CiklVege ;ha ax 0, ugras XOR DX,DX DIV BX ;eredmeny ax, maradek dx PUSH DX ;maradek le verembe, ezt fogjuk kiirni INC CX ;cx novelese, ennyi karaktert kell majd kiirni JMP @OsztCikl @CiklVege: MOV AH,02h ;int 21h paramterezese -> DL-t kiirja JCXZ @NullaVolt;ha 0 a szam @KiirCikl: POP DX ;kivesszuk a kiirando szamot ADD DL,'0' ;karaktert csinalunk belole (0 ascii kodjat adjuk hozza) INT 21h DEC CX CMP CX,0 JNE @KiirCikl ;ugras ha CX!=0 JMP @KiirVege @NullaVolt: MOV DL,'0' ;'0' kiirasa INT 21h @KiirVege: POP DX ;regiszerek visszatoltese, forditott (!) sorrendben POP CX POP BX POP AX RET DecKiir ENDP ;beolvas AX-be egy szamot enter vegjelig szamBe PROC PUSH BX PUSH DX XOR BX,BX @szbc: MOV AH,1 INT 21h CMP AL,13 JE @szbv SUB AL,'0' PUSH AX MOV AX,10 MUL BX MOV BX,AX POP AX XOR AH,AH ADD BX,AX JMP @szbc @szbv: MOV AX,BX POP DX POP BX RET szamBe ENDP ;kiirja AL-ben levo karaktert karKi PROC PUSH AX MOV AH,14 INT 10h POP AX RET karKi ENDP ;szokoz kiirasa szokoz PROC PUSH AX MOV AH,14 MOV AL,' ' INT 10h POP AX RET szokoz ENDP UjSor PROC ;sortores kiirasa PUSH AX PUSH DX MOV AH,02h MOV DL,0Dh INT 21h MOV DL,0Ah INT 21h POP DX POP AX RET UjSor ENDP @Start: CALL szamBe ; AX-be egy szamot PUSH AX CALL DecKiir CALL Ujsor CALL szamBe ; AX-be egy szamot PUSH AX CALL DecKiir CALL Ujsor CALL szamBe ; AX-be egy szamot CALL DecKiir CALL Ujsor MOV CX,AX ; C POP AX MOV BX,AX ; B POP AX ; A MOV DX,AX ADD DX,BX SUB DX,CX ; E CALL DecKiir CALL szokoz MOV AL, '+' CALL karKi CALL szokoz MOV AX,BX CALL DecKiir CALL szokoz MOV AL, '-' CALL karKi CALL szokoz MOV AX,CX CALL DecKiir CALL szokoz MOV AL, '=' CALL karKi CALL szokoz MOV AX,DX CALL DecKiir CALL UjSor MOV AX,4C00h INT 21h KOD ENDS END @Start
Mutasd a teljes hozzászólást!
szia.
Átnézve a kódot, azt kell mondjam, nincsen benne felesleges rész!
-Szépen exe fejlécce lessz, mert model smal. (a com programoknál ORG 100h-van!)
-aztán ->DecKiir PROC ez egy procedúra, hogy ki tudjon írni számokat, gondlom azért tette eljárásba, hogy akárhány számot ki tudj iratni. ez tart a DecKiir ENDP-ig
-aztán a számok beolvasására szintén egy eljárást írt ami a szamBe PROC-tól szamBe ENDP-ig tart. ( ha nem eljárásba tennéd, akkor ez a kódot 3* kéne beírni... ugye hogy így az egyszerűbb??)
-ezekután jön megint 2ejárás a karKi PROC (+-*/= kiíratásához) és a szokoz PROC( ami egy szóközt rak ki a képernyőre<- na ez lehet felesleges, mert megoldható a karKi Proc eljárásal is!!) tehát ez felsleges, csak akkor ha ezt törlöd, akkor a szóköz karaktert Al-be kell töltened (mov al,' '), majd meghívni a karki eljárást( Call Karki)
-eztán UjSor eljárás jön, ami egy entert üt a képlet stb után ha meghívod.
-Végül nem csinál mást ( @Start -nál indul a program), és meghívogatja a fentebb általam is felvázolt eljáráskat stb.
Itt ad értéket az ABC-nek, és kiíratja a képernyőre hogy A+B-C=E persze a betűk helyén azok számbeli megfelelője lessz megjeenítve.
- a végén a kép sor: MOV AX,4C00h és INT 21h azt mondjameg, hogy vége a programnak, vissza lehe térni (a dos hoz)/óperációs rendszehez

Nos ha nem értetted a programot, akkor remélem tudtam segíteni, ésmostmár érted

Még annyit, hogya push AX az elmenti a verembe az ax értékét(számot), a pop AX pedig AX-be beolvassa a verem tetején lévő számot.( Bővebb infó haérdekel, akkor keress rá google: Flag/Stack-re)

Minden jót!
Mutasd a teljes hozzászólást!

  • húúú dejó, így már rögtön világos lett minden! köszönöm szépen!
    Mutasd a teljes hozzászólást!

  • rögtön világos lett minden

    A kapcsolo es a villanykorte

    bocs. nem birtam ki.
    Mutasd a teljes hozzászólást!
  • Ez miért off topic?:O nemértem, kérlek magyarázd el... És miért kellett belinkelni egy kapcsolo és villanykorte képét? LOL
    Mutasd a teljes hozzászólást!
  • bluetigger a linkjeivel, és az off topic képpel arra akart célozni, hogy:
    A kérdés túl egyszerű, mintha most azt kérdezted volna a villanszerelőtől ( ez esetünkben programozóktól), hogy hogyan kell becsavarni egy villankörtét a foglalatba/hogy kell felkapcsolni a lámpát, ill pl hogy mnért 2 vezeték kell a lámpának, hisz csak oda kell, hogy menjen az áram, vissa nem!

    bluetigger: Azért hozzáteszem: a assembly-nem egy könnyű témakör, mikor tanultam nekem is voltak kellemetlen pillanataim. (Persze, mert én az assembly-t tanúltam először)

    ha jól látom, állítólag az SZTE-TTK-n tanúlsz. Én a DF-en, ebből a tanúlság anyi, hogy tudom, hogy mennek a dolgok, és van nektek is valami ajánlott irodalom vgy egy elég használhatatlan jegyze programozásból.

    Legközelebb nézd át kérlek, és ha még úgy se jöttél rá a meoldásra, akkor nyugodtan tedd fel itt, de előtte kutakodj kicsit magadis, mert a "csak felteszem a kérdést ti meg válaszoljátk meg / csináld meg a házim" tpusú kérdezőknek nem sok esélyük van a prog.hu-n..
    ..lásd off topic!
    Minden jót, további jó fóruzomást/programozást.
    Mutasd a teljes hozzászólást!
  • Elég gáz az előadónk jegyzete, én másik könyvekből tanultam/tanulok, egyébként tele van kommenttel a program meg a nagy részét értem, csak abban nem voltam konkrétan biztos, hogy
    DecKiir PROC PUSH AX ; regiszerek lementese PUSH BX PUSH CX PUSH DX MOV BX,10 ;oszto beallitasa XOR CX,CX @OsztCikl: OR AX,AX ;csak flageket allit, ax-et valtozatlanul hagyja JZ @CiklVege ;ha ax 0, ugras XOR DX,DX DIV BX ;eredmeny ax, maradek dx PUSH DX ;maradek le verembe, ezt fogjuk kiirni INC CX ;cx novelese, ennyi karaktert kell majd kiirni JMP @OsztCikl

    @NullaVolt: MOV DL,'0' ;'0' kiirasa INT 21h
    szóval ezt a két dolgot gondoltam feleslegesnek a program szempontjából... Az ;oszto beallitasa az nem értem, hogy minek ide, és a @nullavolt minek?:O
    Mutasd a teljes hozzászólást!
  • az osztó azért kell, mert a 10-es számrendszerbeli zsámot úgy iratja ki, hogy folyamatosan ösztogatja(!) 10-el, és így kapja meg azt (maradék), hogy hány tizes-százas-ezres...ből áll a szám( ezeket írjamajd ki a képernyőre)!

    A @NullaVolt: pedig azért kell, hogy tudja, hogyha a leosztható szám =0 akkor nincs mit tovább osztani, 'elfogyotak' a szám számjegyei, szóval ideje lennekilépni! ( nullával való osztás!?)

    Amúgy a @NullaVolt:-re ott a hivatkozás:
    @CiklVege: MOV AH,02h ;int 21h paramterezese -> DL-t kiirja JCXZ @NullaVolt;ha 0 a szam

    remélem már érted a progit.
    Mutasd a teljes hozzászólást!
  • Igen azt gondoltam, hogy a 0-val való osztás miatt ott lesz valami... Köszi szépen mégegyszer!
    Mutasd a teljes hozzászólást!
Tetszett amit olvastál? Szeretnél a jövőben is értesülni a hasonló érdekességekről?
abcd