[ Príspevkov: 5 ] 
AutorSpráva
Offline

Užívateľ
Užívateľ
Obrázok užívateľa

Registrovaný: 16.05.09
Prihlásený: 17.05.09
Príspevky: 3
Témy: 1 | 1
NapísalOffline : 16.05.2009 19:23 | TASM hviezdicky

caute...potrebujem help s programom na assembler 8086 a kompilaciou cez tasm...

program ma vypisat peknu pyramidu hviezdiciek so zakladnou ktoru si zadame na zaciatku...no nejako to nerobi...vypisuje ze pointer or offset is 32 bit. tu je zdrojak

Kód:

.model SMALL
.stack 100

.data

sprava1 db 'Zadaj cislo od 1 do 9:$'
crlf db 13,10,'$'

.code

start:
mov ax,cs   
mov ds,ax


int 10h

mov ah,9
mov dx,offset sprava1 ;
int 21h

rpt:
xor ax,ax
int 16h

cmp ah,2   ;citanie alfanumerickej casti - klavesy pod escape, 1, 2, 3
jb rpt
cmp ah,0Ah   ;citanie scan kodu az po 9
ja rpt

mov al,0

mov ah,9
mov dx,offset crlf ;novy riadek
int 21h


dec ah    ;1-9
xor al,al
mov cl,ah
xor ch,ch ;cx = od 1 do 9
mov ax,1 ;vycisti registre :D

kresli:
push ax
push cx
mov cx,ax
mov ah,0Ah
mov al,'*'
int 10h
pop cx
pop ax
cmp ax,cx
je konec

mov ah,09h
mov dx,offset crlf
int 21h

inc ax
jmp kresli

konec:

mov ah,09h
mov dx,offset crlf
int 21h
xor ax,ax
int 16h
mov ah, 4Ch
int 20h

end start


program ide skompilovat ale vobec nevypise co ma ani pyramidu len nejake hakybaky...no ved skuste si to niekto skompilovat cez tasm a sami uvidite...pomozete mi s tym pls?co tam zmenit aby to slo spravne?


Offline

Skúsený užívateľ
Skúsený užívateľ
TASM hviezdicky

Registrovaný: 11.01.09
Prihlásený: 08.01.25
Príspevky: 1395
Témy: 10 | 10
Bydlisko: Hrinova
NapísalOffline : 16.05.2009 20:43 | TASM hviezdicky

Neskúšal som to kompilovať, ale všimol som pár chýb:

1.)
Kód:
cmp ah, 2   ;citanie alfanumerickej casti - klavesy pod escape, 1, 2, 3
jb rpt
cmp ah, 0Ah   ;citanie scan kodu az po 9
ja rpt

mov al, 0

mov ah, 9
mov dx, offset crlf ;novy riadek
int 21h

dec ah    ;1-9


V registri AH ukladáš číslo zo vstupu (po prerušení int 16h). Následne použiješ prerušenie int 21h, pričom do AH umiestniš 9 ==> základňa sa vždy rovná ôsmim (po inštrukcii dec ah).

2.) To isté sa deje aj tu:

Kód:
mov cx,ax
mov ah, 0Ah
mov al, '*'
int 10h
pop cx
pop ax
cmp ax, cx
je konec

mov ah, 09h
mov dx, offset crlf
int 21h

inc ax
jmp kresli


Pri prvom prejdení je v prvom riadku tohto výpisu správne číslo (teda ak neberieme v úvahu, že je tam stále 8 :D ). No potom voláš prerušenie int 21h a v ax je 0901h (podľa návratovej hodnoty int 21h) ==> nakreslí ti toľko hviezdičiek, koľko je v AX.

Riešenie:

Vždy dozeraj na registre, či ich náhodou následovným kódom nemeníš. A ak ti môžem poradiiť, nerob to cez int 10h, teda pomocou grafického režimu (v prípade, že to nie je nevyhnutné). Je to zbytočne komplikované na to, že to iba kreslí hviezdičky.


Offline

Užívateľ
Užívateľ
Obrázok užívateľa

Registrovaný: 16.05.09
Prihlásený: 17.05.09
Príspevky: 3
Témy: 1 | 1
Napísal autor témyOffline : 16.05.2009 22:10 | TASM hviezdicky

hmm velmi nechapem...mozes to prekodit nejako aby to fungovalo?totizto ked ten program prepisem do FASM...co je ale procesor i80 a ja potrebujem i86...vymazem offset a dam org proste to editujem do tejto podoby

Kód:
org 100h
jmp start

sprava1 db 'Zadaj cislo od 1 do 9:$'
crlf db 13,10,'$'

start:
mov ax,cs    ;datovy segment = segment kodu
mov ds,ax
mov es,ax

