Форум программистов, компьютерный форум, киберфорум
Assembler, MASM, TASM
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.78/9: Рейтинг темы: голосов - 9, средняя оценка - 4.78
1 / 1 / 0
Регистрация: 24.02.2013
Сообщений: 41
1

Замена в файле нужного байта. Ассемблер, tasm

10.04.2014, 13:25. Показов 1848. Ответов 3
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Как поменять в файле 10 байт? Программа выводит 10 байт, но не заменяет его
Assembler
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
.model small
org 100h                
.data
fname db 'hello.txt',0
buffer    db 2      
handle    dw ?      
.code
start:
    mov ax, @data
    mov ds, ax
    mov ah,3Dh             
    xor al,al     
    lea dx,fname  
    xor cx,cx       
int 21h   
mov [handle],ax   
mov AH, 42h
mov BX, handle
mov AL, 00 
mov CX, 00
mov DX, 10
    xor al,al 
    lea dx,fname    
repne scasb
    mov byte ptr[bx],'5'
int 21h
  mov ah,3Fh        
    lea dx,buffer      
    mov cx,1       
    int 21h             
lea bx,buffer
    add bx,ax           
    mov byte ptr [bx],'$'    
    mov ah,9
    lea dx,buffer
    int 21h        
close_file:
    mov ah,3Eh      
    mov bx,[handle]   
    int 21h           
exit:
    mov ah,0        
    int 16h        
    mov ax,4C00h        
    int 21h    
end start
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
10.04.2014, 13:25
Ответы с готовыми решениями:

Определить номер заданного байта. Ассемблер, tasm
Можете исправить ошибки, чтобы определял номер заданного байта? .model small .data fname db...

Вывести на экран порядковый номер заданного символа из файла
Как вывести на экран порядковый номер заданного символа из файла?

Копирование файла начиная с 20-го байта во второй
Как изменить программу, чтобы она записывала текст из 1го файла во 2ой с 20 байта, при этом не...

Ассемблер(TASM) переименовать файл
Добрый день уважаемые программисты. Остался последний шаг и программа будет полностью рабочей....

3
Фрилансер
3705 / 2077 / 567
Регистрация: 31.05.2009
Сообщений: 6,683
10.04.2014, 13:50 2
Во превых, код у Вас неправильный.
Строки 22-25 явно не к месту.
Они затрут информацию для int 21h.

Во вторых, чтобы записать в файл, нужно:
1) При открытии файла через int 21h AH=3Dh (Open) установить режим "чтение/запись": AL=2
2) Повторно выполнить int 21h AH=42h (Seek) и подвести указатель к нужному месту
3) Собственно выполнить запись через int 21h AH=40h (Write)
2
1 / 1 / 0
Регистрация: 24.02.2013
Сообщений: 41
10.04.2014, 19:24  [ТС] 3
Цитата Сообщение от Black Fregat Посмотреть сообщение
Повторно выполнить int 21h AH=42h (Seek) и подвести указатель к нужному месту
Как это сделать?)
Assembler
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
.model small
org 100h                
.data
fname db 'hello.txt',0
endline   db 13,10,'$'
buffer    db 2   
handle    dw ?      
.code
start:
    mov ax, @data
    mov ds, ax
    mov ah,3Dh 
    mov Al, 02        
    xor al,al     
    lea dx,fname  
    xor cx,cx       
int 21h   
mov [handle],ax   
    mov AH, 42h
    mov BX, handle
    mov AL, 00 
    mov CX, 00
    mov DX, 9 ; 10-й байт 
    int 21h
mov AH, 42h 
mov BX, handle
mov AL, 00 
mov CX, 00
mov DX, 0 ; на 1-й байт 
int 21h
    mov AH, 40h 
    mov BX, handle
    mov CX, 2 
    lea DX, handle
    int 21h   
mov ah,3Fh        
    lea dx,buffer      
    mov cx,20      
    int 21h  
lea bx,buffer
    add bx,ax           
    mov byte ptr [bx],'$'    
    mov ah,9
    lea dx,buffer
    int 21h     
close_file:
    mov ah,3Eh      
    mov bx,[handle]   
    int 21h           
exit:
    mov ah,0        
    int 16h        
    mov ax,4C00h        
    int 21h    
end start
1
Фрилансер
3705 / 2077 / 567
Регистрация: 31.05.2009
Сообщений: 6,683
10.04.2014, 23:24 4
Лучший ответ Сообщение было отмечено Taatshi как решение

Решение

Вам ведь нужно один и тот же байт сначала считать, потом записать?
Значит, нужно подвести указатель к нужному байту и прочитать.
При чтении указатель сдвинется, его нужно вернуть на то же место и записать.

Последовательность действий должна быть такой:
1) int 21h AH=3Dh (Open)
2) int 21h AH=42h (Seek)
3) int 21h AH=3Fh (Read)
4) int 21h AH=42h (Seek)
5) int 21h AH=40h (Write)
6) int 21h AH=3Eh (Close)

Добавлено через 22 минуты
В общем, примерно так
код здесь

Assembler
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
.model small
.data
fname db 'hello.txt',0
endline   db 13,10,'$'
newbyte   db 'Z'
buffer    db 2 dup (?)   
handle    dw ?      
.stack
.code
start:
    mov ax, @data
    mov ds, ax
    mov AX, 3D02h 
    lea dx, fname  
    xor cx, cx       
    int 21h   
    mov handle, ax   
    
    mov AH, 42h
    mov BX, handle
    mov AL, 00 
    mov CX, 00
    mov DX, 9 ; 10-й байт 
    int 21h
    
    mov ah, 3Fh        
    lea dx, buffer      
    mov cx, 1      
    int 21h  
    
    lea bx, buffer
    add bx, ax           
    mov byte ptr [bx], '$'    
    mov ah, 9
    lea dx, buffer
    int 21h
 
    mov AH, 42h
    mov BX, handle
    mov AL, 00 
    mov CX, 00
    mov DX, 9 ; 10-й байт 
    int 21h
         
    mov AH, 40h 
    mov BX, handle
    mov CX, 1
    push DS
    pop ES 
    lea DX, newbyte
    int 21h 
      
close_file:
    mov ah,3Eh      
    mov BX, handle
    int 21h           
    
exit:
    mov ah, 0        
    int 16h        
    mov ax, 4C00h        
    int 21h    
end start
2
10.04.2014, 23:24
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
10.04.2014, 23:24
Помогаю со студенческими работами здесь

Ввод строки с клавиатуры. Ассемблер, tasm
Ввод строки с клавиатуры функции 3fh, 21 прерывания. Что нужно изменить в данной программе, чтобы...

Вычислить выражение по формуле
Можете подсказать, как сделать? Написать программу вычисления по формуле: y= (a+b)/(c-d)^2. Выдать...

Пересылка массива слов. Ассемблер, tasm
Изменить данную программу в программу для пересылки массива слов. sseg segment db 128 dup(?)...

Программа, подсчитывающая количество единиц. Ассемблер, tasm
Напишите программу, подсчитывающую количество единиц в заданном байте или слове: A DB 01101011B


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru