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

Тема в разделе "WASM.BEGINNERS", создана пользователем qnx, 17 дек 2006.

Статус темы:
Закрыта.
  1. qnx

    qnx New Member

    Публикаций:
    0
    Регистрация:
    17 дек 2006
    Сообщения:
    2
    дайте инфу по этому вопросу.. с хорошими комментариями.. вот моя прога... без сопроцессора вроде работает...
    не понятно почему использую 3 переменные для ввода???
    dm db 6 ;maksimalnij razmer bufera
    dr db ? ;razmer bufera posle vvoda chisla
    buf db 6 dup (?) ;
    поясните пожалуйста каким образом.. если я задаю адрес dm , то в dr появляется реально введенная строка.. и вобще потом работаю с buf.. и если можно инфу по этому... тобешь по вводу и по выводу.. п.с. демаю хранить переменные в сопроцессоре, потому, что они в регистрах могут не поместиться.. хотя предусмотрел и для регистра ах.. а впринципе это РГР по проге. задание звучит так.. "напишите программу, которая выполняет вычитание двух введеных целых шестизначных чисел в формате ASCII и выводит результат. Предусмотреть выполнение операции вычитания для N колличества пар чисел" заранее благодарю... если что пишите в icq:198830403 jabber:qnx@jabber.kiev.ua
    Код (Text):
    1. .model small
    2. .stack 100h
    3. .data
    4.     dm  db  6   ;maksimalnij razmer bufera
    5.     dr  db  ?   ;razmer bufera posle vvoda chisla
    6.     buf db  6 dup (?)   ;
    7.     mes1    db  'Enter str_1: $'
    8.     mes2    db  13,10,'Enter str_2: $'
    9.     d   dw  10
    10. .code
    11. stt:
    12.     mov ax,DGROUP
    13.     mov ds,ax
    14.    
    15.     finit   ;inicializacija soprocessora
    16.    
    17.     mov dx,offset mes1
    18.     mov ah,9
    19.     int 21h ;vivod priglashenija na vvod
    20.    
    21.     mov dx,offset dm    ;pomestit v dx adres nachala bufera
    22.     mov ax,0Ah
    23.     int 21h ;schitat stroku vvedenih sinvolov v bufer
    24.    
    25.     mov cx,1
    26. pppovt:
    27.     fldz    ;pomestit v stek soprocessora 0
    28.    
    29.     push    cx  ;ispolzuetsa, chtob 2 raza ispolzovat odin i tot ge kod vvoda
    30.    
    31.     xor ax,ax   ;obnulenie
    32.     xor bx,bx
    33.     xor cx,cx
    34.     xor di,di
    35.    
    36.     mov cl,dr   ;kollichestvo realno vvedenih simvolov
    37. iii:
    38.     mov bl,byte ptr buf[di] ;pomestit v bl element bufera
    39.     sub bl,'0'  ;vichetanie znachenija '0' v rezultate chego poluchaetsa chislovoj ekvivalent
    40.     ;proverka chislo li eto
    41.     mul d   ;umnogit sodergimoe ax na d, chtob potom pribavit edenici
    42.     add ax,bx   ;pribavlenie k ax edenic
    43.    
    44.     fmul    10  ;umnogenie dla registra soprocessora
    45.     fadd    bx  ;pribavlenie bx k registru soprocesora,gde nahoditsa chislo
    46.    
    47.     inc di  ;uvilechenie di, perexod k sledujushemu simvolu
    48.     loop    iii ;povtorit poka preobrazujetsa vse vvedenie simvoli
    49.    
    50.     push    ax  ;pomestit ax v stek
    51.    
    52.     mov dx,offset mes2
    53.     mov ah,9
    54.     int 21h ;vivod priglashenija na vvod
    55.    
    56.     mov dx,offset dm    ;pomestit v dx adres nachala bufera
    57.     mov ax,0Ah
    58.     int 21h ;schitat stroku vvedenih sinvolov v bufer
    59.    
    60.     pop cx
    61.     loop    pppovt
    62.  
    63.  
    64.     mov ax,4c00h
    65.     int 21h
    66. end stt
     
  2. qnx

    qnx New Member

    Публикаций:
    0
    Регистрация:
    17 дек 2006
    Сообщения:
    2
    кстати я там почитал и другие сообщения форума... там есть рекомендации в инфе на сайте поискать, дык я на сайте вобще как-то найти нормально ничего не могу... тольом не отображается о чем статья....:)))) так что если есть возможность лучше прямые линки..
     
  3. q_q

    q_q New Member

    Публикаций:
    0
    Регистрация:
    5 окт 2003
    Сообщения:
    1.706
    qnx
    каким образом.. если я задаю адрес dm , то в dr появляется реально введенная строка.. и вобще потом работаю с buf
    Так устроена функция 0Ah прерывания int21h. Ей передается адрес области памяти в первом байте (у тебя это dm) которой необходимо указать сколько символов можно поместить в буфер (buf), во второй байт (dr) функция запишет сколько символов она поместила в буфер, с третьего байта начинается буфер.
     
  4. IceStudent

    IceStudent Active Member

    Публикаций:
    0
    Регистрация:
    2 окт 2003
    Сообщения:
    4.300
    Адрес:
    Ukraine
    Для этого есть отдельная тема.
     
Статус темы:
Закрыта.