mov ax,03   ;nastav 80x25
int 10h

mov ah,9
mov dx,sprava1 ;(alebo "mov dx,offset sprava1" pre TASM)
int 21h

rpt:
xor ax,ax
int 16h

cmp ah,2   ;citanie alfanumerickej casti - klavesy pod escape, 1, 2, 3
jb rpt
cmp ah,0Ah   ;citanie scan kodu az po 9
ja rpt

mov al,0 ;kasli na ascii kod

pusha
mov ah,9
mov dx,crlf ;novy riadek
int 21h
popa

dec ah     ;1-9
xor al,al
mov cl,ah
xor ch,ch ;cx = od 1 do 9
mov ax,1 ;vycisti registre :D

kresli:
push ax
push cx
mov cx,ax
mov ah,0Ah
mov al,'*'
int 10h
pop cx
pop ax
cmp ax,cx
je konec
pusha
mov ah,09h
mov dx,crlf
int 21h
popa
inc ax
jmp kresli

konec:
;;;konec. cakaj na lubovolnu klavesu a ukonci
mov ah,09h
mov dx,crlf
int 21h
xor ax,ax
int 16h
int 20h ;konec v DOS COM, v exe daj mov ah, 4Ch int 21h


tak mi to setko ide...cize zadam napr 5 a vypise toto

*
**
***
****
*****

no a toto potrebujem len v TASM


Offline

Skúsený užívateľ
Skúsený užívateľ
TASM hviezdicky

Registrovaný: 11.01.09
Prihlásený: 08.01.25
Príspevky: 1395
Témy: 10 | 10
Bydlisko: Hrinova
NapísalOffline : 17.05.2009 7:04 | TASM hviezdicky

No, pravdupovediac, ja ti nerozumiem :)
Tak do FASM si to vieš napísať, aby ti to šlo, ale do TASM to neprepíšeš? Všimni si zmeny v tvojom prvom kóde a v tomto predchádzajúcom. Vieš prečo to funguje?

Kód:
pusha
...
popa


Register AX uložíž do zásobníka, čím predídeš strátam dát.

Riešenie pre TASM:

Kód:
.MODEL small
.STACK 100h

.DATA

sprava1 db 'Zadaj cislo od 1 do 9:$'
crlf db 13,10,'$'

.CODE

start:
mov ax,@data    ;datovy segment = segment kodu
mov ds,ax
mov es,ax

mov ax,03   ;nastav 80x25
int 10h

mov ah,9
lea dx, sprava1 ;(alebo "mov dx,offset sprava1" pre TASM)
int 21h

rpt:
xor ax,ax
int 16h

cmp ah,2   ;citanie alfanumerickej casti - klavesy pod escape, 1, 2, 3
jb rpt
cmp ah,0Ah   ;citanie scan kodu az po 9
ja rpt

mov al,0 ;kasli na ascii kod

pusha
mov ah,9
lea dx, crlf ;novy riadek
int 21h
popa

dec ah     ;1-9
xor al,al
mov cl,ah
xor ch,ch ;cx = od 1 do 9
mov ax,1 ;vycisti registre :D

kresli:
push ax
push cx
mov cx,ax
mov ah,0Ah
mov al,'*'
int 10h
pop cx
pop ax
cmp ax,cx
je konec
pusha
mov ah,09h
lea dx,crlf
int 21h
popa
inc ax
jmp kresli

konec:
;;;konec. cakaj na lubovolnu klavesu a ukonci

mov ah,09h
lea dx,crlf
int 21h

xor ax,ax
int 16h

mov ax, 4C00h
int 21h   

end start


Offline

Užívateľ
Užívateľ
Obrázok užívateľa

Registrovaný: 16.05.09
Prihlásený: 17.05.09
Príspevky: 3
Témy: 1 | 1
Napísal autor témyOffline : 17.05.2009 12:23 | TASM hviezdicky

velmi pekne dakujem :D


 [ Príspevkov: 5 ] 


TASM hviezdicky



Podobné témy

 Témy  Odpovede  Zobrazenia  Posledný príspevok 
V tomto fóre nie sú ďalšie neprečítané témy.

hviezdičky a windows media player

v Audio programy

3

821

12.08.2006 4:05

xyz

V tomto fóre nie sú ďalšie neprečítané témy.

tasm program

v Assembler, C, C++, Pascal, Java

0

602

16.04.2008 16:43

snapshot

V tomto fóre nie sú ďalšie neprečítané témy.

TASM na NASM

v Assembler, C, C++, Pascal, Java

0

493

15.05.2010 17:20

djkmito



© 2005 - 2025 PCforum, edited by JanoF