Форум программистов, компьютерный форум, киберфорум
Наши страницы
Assembler, MASM, TASM
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.71/7: Рейтинг темы: голосов - 7, средняя оценка - 4.71
Gepar
1182 / 538 / 77
Регистрация: 01.07.2009
Сообщений: 3,517
1

Добавить вывод данных в код программы

11.06.2010, 20:21. Просмотров 1330. Ответов 4
Метки нет (Все метки)

Я в asm'е дуб-дубом потому прошу помощи. Вот что есть :
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
;---------------------------------------------
; Лабораторная работа № 1
;---------------------------------------------
; Напишите программу, которая присоединяет 
; исходную строку в конец строки-получателя.
; Для присоединения исходной строки 
; перед объединением должно быть обеспечено 
; достаточно места в строке-получателе. 
; Выведите исходную строку до и после объединения.
;---------------------------------------------
    .model small
    .data
 
; ---- Обрабатываемые строки
 
str1    db  'This is a string',0
str2    db  'And this is a string too',0
buffer  db  0, 512 dup (?)
 
    .stack 256
    .code
start:
    mov ax, @data
    mov ds, ax
    mov es, ax
 
; ---- копирование результирующей строки в буфер для обеспечения места
 
    mov si, offset str1     ; входная строка - в ds:si
    mov di, offset buffer   ; пустой выходной буфер - в es:di
 
copy_loop:              ; начало цикла (метка)
    lodsb               ; загружаем в ax байт из ds:si + приращение si
    stosb               ; сохраняем байт из ax в es:di + приращение di
    cmp al, 0           ; проверяем признак конца строки - нулевой символ
    jnz copy_loop       ; продолжаем, если нет
 
; ---- присоединение строки в буфер для обеспечения места
 
    mov si, offset str2     ; вторая строка - в ds:si
    mov di, offset buffer       ; выходной буфер с первой строкой - в es:di
    
    mov     al, 0           ; подготавливаемся к сканированию
    mov cx, 0ffffh      ; счетчик на максисум - будем искать ноль
    repnz   scasb           ; сканируем, пока не ноль (с приращением di)
    dec di          ; откатим di на один символ - как раз к нулю
 
app_loop:               ; начало цикла (метка)
    lodsb                           ; загружаем в ax байт из ds:si + приращение si
    stosb                           ; сохраняем байт из ax в es:di + приращение di
    cmp al, 0                   ; проверяем признак конца строки - нулевой символ
    jnz app_loop                ; продолжаем, если нет
                                
    mov ax, 4c00h       ; ah = 4c - функция terminate, al = 0 - код возврата
    int 21h                     ; прерывание DOS Services
 
    end start
Надо добавить вывод строки в начале и в конце чтобы был виден уже результат . Код вроде как нормальный потому как компилировать в exe у меня получаеться, а вот если я пытаюсь добавить вывод то у меня сразу же появляеться куча ошибок , вижу asm не моё. Заранее большое спасибо.
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
11.06.2010, 20:21
Ответы с готовыми решениями:

Вывод всех файлов и поддиректорий в заданной директории (добавить в код ввод директории)
.586p .model flat, stdcall std_output_handle equ -11 std_input_handle equ -10 extern...

Вывод системного времени (прокомментируйте код программы)
совсем недавно начала изучать ассемблер. кто может проккоментируйте пожалуйста все строчки с...

Добавить в код вывод в файл
Напишите, пожалуйста, код на C++ с выводом в файл, если нужно, то вот мой код #include...

Добавить код во время выполнения программы
Возможно ли к программе подключать некоторые модули с кодом(заранее не откомпилированные) по мере...

Добавить в код программы обработку исключительных ситуаций
Помогите добавить в код программы обработку исключительных ситуаций, которые могут возникнуть в...

4
airyashov
69 / 74 / 0
Регистрация: 15.12.2008
Сообщений: 302
11.06.2010, 22:04 2
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
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
;---------------------------------------------
; Лабораторная работа № 1
;---------------------------------------------
; Напишите программу, которая присоединяет 
; исходную строку в конец строки-получателя.
; Для присоединения исходной строки 
; перед объединением должно быть обеспечено 
; достаточно места в строке-получателе. 
; Выведите исходную строку до и после объединения.
;---------------------------------------------
        .model small
        .data
 
; ---- Обрабатываемые строки
 
str1    db      'This is a string',0
str2    db      'And this is a string too',0
buffer  db      0, 512 dup (?)
 
        .stack 256
        .code
start:
        mov     ax, @data
        mov     ds, ax
        mov     es, ax
 
; ---- копирование результирующей строки в буфер для обеспечения места
 
        mov     si, offset str1         ; входная строка - в ds:si
        mov     di, offset buffer       ; пустой выходной буфер - в es:di
    mov cx,-1
copy_loop:                              ; начало цикла (метка)
        lodsb                           ; загружаем в ax байт из ds:si + приращение si
        stosb                           ; сохраняем байт из ax в es:di + приращение di
    inc cx
        cmp     al, 0                   ; проверяем признак конца строки - нулевой символ
        jnz     copy_loop               ; продолжаем, если нет
 
 
    mov ax,4000h
    mov bx,1
    mov dx,offset buffer
    int 21h
    push cx
 
 
 
