Форум программистов, компьютерный форум, киберфорум
Наши страницы
Assembler для начинающих
Войти
Регистрация
Восстановить пароль
 
Алексей1706
0 / 0 / 0
Регистрация: 19.10.2015
Сообщений: 7
1

Обнуления массива слов

13.05.2016, 13:39. Просмотров 325. Ответов 4
Метки нет (Все метки)

Задание такое:
Написать программу обнуления массива слов длинною 100 элементов, используя все возможные режимы адресации.
Написал код:
Assembler
1
2
3
4
5
6
7
8
9
10
11
12
13
14
data segment
massiv dw 1,-2,3,4,5,6,7,8,9
data ends
code segment
assume es:data, cs:code
start:
push ds
pop es
lea di,massiv
xor ax,ax
mov ax,3
int 10h
code ends
end start
Подскажите, пожалуйста, правильно ли я написал код? И почему когда я в dos-box'е tlink этого кода то выбивает Warning: No stack?
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
13.05.2016, 13:39
Ответы с готовыми решениями:

Макрос обнуления одного или нескольких регистров
Поставили задачу на изучение макроопределений. Если я правильно понял то вид макроса - ...

Макрокоманда обнуления ячеек с адресами POINT1-POINT2
Написать макрокоманду обнуления ячеек с адресами POINT1-POINT2. Скиньте пожалуйста решение или...

Составить процедуру обнуления всех положительных элементов массива
Составить процедуру обнуления всех положительных элементов в одномерном массиве A. С помощью этой...

Удалить все повторяющиеся элементы путём обнуления их значений и смещения в конец массива.
Создать массив размерностью N (описать константу и задать размер по умолчанию равный...

Написать процедуру для обнуления элементов тех строк массива, которые содержат значение, равное общему максимальному.
Задан двумерный целочисленный массив F размером 9 на 9 элементов. Написать процедуру для обнуления...

4
Charles Kludge
Клюг
7647 / 3162 / 383
Регистрация: 03.05.2011
Сообщений: 8,382
13.05.2016, 14:25 2
Цитата Сообщение от Алексей1706 Посмотреть сообщение
tlink этого кода то выбивает Warning: No stack?
Потому что лучше использовать упрощенный стиль оформления проги, тогда и про стек упоминание можно вставить:
Assembler
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
.model small
.386
.stack
.data
massiv dw 1,-2,3,4,5,6,7,8,9
arr_sz  = ($-massiv)/2
.code
start:
    mov ax, @data
    mov ds, ax
    mov es, ax
    lea di, massiv
    mov cx, arr_sz
    xor ax,ax
    rep stosw
    mov ax,4c00h
    int 21h
end start
. К тому же такой стиль понимают masm/tasm/wasm/jwasm.
0
Max00766
1 / 1 / 1
Регистрация: 20.10.2015
Сообщений: 246
13.05.2016, 14:31 3
Нашел такой код, подскажите подходит он для моего задания?
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
two segment
s_s dw 1,2,3,9,9,9,3,4,2,2
len=$-s_s
two ends
 
fir segment
assume cs:fir
begin_:
    mov ax,two
    mov ds,ax
    mov es, ax
    lea di,s_s
    mov si, di
    mov cx, len
    push cx
    xor ax, ax
    rep stosb    ;обнуление
    pop cx
lop:
    mov al, [si]
    call OutInt
    mov al, ' '
    int 29h
    inc si
    loop lop
 
     xor ax, ax
     int 16h
    mov ax,4c00h
    int 21h
    
OutInt proc
    push ax
    push dx
    push bx
    push cx
    push di
    
    test ax, ax
    jns oi1
    mov di, 1
    neg ax
oi1:
    xor cx, cx
    mov bx, 10
oi2:
    xor dx, dx
    div bx
    add dx, '0'
    push dx
    inc cx
    test ax, ax
    jne oi2
    
    mov ah, 2
    cmp di, 1
    jne oi3
    mov dl, '-'
    int 21h
oi3:
    pop dx
    int 21h
    loop oi3
    
    pop di
    pop cx
    pop bx
    pop dx
    pop ax
    ret
OutInt endp
fir ends
end begin_
Добавлено через 1 минуту
Charles Kludge,
Assembler
1
2
3
4
.model small
.386
.stack
.data
А что означают эти строки? Просто в ассемблере недавно и впервые такую запись вижу

Добавлено через 2 минуты
Charles Kludge, И это не понимаю что:
Assembler
1
arr_sz  = ($-massiv)/2
0
Charles Kludge
Клюг
7647 / 3162 / 383
Регистрация: 03.05.2011
Сообщений: 8,382
13.05.2016, 15:57 4
Assembler
1
2
3
4
5
6
7
8
.model small    ; модель памяти - маленькая: один сегмент кода и один сегмент данных
        ; ну и сегмент стека
.386        ; набор команд под 386 процессор
.stack      ; объявляем сегмнт стека размером в 256 байт
.data       ; объявляем сегмент данных
massiv dw 1,-2,3,4,5,6,7,8,9
arr_sz  = ($-massiv)/2  ; размер массива в словах(DW): (текущий адрес минус адрес
    ; начала массива) делённый на 2(размер слова в байтах)
0
proc3nt
волшебник
947 / 520 / 156
Регистрация: 26.05.2012
Сообщений: 1,471
13.05.2016, 19:36 5
Цитата Сообщение от Max00766 Посмотреть сообщение
mov al, [si]
call OutInt
внутри процедуры проверяется весь регистр ax на знак. так что перед вызовом надо расширить регистр al
Assembler
1
2
3
mov al, [si]
cbw
call OutInt
0
13.05.2016, 19:36
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
13.05.2016, 19:36

Дан массив слов. Определить количество слов массива, которые не являются «перевертышем».
Дан массив слов. Определить количество слов массива, которые не являются «перевертышем». ...

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

Обработка слов строки без массива слов
В программе нужно обработать введенную строку , ввести некоторую разменость и вывести слова ,...


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

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

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