Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Asm: Общие вопросы > help please


Автор: Nestap 17.11.2009, 15:29
привет всем,

что тут не провельно?
еррор нету..

дожен быть такой резултат :

S3="AB123C"


Код

.MODEL    SMALL
.STACK    100h
.DATA 
         S1 DB 3,"ABC"
         S2 DB 3,"123"
         S3 DB 6 DUP(?)
         I DB 2 ; eto index o kuda doljen s2 stavitsa
.CODE
      start:
               mov  ax,@data
               mov  ds,ax
               mov  es,ax
               mov  bx,1
       
mov si,OFFSET S1
mov di,OFFSET S3
mov cx,3
inc si
push bx
mov bx,offset I; vot I
muta:
mov al,[si]
mov [di],al
inc si
inc di
cmp di,si
jz next
loop muta
next:
push si
mov si, offset S2
inc si
muta1:
mov al,[si]
mov [di],al
inc si
inc di
loop muta1
muta2:
pop si
mov al,[si]
mov [di],al
inc si
inc di
loop muta2

pop bx
mov  dx,OFFSET S3
mov  ah,40h
mov cx,6
int  21h 
   END  start

Автор: Pitlord 17.11.2009, 16:26
А зачем стоят inc si на 18-й и 32-й строчках? Зачем нужен код на 26-й и 27-й строчках (по-моему, условие там никогда не выполнится)? Перед циклом muta1 в CX Вы вроде бы должны снова указать количество loop'ов (равно как и перед muta2).

Я язык ассемблера уже плохо помню, так что извините, если что не так.

Автор: Nestap 17.11.2009, 18:36
Pitlord, 

18 i 32 doljni stob pereiti c "ABC" i "123"

         S1 DB 3,"ABC"
         S2 DB 3,"123"

esli bez inc si togda on pervii raz budet  3 i 3 a eta LENGTH S1 i S2

a stroka 26 27 
eta cmp dlea tavo stob srovniti s I

  I DB 2 ; eto index o kuda doljen s2 stavitsa


Автор: Pitlord 17.11.2009, 19:21
Цитата(Nestap @  17.11.2009,  18:36 Найти цитируемый пост)
eta cmp dlea tavo stob srovniti s I

Что сравнить с I? У Вас там сравнение DI с SI.

Мне кажется, первая ошибка на 17-й строке, там должно быть типа
Код

MOV CX, [I]

т.е. сначала скопировать в S3 первые I символов.

Потом, думаю, перед 33-й строкой должно быть типа
Код

MOV CX, 3

т.е. Вы копируете S2 в S3

И, наконец, перед 39-й должно быть 
Код

XOR CX, CX
MOV CL, [S1]
SUB CL, [I]

т.е. длина S1 минус индекс

Вроде как-то так, но возможности проверить сейчас нет.

Автор: Nestap 17.11.2009, 23:16
Pitlord, 


ups

doljen biti :


cmp si,bx

20 : mov bx,offset I; vot I 

a etot cod:

Код

XOR CX, CX ; clear cx
MOV CL, [S1] ; copy s1 to cl ?
SUB CL, [I] ; i eta shto dast? eta v цыкл весь код?

Автор: Pitlord 18.11.2009, 19:14
Цитата(Nestap @  17.11.2009,  23:16 Найти цитируемый пост)
cmp si,bx

Это бессмыслица какая-то. Зачем сравнивать SI с адресом, где лежит значение индекса?

Цитата(Nestap @  17.11.2009,  23:16 Найти цитируемый пост)
i eta shto dast? eta v цыкл весь код?

Изучите что такое 
Код

LOOP метка

В CX перед циклом должно лежать количество итераций (повторений) цикла.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)