ввод с клавиатуры

Тема в разделе "WASM.ASSEMBLER", создана пользователем bobsvt, 4 июн 2011.

  1. bobsvt

    bobsvt New Member

    Публикаций:
    0
    Регистрация:
    4 июн 2011
    Сообщения:
    7
    Не могу разобраться как сделать ввод двух чисел с клавиатуры с приглашением?
    Введите число1
    Введите число2

    дальше нужно будет произвести арифметические операции с введенными числами и вывести.
    Под NASm ассемблер.
     
  2. h0t

    h0t Member

    Публикаций:
    0
    Регистрация:
    3 апр 2011
    Сообщения:
    735
    вам под какую операционную систему?
     
  3. bobsvt

    bobsvt New Member

    Публикаций:
    0
    Регистрация:
    4 июн 2011
    Сообщения:
    7
    использую nasm под windows xp.
    Под dos наверно как проще что б меньше синтаксиса было.
     
  4. h0t

    h0t Member

    Публикаций:
    0
    Регистрация:
    3 апр 2011
    Сообщения:
    735
    если Вам под Windows то http://msdn.microsoft.com/en-us/library/ms684958(v=vs.85).aspx - ReadConsole / WriteConsole
    если под Dos то как-то так
    Код (Text):
    1. mov dx, offset message
    2. mov al, 9
    3. int 21h   ;это вывод сообщения
    4.  
    5. mov dx, offset buffer
    6. mov ah, 0Ah
    7. int 21h  ;в buffer будет СТРОКА, введенная пользователем
    P.S. это под masm написано, с nasm'ом не работал по религиозным соображениям, поэтому возможно нужно
    что-то подправить но идея такая
     
  5. bobsvt

    bobsvt New Member

    Публикаций:
    0
    Регистрация:
    4 июн 2011
    Сообщения:
    7
    Примерно понятно.
    Не скажите что значит арифметическое смещение на шесть в право.
    Мне нужно посчитать вот такую формулу c=(a-b)*2 с арифметическим смещением на право на шесть.
     
  6. h0t

    h0t Member

    Публикаций:
    0
    Регистрация:
    3 апр 2011
    Сообщения:
    735
    видим арифметический сдвиг т.е. сдвиг на 6 бит вправо (один сдвиг деление на 2)
    посмотрите команду SAR
     
  7. bobsvt

    bobsvt New Member

    Публикаций:
    0
    Регистрация:
    4 июн 2011
    Сообщения:
    7
    НЕ подскажете почему он не вычитает два числа.
    Выводит какие то символы или вообще нечего не выводит.

    Код (Text):
    1. SECTION .text
    2. org 0x100   ;создаем файл типа COm
    3. mov ah, 0x9
    4. mov dx,chislo1  ;
    5. int 0x21        ;вызов DOS прерывания
    6. mov ah,0x01     ;DOS функция чтения символа
    7. int 0x21    ;вызов DOS прерывания
    8. mov dl,al   ;копироание считанного символа в DL
    9.  
    10.  
    11.  
    12.  
    13. mov ah, 0x9
    14. mov dx,chislo2  ;
    15. int 0x21        ;вызов DOS прерывания
    16. mov ah,0x01     ;DOS функция чтения символа
    17. int 0x21    ;вызов DOS прерывания
    18. mov cl,al   ;копироание считанного символа в CL
    19.  
    20.  
    21. sub dl,cl
    22. mov dh,dl
    23. mov ah, 0x02
    24. int 0x21
    25.  
    26.  
    27. cmp dl, 0xD     ;проверка нажат нет ENTER
    28. mov ah,0x4C     ;заверщение программы
    29. int 0x21
    30. SECTION .data
    31. chislo1 DB "Vvedite chislo1" , '$'
    32. chislo2 DB  0xd, 0xa, "Vvedite chislo2" , '$'
     
  8. h0t

    h0t Member

    Публикаций:
    0
    Регистрация:
    3 апр 2011
    Сообщения:
    735
    Вы читаете коды символов! а не числа Вам нужно преобразовать коды в символы (0х30 отнять, выполнить операцию и вывести на дисплей)
     
  9. h0t

    h0t Member

    Публикаций:
    0
    Регистрация:
    3 апр 2011
    Сообщения:
    735
    sub dl,cl
    add dl, 30h

    например так
     
  10. bobsvt

    bobsvt New Member

    Публикаций:
    0
    Регистрация:
    4 июн 2011
    Сообщения:
    7
    попробовал то же самое может не тот регистр вывожу?
     
  11. h0t

    h0t Member

    Публикаций:
    0
    Регистрация:
    3 апр 2011
    Сообщения:
    735
    Когда Вы вводите 3<enter> то в буффер считывается насколько символов! (переход на новую строку) по-моему в этом дело
     
  12. bobsvt

    bobsvt New Member

    Публикаций:
    0
    Регистрация:
    4 июн 2011
    Сообщения:
    7
    Извините не понял.
    По Enter у меня идет завершение программы.
    Когда ввожу число 1 меньше чем число 2 то выводи какой то символ.
    если наоборот то нечего не выводит.
     
  13. bobsvt

    bobsvt New Member

    Публикаций:
    0
    Регистрация:
    4 июн 2011
    Сообщения:
    7
    Нашел в чем ошибка записывал в регистр dl и затирал его mov dx,chislo2 .
    Не подскажете как можно сделать ввод не числа состоящего больше чем из одного символа
     
  14. h0t

    h0t Member

    Публикаций:
    0
    Регистрация:
    3 апр 2011
    Сообщения:
    735
    mov dx, offset buffer
    mov ah, 0Ah
    int 21h ;в buffer будет СТРОКА, введенная пользователем