Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Низкоуровневое программирование > Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 12.11.2011, 05:37   #1
munthrekosh
Пользователь
 
Аватар для munthrekosh
 
Регистрация: 12.11.2011
Сообщений: 80
Восклицание перевод программы с pascal на accемблер

Есть следующий код на паскале:

Код:
var
 str,str2,rstr: string;
 i,j: integer;
begin
  rstr:='array';
 write('--------Vvedite stroku dlinoy d0 100 simvolov i soderjashuyu sochetanie "array".');
 write(' Programa proizvedet zamenu sochetaniya "array" na sochetanie "simple".');
 write('         ');
 write('**str=');
  readln(str);
  i:=1;
  If length(str)>100 then str:=copy(str,1,100);
  while (i<=length(str)) do begin
   j:=1;
   If (length(str)-i)>=4 then
    While str[i+j-1]=rstr[j] do Inc(j);
   If j>5 Then begin
    str2:=str2+'simple';
    i:=i+5;
   end else begin
    str2:=str2+str[i];
    Inc(i);
   end;
  end;
 write('--------Na vihode poluchili stroku s sochetanirm "simple" vmesto "array"');
 write('        ');
 write('**str2=');
  writeln(str2);
 write('--------Najmite klavishu "Enter" dlya vihoda iz programmi');
  readln;
end.
Его необходимо перевести на ассемблер... Сделал я это самостоятельно, но так как опыту у меня не много, программа на ассемблере (masm32 v10) не работает. Она должна в веденной строке заменять сочетание 'array' на сочетание 'simple'. Ограничение на ведённоую строку 100 символов. Код у меня получился следующий:

Код:
.MODEL tiny
.486p
.code
 assume cs:@code, ds:@code, es:@code, ss:@code
 ORG 100h
begin:
 lea sp,end_pr
 mov bx,(end_pr-begin+10Fh)/16
 mov ah,4Ah
 INT 21h

 mov ah, 0ah
 lea dx,input_str
 INT 21h
 
 xor ch,ch
 mov si,dx
 inc si
 mov cl,[si]
 inc si
 mov len_is,cx
 
 xor ah,ah
 mov al,1
 push ax

 CMP ax,cx
 JBE W1
 JMP eW1
W1: CMP ax,cx
    JA eW1
    mov cx,len_is
    pop ax
    SUB cx,ax
    CMP cx,4
    push ax

    JB e1
    xor bh,bh
    mov bl,1
    push bx
    lea si,input_str
    pop bx
    pop ax
    xor ah,ah
    add si,ax
    xor bh,bh
    add si,bx
    push ax
    push bx
    lea di,rstr
    cld
    cmpsb
    JE W2
    JMP eW2

    W2: cld
        cmpsb
        JNE eW2
        xor bh,bh
        INC bl
        JMP W2

    eW2:
    e1:
    xor bh,bh
    CMP bl,5
    JBE e2

    
    lea si,sstr
    lea di,str2
    cld
    xor ch,ch
    mov cl,len_sstr
    rep movsb
    add ax,5
    push ax

    e2:
    lea si,input_str
    pop ax
    xor ah,ah
    add si,ax    
    push ax
    lea di,str2
    cld
    movsb
    pop ax
    xor ah,ah
    INC al 
    push ax 
    JMP W1

eW1:
mov AH, 09h
lea dx,str2
INT 21h

mov AH,0h
INT 16h

mov AH,4ch
INT 21h

rstr db 'array'
sstr db 'simple'
len_sstr=$-sstr
str2 db 141 dup(?),13,10,'$'
input_str db 101,?,101 dup(?)
len_is dw ?
 DW 64 DUP(0)
end_pr=$
end begin
Помогите плз найти ошибки... Только общая картина должна остаться такой же, т.е. помогите поменять только несущие элементы, не трогайте формат, расположение данных, прерывания и т.д


________
Код нужно оформлять по правилам:
тегом [CODE]..[/СODE] (это кнопочка с решёточкой #)
Не забывайте об этом!
Модератор.
Ш.Р.Ю.-программист! йопта!!!

Последний раз редактировалось Serge_Bliznykov; 12.11.2011 в 19:48.
munthrekosh вне форума Ответить с цитированием
Старый 12.11.2011, 14:21   #2
anyx
Форумчанин
 
Регистрация: 10.09.2009
Сообщений: 352
По умолчанию

Компилируешь в GNU Pascal Compiler с опцией --save-temps, он сохраняет ассемблерный листинг (для ассемблера GAS). Хотя GPC морально устарел, поэтому лучше почитай мануал по Free Pascal, там наверняка есть что-то подобноe. Если обязательно для MASM/TASM, то потом исходник на GAS несложно вручную на перевести.

Ещё вариант - дизассемблирование полученного бинарного файла. Но, как я понимаю, нужен DOS'овский дизассемблер.

Последний раз редактировалось anyx; 12.11.2011 в 14:24.
anyx вне форума Ответить с цитированием
Старый 12.11.2011, 14:39   #3
munthrekosh
Пользователь
 
Аватар для munthrekosh
 
Регистрация: 12.11.2011
Сообщений: 80
По умолчанию

Именно DOS! Сей час попробую GPC...
Ш.Р.Ю.-программист! йопта!!!
munthrekosh вне форума Ответить с цитированием
Старый 12.11.2011, 16:25   #4
munthrekosh
Пользователь
 
Аватар для munthrekosh
 
Регистрация: 12.11.2011
Сообщений: 80
По умолчанию

НИхрена не понимаю.....
Ш.Р.Ю.-программист! йопта!!!
munthrekosh вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
перевод программы с Pascal на Java christa Помощь студентам 1 23.09.2011 19:53
Перевод программы с Pascal в C++ !!! !! ProgFrog Помощь студентам 0 09.04.2011 14:21
Перевод программы с Pascal на QBasic Андрюха_ЕШКО Помощь студентам 1 17.03.2011 22:03
Перевод программы с Pascal в C++ GoodSpirit Помощь студентам 4 19.05.2010 18:04