1 Востаннє редагувалося Mehboris (31.03.2013 15:56:13)

Тема: ассемлер Продублювати

Допоможіть будь-ласка зробити програму на асемблере:"Продублювати в файлі перше і останнє слово в кожному рядку". Буду вдячний.

2

Re: ассемлер Продублювати

напрацювання?

Подякували: Mehboris1

3 Востаннє редагувалося Mehboris (31.03.2013 18:51:14)

Re: ассемлер Продублювати

Я працював з книжкою Тома Свона, використовуючи його процедури для виконання поставленого завдання, але нічого не добився. Процедури опираютьcя одна на одну, куча тексту і ніякої користі((((

Прихований текст

IDEAL
MODEL
small
STACK 256

Taillen EQU 0080h
CommandTail EQU 0081h
cr EQU  13
If EQU 10

 
DATASEG
exCode  DB    0
inFile     DW    0
outFile   DW    0
oneByte DB    0

params db 128 dup(?)
Prompt   db  cr, if ,' Стереть этот файл?(У/п)' , 0
diskFul    db cr, if ,' **Ошибка: Диск полон' , 0

CODESEG


Start:

    mov    ax, @data
    mov    es, ax
    call    GetParams
    call    ParamCount
    cmp    dx, 2
    je    @@10
    mov    di, offset notes
    call    StrWrite
    jmp    Exit
@@10:
    xor    cx, cx
    call    GetOneParam
    mov     dx, di
    xor    al, al
    mov    ah, 3Dh
    int    21h
    jnc    @@20
    jmp    Errors

@@20:
   
    mov     [inFile], ax
    mov    cx, 1
    call    GetOneParam
    mov    dx, di
    call    FileExists
    jc    @@30
    call    StrWrite
    call    Confirm
    je    @@30
    jmp    Exit

@@30'
    mov    cx, 1
    calI    GetOneParam
    mov    dx, di
    xor    cx, cx
    mov    ah, 3Ch
    int    21h
    jnc    @@40
    jmp    Errors
@@40:
    mov    [outFile], ax


@@50:
    mov ah, 3Fh
    mov bx, [inFile]
    mov    cx, 1
    mov    dx, offset oneByte
    int    21h
    j nc    @@60
    jmp    Errors
@@60:
    or    ax, ax
    jz    @@80
    mov    ah, 40h
    mov    bx, [outFile]
    mov    cx, 1
    mov    dx, offset oneByte
    int    21h
    jnc    @@70
    jmp    Errors
@@70:
    or    ax, ax
    j nz    @@50

    mov di, offset diskFul
    call StrWrite

@@80:
    mov    bx, [inFile]
    mov    ah, 3Eh
    int    21h
    mov    bx, [outFi le]
    mov    ah, 3Eh
    int    21h
    jnc    Exit
    jmp    Errors
    Exit:
    mov    ah, 04Ch
    mov    al, [exCode]
    int    21h

Errors:
    mov    [exCode], a I
    call    DiskErr
    jmp    Exit

PROC FileExists
    xor al, al
    mov ah, 3Dh
    int 21h
    jc    @@99
    mov bx, ax
    mov ah, 3Eh
    int 21h
    clc
@@99:
    ret
ENDP FileExists

PROC Confirm
    mov    di, offset Prompt
    call    StrWrite
    mov    ah, 1
    int    21 h
    cmp    al, 'Y'
    je    @@99
    cmp    al, 'y'
    je    @@99
    cmp    al, 'N'
    je    @@20
    cmp    al, ' n'
    jne    Confirm
@@20:
    cmp    al, '@'
@@99:
    ret   
ENDP Confirm
END Start

4

Re: ассемлер Продублювати

Ви його навіть не запускали, бо навіть передрати не можете по-людські:

call    GetParams
    call    ParamCount
    cmp    dx, 2
    je    @@10
    mov    di, offset notes

Where are GetParams, ParamCount, notes?

Подякували: Mehboris1

5

Re: ассемлер Продублювати

Дуже багато процедур в тексті, я не можу скласти загальну картину алгоритму. Якщо хтось знає як, напишіть будь-ласка алгоритм, як вона буде працювати.

6

Re: ассемлер Продублювати

Добре, допоможу з розумінням цієї програми. Але зараз вона ніяк не буде працювати, бо процедур  GetParams, ParamCount не вистачає. Є лише виклики!
Ви маєте довідник з функцій МС-ДОС?

Подякували: Mehboris1

7

Re: ассемлер Продублювати

ні
але я можу скинуть ці процедури, але ці процедури спираються на ще одні процедури

8

Re: ассемлер Продублювати

Спочатку прочитайте це і це. Напишіть самостійно Hello, Replace! й розберіться як компілювати, лінкувати MASM файли.

Подякували: Mehboris, miroslav.chandler3

9

Re: ассемлер Продублювати

це і це я прочитав, наскільки мені дозволила моя англійська. Компілювати і лінкувати asm файли я вмію, про "Hello, Replace!" я не зрозумів.

10

Re: ассемлер Продублювати

Mehboris написав:

про "Hello, Replace!" я не зрозумів.

Якщо Вам не подобається Replace - пишіть "Hello world" =)

Подякували: Mehboris1

11

Re: ассемлер Продублювати

Тобто просто вивести повідомлення на екран?

12

Re: ассемлер Продублювати

Так. Важливо, щоб ви зрозуміли як звертатися до сервісів(функцій) МС-ДОС та асемблювати/лінкувати джерельні тексти.

Подякували: Mehboris1

13

Re: ассемлер Продублювати

Наче так:

Прихований текст

ideal
model small
stack 256

    dataseg

ss1 db 'Hello, Replace$'       
    codeseg

startt:
    mov ax,@data
    mov ds,ax
                       
    mov ah,09h
    mov dx,offset ss1
    int 21h

exit:
    mov ah,04ch
    int 21h

    end startt

14

Re: ассемлер Продублювати

Ви вірно передрали написали для TASM. Ви ж ТАСМом користуєтесь?
А тепер зробіть завдання трохи складніше (все по вашій темі) - відкрийте файл readme.txt, зчитайте його зміст у буфер і виведіть на екран.
Функція відкриття файлу

Подякували: Mehboris1