; ---- присоединение строки в буфер для обеспечения места
 
        mov     si, offset str2         ; вторая строка - в ds:si
        mov     di, offset buffer       ; выходной буфер с первой строкой - в es:di
        
        mov     al, 0                   ; подготавливаемся к сканированию
        mov     cx, 0ffffh              ; счетчик на максисум - будем искать ноль
        repnz   scasb                   ; сканируем, пока не ноль (с приращением di)
        dec     di                      ; откатим di на один символ - как раз к нулю
 
    pop cx
app_loop:                               ; начало цикла (метка)
        lodsb                           ; загружаем в ax байт из ds:si + приращение si
        stosb                           ; сохраняем байт из ax в es:di + приращение di
    inc cx
        cmp     al, 0                   ; проверяем признак конца строки - нулевой символ
        jnz     app_loop                ; продолжаем, если нет
 
    mov al,13
    int 29h
    mov al,10
    int 29h
    
    mov ax,4000h
    dec cx
    int 21h
                               
        mov     ax, 4c00h               ; ah = 4c - функция terminate, al = 0 - код возврата
        int     21h                     ; прерывание DOS Services
 
        end     start
1
Gepar
1182 / 538 / 77
Регистрация: 01.07.2009
Сообщений: 3,517
11.06.2010, 23:50  [ТС] 3
airyashov, большое спасибо. Блок-схему нарисовал, попытаюсь понять подробнее что же делает каждая комманда и буду сдавать лабу.

Добавлено через 1 час 7 минут
Стоп, там вывод из начальных данных только первой строки, а надо и вторую. Что надо дописать ?
0
airyashov
69 / 74 / 0
Регистрация: 15.12.2008
Сообщений: 302
12.06.2010, 23:23 4
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
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
;---------------------------------------------
; Лабораторная работа ь 1
;---------------------------------------------
; Напишите программу, которая присоединяет 
; исходную строку в конец строки-получателя.
; Для присоединения исходной строки 
; перед объединением должно быть обеспечено 
; достаточно места в строке-получателе. 
; Выведите исходную строку до и после объединения.
;---------------------------------------------
        .model small
        .data
 
; ---- Обрабатываемые строки
 
str1    db      'This is a string',0
str2    db      'And this is a string too',0
buffer  db      0, 512 dup (?)
 
        .stack 256
        .code
start:
        mov     ax, @data
        mov     ds, ax
        mov     es, ax
 
; ---- копирование результирующей строки в буфер для обеспечения места
 
        mov     si, offset str1         ; входная строка - в ds:si
        mov     di, offset buffer       ; пустой выходной буфер - в es:di
    mov cx,-1
copy_loop:                              ; начало цикла (метка)
        lodsb                           ; загружаем в ax байт из ds:si + приращение si
        stosb                           ; сохраняем байт из ax в es:di + приращение di
    inc cx
        cmp     al, 0                   ; проверяем признак конца строки - нулевой символ
        jnz     copy_loop               ; продолжаем, если нет
 
 
    mov ax,4000h
    mov bx,1
    mov dx,offset buffer
    int 21h
    push cx
 
 
 
; ---- присоединение строки в буфер для обеспечения места
 
        mov     si, offset str2         ; вторая строка - в ds:si
        mov     di, offset buffer       ; выходной буфер с первой строкой - в es:di
        
        mov     al, 0                   ; подготавливаемся к сканированию
        mov     cx, 0ffffh              ; счетчик на максисум - будем искать ноль
        repnz   scasb                   ; сканируем, пока не ноль (с приращением di)
        dec     di                      ; откатим di на один символ - как раз к нулю
  
 
    pop cx
    xor bp,bp
app_loop:                               ; начало цикла (метка)
        lodsb                           ; загружаем в ax байт из ds:si + приращение si
        stosb                           ; сохраняем байт из ax в es:di + приращение di
    inc cx
    inc bp
        cmp     al, 0                   ; проверяем признак конца строки - нулевой символ
        jnz     app_loop                ; продолжаем, если нет
 
    mov al,13
    int 29h
    mov al,10
    int 29h
    
    mov ax,4000h
    xchg cx,bp
    mov dx,offset str2
    int 21h
 
 
    mov al,13
    int 29h
    mov al,10
    int 29h
    
    mov ax,4000h
    xchg cx,bp
    mov dx,offset buffer
    int 21h
                               
        mov     ax, 4c00h               ; ah = 4c - функция terminate, al = 0 - код возврата
        int     21h                     ; прерывание DOS Services
 
        end     start
1
Gepar
1182 / 538 / 77
Регистрация: 01.07.2009
Сообщений: 3,517
13.06.2010, 12:57  [ТС] 5
airyashov, я тогда вывод уже добавил, но всё равно спасибо
0
13.06.2010, 12:57
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
13.06.2010, 12:57

Добавить в код вывод чисел строки в порядке возрастания
Нужно добавить в этот код вывод чётных чисел в порядке возрастания #include <iostream> #include...

Как добавить скомпилированный код (класс) в К.(К.) во время выполнения программы?
...кто знает? Можно рассмотреть два варианта: вставить код ПО УСЛОВИЮ после создания объекта в...

Добавить в код сохранение данных с помощью сериализации
Помогите. Нужно расширить код(проект) с интерфейсом для возможности сохранения / чтения данных в /...


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

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2019, vBulletin Solutions, Inc.
Рейтинг@Mail.ru