Поиск:

Ответ в темуСоздание новой темы Создание опроса
> ввод с клавиатуры->обработка->вывод, нужна информация 
:(
    Опции темы
qnx
Дата 16.12.2006, 20:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 30
Регистрация: 20.10.2005

Репутация: нет
Всего: нет



Ввод с клавиатуры, обработка и вывод числа...      мне очень нужно, но нигде не могу найти, чтоб с нормальными коментариями было..      пожалуйста..   кто-то напишите с комментарияти код..    (в вводе не очень понятно..   ) Почитать бы где-то инфу нормальную по вводу...      только с коментами нормальными..     вот у меня кусок кода есть ..  там у меня с ним теман...              вобще мое задание звучит так на РГР..  "напишите программу, которая выполняет вычитание двух введеных целых шестизначных чисел в формате ASCII и выводит результат. Предусмотреть выполнение операции вычитания для N колличества пар чисел" Уменя есть пример моего задания, но мне там практически ничего не понятно..      если что инфу мне желательно пополнее..    если получится с алгоритмамиsmile))





Код


.model small
.stack  100h
//ввести  строку символов
.data
dm  db 10   ;;;;;;;;;;;что это за переменная??   и для чего она используется?????  я не понимаю, как она связана с переменной buf
dr  db   ?
rez  db  10dup(?)
buf  db  10dup(?)
mes1  db ‘enter your string’
mes2  db  ‘Rez = $’     перевод  курсора  на  следующую  строку.
News  db  0dh,  0ah  ‘$’
d  db  10  переменная  играет  роль  множителя
.code
start:
mov  ax,  dgroup
mov  ds,  ax                                                  ???mes1  db????
mov  ah,  0ah  функция  для  ввода
mov  dx,  offset  dm  (получение  адреса  смещения)
mov  cl,  dr
mov  si,  cx
mov  di,  0
mov  bx,  0

n:  mov  bl,  byte  ptr  buf[di] – прочитать  первый элемент
sub  bl,  ‘0’
inc  di
mul  d
add ax,  bx
cmp  di,   si
jb  n




вот пример у меня такой есть..    но очень первый понять хочу..

Код


.model small
.stack 100h
.data
    msg1    db    13,10,"Нажмите ""Y"" для повтора. Esc - Выход$"
    msg2    db    'Введите 1-е число: $'
    msg3    db    'Введите 2-е число: $'
    msg4    db    'Результат вычетания: $'
        
    raz    db    '',13,10,'$'
    p2    db    7, 10 dup(?)
    p1    db    7, 10 dup(?)
.code
begin:
    mov    ax, DGROUP
    mov    ds, ax
    
___begin:
    call    cls
    mov    dx, offset msg2
    call    write
    mov    dx, offset p1
    call    read    
    mov    dx, offset msg3
    call    write    
    mov    dx, offset p2
    call    read
    
    mov    bl, byte ptr p1[1]
    mov    ax, bx
    inc    ax
    lea    si, p1
    lea    di, p2
    add    si, ax
    add    di, ax

    dec    ax
    mov    bx, ax
    mov    cx, ax

_push:
    mov    al, byte ptr [si]
    sbb    al, byte ptr [di]
    aas            ;корекция вычетания
    push    ax
    dec    si
    dec    di
    loop    _push
    mov    cx, bx
    lea    si, raz
_pop:
    pop    word ptr [si]
    add    word ptr [si], 48
    inc    si
    loop    _pop
    mov    word ptr [si],'$'
    
    lea    dx, msg4
    call    write    
    lea    dx, raz
    call    write
    lea    dx, msg1
    call    write    

choice:
    mov    AH,08h    
    int    21h
    cmp    AL,27
    jz    exit
    cmp    AL,"y"
    jz    ___begin
    cmp    AL,"Y"
    jz    ___begin
    jmp    choice
exit:
;---------------------------------------------
    mov    ax, 4c00h    
    int    21h    
;---------------------------------------------
write PROC
    mov    ah,9
    int    21h
    ret
write ENDP

read PROC
    mov    ah,0ah
    int    21h
    call    cls
    ret
read ENDP

Cls PROC
     push    es
     push    ax
     push    cx
     push    di
     push    BX
     push    DX

     mov    ax,0B800h  
     mov    es,ax

     mov    di,00
     mov    al,32
     mov    ah,16+7
     mov    cx,2000
     rep    stosw 

     MOV    AH,02   
     MOV    BH,00   
     MOV    DH,00   
     MOV    DL,00   
     INT    10H

     pop    DX
     pop    BX
     pop    di
     pop    cx
     pop    ax
     pop    es
     ret
Cls ENDP
end begin



PM MAIL   Вверх
anwe
Дата 17.12.2006, 02:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 748
Регистрация: 2.9.2006

Репутация: 8
Всего: 23



Код

.model small
.stack  100h
//ввести  строку символов
.data
dm  db 10   ;что это за переменная??   и для чего она используется?????  я не понимаю, как она связана с переменной buf
;это подготовка буфера для функции 0А. Первый байт указывает какой его размер. В данном случае - 10 символов
dr  db   ;сюда - во второй байт того же буфера вносится число реально введенных символов
rez  db  10dup(?) ;сам буфер. Но если читать, как написано здесь, то принимающим будет буфер с именем rez
buf  db  10dup(?)
mes1  db ‘enter your string’
mes2  db  ‘Rez = $’     перевод  курсора  на  следующую  строку.
News  db  0dh,  0ah  ‘$’
d  db  10  переменная  играет  роль  множителя
.code
start:
mov  ax,  dgroup ;занесение адрес сегмента данных
mov  ds,  ax  ;напрямую в сегментный регистр нельзя
mov  ah,  0ah  функция  для  ввода
mov  dx,  offset  dm  ;адрес принимающего буфера
mov  cl,  dr
mov  si,  cx
mov  di,  0
mov  bx,  0
;пропущено mov ax,0 - начальный результат

n:  mov  bl,  byte  ptr  buf[di] ;прочитать  первый элемент
sub  bl,  ‘0’  ;корректировка введенной десятичной цифры
;пропущены проверки на выпад за пределы цифр и ввода других символов:
;jb   error
;cmp bl,9
;js  error
inc  di   ;для перехода на следующий элемент
mul  d   ;умножение на 10
add ax,  bx   ;добавить его к предыдущему результату
cmp  di,   si  ;сравнение с длинной введеной строки
jb  n   если меньше - повторить преобразование цифр

PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Asm для начинающих"
MAKCim
  • Проставьте несколько ключевых слов темы, чтобы её можно было легче найти.
  • Не забывайте пользоваться кнопкой КОД.
  • Телепатов на форуме нет! Задавайте чёткий, конкретный и полный вопрос. Указывайте полностью ошибки компилятора и компоновщика.
  • Новое сообщение должно иметь прямое отношение к разделу форума. Флуд, флейм, оффтопик запрещены.
  • Категорически запрещается обсуждение вареза, "кряков", взлома программ и т.д.

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, MAKCim.

 
 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Asm для начинающих | Следующая тема »


 




[ Время генерации скрипта: 0.0408 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.