Заменить символы «с» на «е» - Assembler
Формулировка задачи:
Товарищи! HELP!
Разработать программу вывода строковых данных в файл. Строка вводится с клавиатуры, во введенной строке выполнить замену символов, и вывести результирующую строку в файл.
Так вот запускаю, а программа выдаёт "Error! Could not handle file $" если файл существует пустой, или если файла нет вообще то и ничего не записывает.
в чём проблема? и что нужно исправить?
data segment msg db 255, 0, 255 dup ('$'), '$' file_name db 'C:\output.txt',0 error_msg db 'Error! Could not handle file $' msg_size db 0 handler dw 0 data ends code segment assume cs:code, ds:data read_from_keyboard proc mov ah, 0ah lea dx, msg int 21h ret read_from_keyboard endp replace_5 proc mov si, offset msg + 2 ; move to register si offset of msg's ; data (we do not need first 2 bytes) mov al, [si] ; move current (first) symbol from pointer si ;to register al met: cmp al, 'c' ; compare current symbol with 'c' jne skip ; if current symbol is not equal to 'c' then ; go to skip label mov al, 'e' mov [si], al ; change current symbol to 'e' skip: inc si ; go to the next symbol mov al, [si] ; move current symbol from pointer si ;to register al cmp al, '$' ; compare current symbol with '$' jne met ;if current symbol is not equal to '$' then ;go to met label ret replace_5 endp print_error proc ;write error mov ah, 09h lea dx, error_msg int 21h ret print_error endp handle_file proc ;create file mov ah, 3ch xor cx, cx ; cx = 0 lea dx, file_name int 21h jc error_file ;check if error occured mov handler, ax ;write to file mov ah, 40h mov bx, handler xor cx, cx ; cx = 0 mov cl, [msg_size] ; number of bytes to write lea dx, msg + 2 int 21h jc error_file ;check if error occured cmp ax, cx jne error_file ;check if string is completely written to file ;close file mov ah, 3Eh mov bx, handler int 21h jc error_file ;check if error occured ret error_file: call print_error ret handle_file endp start: mov ax, ax mov bx, data mov ds, bx ;read string from keybord call read_from_keyboard ;get msg size lea si, msg + 1 mov al, [si] mov msg_size, al ; first 2 bytes of msg is max length and length, ; we do not need this data anymore ; change second byte to new line symbol and ; don't use first byte mov msg + 1, 0ah; change second byte to new line symbol call replace_5 ;write result to file call handle_file mov ah, 4ch int 21h code ends end start
Решение задачи: «Заменить символы «с» на «е»»
textual
Листинг программы
start: mov ax,ax mov ax,ax mov ax,ax mov ax,ax mov ax,ax mov ax,ax mov ax,ax mov ax,ax mov ax,ax
Объяснение кода листинга программы
- Создаётся метка
start
. - Загружается значение из регистра
ax
в регистрax
. - Загружается значение из регистра
ax
в регистрax
. - Загружается значение из регистра
ax
в регистрax
. - Загружается значение из регистра
ax
в регистрax
. - Загружается значение из регистра
ax
в регистрax
. - Загружается значение из регистра
ax
в регистрax
. - Загружается значение из регистра
ax
в регистрax
. - Загружается значение из регистра
ax
в регистрax
. - Загружается значение из регистра
ax
в регистрax
. Как видно, данный код просто загружает значение из регистраax
в регистрax
несколько раз.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д