Strona 1 z 1

mały problem z konkatenacja pod asemblerem

: czw 20 paź 2005, 22:11
autor: mariuszxxx677
mam mały problem z programowanie pod asemblerem i prosiłbym o jakąs mała wskazówke w czym popełniam błąd. otóz napisałem coś takiego:
.model small

DANE SEGMENT

Napis1 db "To jest pierwszy napis",13,10,'$'
DL_NAPIS1 EQU 20
Napis2 db "To jest drugi napis",13,10,'$'
DL_NAPIS2 EQU 25
Napis3 db DL_NAPIS1 + DL_NAPIS2 DUP (?)
DANE ENDS

Kod SEGMENT
ASSUME CS:Kod, DS:DANE, SS:Stosik

start: mov ax, SEG DANE
mov ds, ax
mov si, OFFSET Napis1
mov di, OFFSET Napis2
mov cx, DL_NAPIS1

Petla1:
mov ah, [si]
mov [bx], ah
inc si
dec di
loop Petla1

mov si, OFFSET Napis1
mov cx, DL_NAPIS2

Petla2:
mov [di], al
mov al, [di]
dec si
loop Petla2
inc di

mov ah, 09h
mov dx, OFFSET Napis3
int 21h

mov ax, 4C00h
int 21h

Kod ENDS
Stosik SEGMENT
db 100h DUP (?)
Stosik ENDS
END Start



Chciałem zeby prog ten zliczał konkatenacje dwóch tekstów o danych wielkosciach ale niestety nie udaje mi sie tego zrobić.Znaczy prog sie kompiluje ale jak wyswietla mi tekst to są to znaki takiego typu: $^& itp z których nic nie odczytuje..powiedzcie mi w czym zrobuiłem błąd??

: pt 21 paź 2005, 11:44
autor: movzx
1) Napisy ujmuje sie w ' ... ' a nie " ... "
2) Troche przerobilem, zreszta mozna porownac :)

.model small

DANE SEGMENT

Napis1 db 'To jest pierwszy napis',13,10,'$'
DL_NAPIS1 EQU 25
Napis2 db 'To jest drugi napis',13,10,'$'
DL_NAPIS2 EQU 22
Napis3 db DL_NAPIS1 + DL_NAPIS2 DUP (?)
DANE ENDS

Kod SEGMENT
ASSUME CS:Kod, DS:DANE, SS:Stackseg

start:
mov ax, SEG DANE
mov ds, ax
push ds
pop es

mov si, OFFSET Napis1
mov di, OFFSET Napis3
mov cx, DL_NAPIS1
cld

repne movsb

mov si, OFFSET Napis2
sub di,3
mov cx, DL_NAPIS2
cld

repne movsb

sub di,3
mov ah,'$'
mov [di],ah

mov ah, 09h
mov dx, OFFSET Napis3
int 21h

mov ax, 4C00h
int 21h

Kod ENDS
Stackseg SEGMENT
db 100h DUP (?)
Stackseg ENDS
END Start

: pt 21 paź 2005, 14:21
autor: mariuszxxx677
Stary wielkie dzieki za pomoc..Wszystko chodzi jak tralala:)) P.S. Nie chce sie kłócić ale napisy również pozna ujmować w " " ..jeszcze raz dzieki i pozdroo:))

: pt 21 paź 2005, 15:17
autor: Gość
a jeszcze mam takie małe pytanko:
dlaczego w: sub di,3 jest 3 a nie jakas inna cyfra??

: pt 21 paź 2005, 22:43
autor: movzx
Coz, ujete w "" nie dzialaly, przynajmniej u mnie.
Jest 3 bo "koncowka" napisu (13,10,'$') ma 3 bajty.
Rownie dobrze mozna odjac 3 od stalych oznaczajacych dlugosc napisu - i wyrzucic sub. Ale wtedy koncowy '$' w napis3 sie nie zmiesci (bo dlugosc napis3 to suma dlugosci napis1 i napis2)
Pozdr.

: pt 21 paź 2005, 23:51
autor: Gość
oki juz teraz wszystko jasne..dzieki za chwile uwagi i pozdro