Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Низкоуровневое программирование > Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 08.02.2013, 14:04   #1
Алексей_2012
t45t
Участник клуба
 
Аватар для Алексей_2012
 
Регистрация: 20.03.2012
Сообщений: 1,849
По умолчанию Не получается ввести и вывести строку

Собственно все написано в заголовке темы, вот мой код
Код:
.model small                   
.stack 32                       
.data


np1 db 'BBEDITE PERBOE CHISLO...$'
np2 db 'BBEDITE BTOROE CHISLO...$'
np3 db 'PRObEL-BbIXOD...$'

par1 label byte 
max1 db 100
rd1 db ?
str1 db 101 dup(?)

par2 label byte 
max2 db 100
rd2 db ?
str2 db 101 dup(?)

  
.code                        
begin: 
m100:mov ah,09h
lea dx,np1
int 21h
mov ah,10
lea dx,par1
int 21h
lea si,str1
mov ah,2
mov dl,0ah
int 21h
mov ah,09h
lea dx,np2
int 21h
mov ah,10
lea dx,par2
int 21h
lea di,str2
mov ah,2
mov dl,0ah
int 21h
mov cl,rd1
m1:
mov ah,2
mov dl,[si]
int 21h
inc si
loop m1 
mov ah,2
mov dl,0ah
int 21h
mov cl,rd2
m2:
mov ah,2
mov dl,[di]
int 21h
inc di
loop m2
mov ah,2
mov dl,0ah
int 21h
mov ah,09h
lea dx,np1
int 21h
mov ah,1
int 21h
cmp al,' '
jne m100

mov ax,4c00h                
int 21h
end begin
Должно получится следущее:

BBEDITE PERBOE CHISLO...(ввод первой строки: 1234)
BBEDITE BTOROE CHISLO...(ввод второй строки: 5678)
1234
5678
PRObEL-BbIXOD...

но почему-то не работает, в принципе вводится любые символы, а не числа, тут без преобразований, тупо ввод-вывод
from dark to light)

Последний раз редактировалось Алексей_2012; 09.02.2013 в 01:34.
Алексей_2012 вне форума Ответить с цитированием
Старый 11.02.2013, 16:14   #2
zhan313
Пользователь
 
Регистрация: 09.12.2011
Сообщений: 44
По умолчанию

Пропиши DS на свой сегмент данных
Код:
begin:
mov ax,@data
push ax
pop ds
m100:
zhan313 вне форума Ответить с цитированием
Старый 11.02.2013, 22:31   #3
Алексей_2012
t45t
Участник клуба
 
Аватар для Алексей_2012
 
Регистрация: 20.03.2012
Сообщений: 1,849
По умолчанию

спасибо, заработало, а для чего это нужно было добавлять? как это работает?
from dark to light)
Алексей_2012 вне форума Ответить с цитированием
Старый 12.02.2013, 08:08   #4
DiemonStar
Старожил
 
Регистрация: 08.02.2012
Сообщений: 2,173
По умолчанию

Цитата:
Сообщение от Алексей_2012 Посмотреть сообщение
спасибо, заработало, а для чего это нужно было добавлять? как это работает?
потому что при запуске в регистре DS находится адрес сегмента кода, а не сегмента данных. поэтому нужно принудительно указывать, что данные нужно брать из правильного сегмента.
Правильно поставленная задача - три четверти решения.
DiemonStar вне форума Ответить с цитированием
Старый 12.02.2013, 09:46   #5
Mikl___
Участник клуба
 
Регистрация: 11.01.2010
Сообщений: 1,139
По умолчанию

zhan313
зачем так сложно?
Код:
mov ax,@data
push ax
pop ds
достаточно
Код:
push @data
pop ds
Mikl___ вне форума Ответить с цитированием
Старый 12.02.2013, 12:20   #6
Алексей_2012
t45t
Участник клуба
 
Аватар для Алексей_2012
 
Регистрация: 20.03.2012
Сообщений: 1,849
По умолчанию

спасибо вам всем, а можно ли операцию ввода-вывода написать по-короче? Я просто хочу попытаться вот так: вводятся две строки, одна в регистре si, другая в di, затем последнее число перемножается на последнее число первой строки, записывается в ах, перебирается таким образом вся строка, потом произведение посимвольно выводится)
from dark to light)
Алексей_2012 вне форума Ответить с цитированием
Старый 12.02.2013, 14:01   #7
DiemonStar
Старожил
 
Регистрация: 08.02.2012
Сообщений: 2,173
По умолчанию

Цитата:
достаточно
Код:
push @data
pop ds
не все компиляторы такое обрабатывают...
Правильно поставленная задача - три четверти решения.
DiemonStar вне форума Ответить с цитированием
Старый 13.02.2013, 04:37   #8
Mikl___
Участник клуба
 
Регистрация: 11.01.2010
Сообщений: 1,139
По умолчанию

Цитата:
не все компиляторы такое обрабатывают...
DiemonStar,
для tasm и masm достаточно первой строчкой сделать
Код:
.286
Mikl___ вне форума Ответить с цитированием
Старый 14.02.2013, 08:12   #9
DiemonStar
Старожил
 
Регистрация: 08.02.2012
Сообщений: 2,173
По умолчанию

Цитата:
Сообщение от Mikl___ Посмотреть сообщение
DiemonStar,
для tasm и masm достаточно первой строчкой сделать
Код:
.286
В учебных задачах это не всегда разрешено. Также, как и использование 32-х разрядных регистров.
Правильно поставленная задача - три четверти решения.
DiemonStar вне форума Ответить с цитированием
Старый 14.02.2013, 11:59   #10
Алексей_2012
t45t
Участник клуба
 
Аватар для Алексей_2012
 
Регистрация: 20.03.2012
Сообщений: 1,849
По умолчанию

это я для себя пишу (для поднятия уровня самооценки можно сказать, ну и для более-лучшего владения ассемблером), дак куда мне эту циферку вставить, и что она означает?
from dark to light)
Алексей_2012 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Ввести с клавиатуры строку. Посчитать количество слов в строке. Определить, что является разделителем слов. Вывести рез-ть на экра Газимов Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 3 02.03.2012 15:58
Ввести имя, фамилию и отчество в строку. Найти длину строки, вывести фамилию в обратном порядке (Delphi) --PapaZi-- Помощь студентам 7 27.03.2011 22:44
Как ввести строку???? firephenix Помощь студентам 2 18.02.2011 18:46
Не получается ввести данные... solomon123456789 Общие вопросы C/C++ 9 24.06.2009 23:41
Ввести строку, вывести на экран символы, повторяющиеся в строке более 2 раз. bibl2008 Помощь студентам 4 01.03.2009 13:30