Модераторы: Poseidon
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> [Assembler] Помогите бедному студенту дорешить задачки 
:(
    Опции темы
sax0n
Дата 30.11.2007, 20:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Привет народ. у меня есть несколько вопросов по асму. у меня есть 3 задачи. 1 я решил (первую). но там изменилось условие ((( в приложении код рабочей программе. но там результаты выводятся прямо на экран. в то время, как теперь нужно, чтобы они писались в файл, а потом результы выводились на екран.

1 задание: код в приложении. нужна очень помощь с выводом.
ввести a, b
вывести:
a + " / " + b = c
d
где с - деление нацело (div)
а d - остаток от деления
2 задание:
она на основе такого условия
" Написать подпрограмму, которая в передаваемом ей символьном массиве производит преобразование десятичных чисел со знаком в двоичную форму и записывает результаты преобразования в другой массив. Признаком завершения преобразования является или обработка заданного числа элементов массива, или обнаружение кода символа EOF (lAh) среди символов исходного массива. Разделителями между числами служит один или несколько пробелов. Параметры передаются подпрограмме в следующем порядке, начиная с верхушки стека число обрабатываемых элементов, адрес исходного массива, адрес результирующего массива. На месте последнего параметра возвращается число действительно обработанных элементов. Вызывающая программа должна вызвать подпрограмму для обработки двух массивов (15 элементов с кодом EOF после 12-го числа и 10 элементов без кода EOF) и вывести на печать обработанные элементы исходного массива и результаты преобразования (16-ричными числами).
Задание:
"Написать подпрограмму, выполняющую функцию, обратную задаче 4 исходный массив содержит двоичные целые числа со знаком, а в результирующий массив подпрограмма помещает значения этих чисел в ASCII- кодах, отделяя числа тремя пробелами. Параметры подпрограмме передаются аналогично задаче 4, возвращается значение длины результирующего массива в байтах. Вызывающая программа должна вызвать подпрограмму для обработки двух массивов (10 и 15 элементов) и вывести на экран дисплея в символьном виде 16-ричными числами значения элементов, исходного массива и результаты преобразования."

3 задание:
Для задачи необходимо программно подготовить текстовый файл с записями требуемой структуры. Информация отдельных полей записи должна вводиться по запросам программы о клавиатуры. После занесения в файл необходимого числа записей (не менее 10) файл необходимо закрыть, а затем открыть для выполнения определенных заданиями операций по поиску и модификации необходимых записей.

Формат записей:
Фамилия И.О. 
профессия 
телефон 
адрес

Для запрашиваемых с клавиатуры фамилий изменить адрес, затем в конце вывести на экран записи, в которых были изменения.



Код программы для 1 задачи:
Код

StackSg       segment  para stack 'Stack'
                   dw  32767 dup(?)
StackSg       ends
;-------------------------------------------
DataSg        segment  para 'Data'
                    a  dw  00
                    b  dw  00
                    c  dw  00
                   @1  db  'Input a: ','$'
                   @2  db  'Input b: ','$'
                   @3  db  ' / ','$'
                   @4  db  ' = ','$'
                   @5  db  'Ostatok = ','$'
              @probel  db  13,10,'$'
           @WriteSymb  db  6 dup(' '),'$'
          @ASCIIToHex  db  6 dup(' ')
            @Factor10  dw  1
               @Smesh  dw  00
DataSg        ends
;------------------------------------------
CodeSg        segment  para 'Code'
               assume  CS:CodeSg,DS:DataSg,SS:StackSg

Begin            Proc  far
;init
                 push  DS
                  sub  AX,AX
                 push  AX
                  mov  AX,DataSg
                  mov  DS,AX
;vivod @1
                  mov  AH,09h
                  mov  DX,offset @1
                  int  21h
                  sub  AX,AX
                  lea  DI,@ASCIIToHex
                  mov  AH,0ch
                  xor  BX,BX
InputSymbol1:
;vvod simvola
                  mov  AL,01h
                  int  21h
;enter?               
                  cmp  AL,13
                   je  EndInput1
                  mov  [DI],AL
                  inc  DI
                  inc  BX
                  jmp  InputSymbol1
EndInput1:
;konec vvoda
                  mov  CX,10
                  lea  SI,@ASCIIToHex-1
MetkaRead1:
;minus
                  mov  AL,[SI+BX]
                  cmp  AL,'-'
                   je  NegRead1
                  and  AX,000Fh
                  mul  @Factor10
                  add  a,AX
                  mov  AX,@Factor10
                  mul  CX
                  mov  @Factor10,AX
                  dec  BX
                  jnz  MetkaRead1
NegRead1:
;vveden tolko minus?
                  cmp  @ASCIIToHex,'-'
                  jne  EndRead1
                  neg  a
EndRead1:
;konec vvoda
                  mov  @Factor10,1
                  mov  AH,09h
                  mov  DX,offset @probel
                  int  21h
;perevod na novuu stroku
                  mov  AH,09h
                  mov  DX,offset @2
                  int  21h
                  sub  AX,AX
                  lea  DI,@ASCIIToHex
                  mov  AH,0ch
                  xor  BX,BX
InputSymbol2:
;povtor vvoda dlya b
                  mov  AL,01h
                  int  21h
                  cmp  AL,13
                   je  EndInput2
                  mov  [DI],AL
                  inc  DI
                  inc  BX
                  jmp  InputSymbol2
EndInput2:
                  mov  CX,10
                  lea  SI,@ASCIIToHex-1
MetkaRead2:
                  mov  AL,[SI+BX]
                  cmp  AL,'-'
                   je  NegRead2
                  and  AX,000Fh
                  mul  @Factor10
                  add  b,AX
                  mov  AX,@Factor10
                  mul  CX
                  mov  @Factor10,AX
                  dec  BX
                  jnz  MetkaRead2
NegRead2:
                  cmp  @ASCIIToHex,'-'
                  jne  EndRead2
                  neg  b
EndRead2:
                  mov  @Factor10,1
                  mov  AH,09h
                  mov  DX,offset @probel
                  int  21h
                  mov  AX,a
                 push  AX
                  mov  AX,b
                  pop  BX
                  mov  DX,BX
                  mov  BX,AX
                  mov  AX,DX
                  mov  DX,0
                  cmp  BX,0
                  jne  CoolJmp1
                  jmp  EndPrg
CoolJmp1:
; c = a / b
                  div  BX
                  mov  c,AX

                  mov  AX,a
                 push  AX
                  lea  DI,@WriteSymb
                  mov  CX,6
                  mov  AL,' '
Chistka1:
;ochistka chisla a
                  mov  [DI],AL
                  inc  DI
                 loop  Chistka1
                  pop  AX
                  lea  DI,@WriteSymb+5
                  mov  BX,10
                  cmp  AX,0
                  jns  Pologit1
                  mov  @WriteSymb,'-'
                  neg  AX
Pologit1:
;vivod a / b = c
                  mov  DX,0
                  div  BX
                  or  DL,30h
                  mov  [DI],DL
                  dec  DI
                  cmp  AL,0
                  jne  Pologit1

                  mov  AH,09h
                  inc  DI
                  mov  DX,DI
                  cmp  @WriteSymb,'-'
                  jne  NotOtr1
                  mov  BH,'-'
                  mov  [DI-1],BH
                  dec  DX
NotOtr1:
                  int  21h
                  sub  AX,AX

                  mov  AH,09h
                  mov  DX,offset @3
                  int  21h
                  sub  AX,AX
                  mov  AX,b
                 push  AX
                  lea  DI,@WriteSymb
                  mov  CX,6
                  mov  AL,' '
Chistka2:
                  mov  [DI],AL
                  inc  DI
                 loop  Chistka2
                  pop  AX
                  lea  DI,@WriteSymb+5
                  mov  BX,10
                  cmp  AX,0
                  jns  Pologit2
                  mov  @WriteSymb,'-'
                  neg  AX
Pologit2:
                  mov  DX,0
                  div  BX
                   or  DL,30h
                  mov  [DI],DL
                  dec  DI
                  cmp  AL,0
                  jne  Pologit2

                  mov  AH,09h
                  inc  DI
                  mov  DX,DI
                  cmp  @WriteSymb,'-'
                  jne  NotOtr2
                  mov  BH,'-'
                  mov  [DI-1],BH
                  dec  DX
NotOtr2:
                  int  21h
                  sub  AX,AX

                  mov  AH,09h
                  mov  DX,offset @4
                  int  21h
                  sub  AX,AX
                  mov  AX,c
                 push  AX
                  lea  DI,@WriteSymb
                  mov  CX,6
                  mov  AL,' '
                  
                  
Chistka3:
                  mov  [DI],AL
                  inc  DI
                 loop  Chistka3
                  pop  AX
                  lea  DI,@WriteSymb+5
                  mov  BX,10
                  cmp  AX,0
                  jns  Pologit3
                  mov  @WriteSymb,'-'
                  neg  AX
Pologit3:
;vivod ostatok. s podgotovkoy chisla
                  mov  DX,0
                  div  BX
                   or  DL,30h
                  mov  [DI],DL
                  dec  DI
                  cmp  AL,0
                  jne  Pologit3

                  mov  AH,09h
                  inc  DI
                  mov  DX,DI
                  cmp  @WriteSymb,'-'
                  jne  NotOtr3
                  mov  BH,'-'
                  mov  [DI-1],BH
                  dec  DX
NotOtr3:
                  int  21h
                  sub  AX,AX
                  mov  AH,09h
                  mov  DX,offset @probel
                  int  21h
                  sub  AX,AX
                  mov  AX,a
                 push  AX
                  mov  AX,b
                 push  AX
                  mov  AX,c
                  pop  BX
                  mul  BX
                  pop  BX
                  sub  BX,AX
                  mov  AX,BX
                  mov  c,AX


                  mov  AH,09h
                  mov  DX,offset @5
                  int  21h
                  sub  AX,AX
                  mov  AX,c
                 push  AX
                  lea  DI,@WriteSymb
                  mov  CX,6
                  mov  AL,' '
Chistka4:
                  mov  [DI],AL
                  inc  DI
                 loop  Chistka4
                  pop  AX
                  lea  DI,@WriteSymb+5
                  mov  BX,10
                  cmp  AX,0
                  jns  Pologit4
                  mov  @WriteSymb,'-'
                  neg  AX
Pologit4:
                  mov  DX,0
                  div  BX
                   or  DL,30h
                  mov  [DI],DL
                  dec  DI
                  cmp  AL,0
                  jne  Pologit4

                  mov  AH,09h
                  inc  DI
                  mov  DX,DI
                  cmp  @WriteSymb,'-'
                  jne  NotOtr4
                  mov  BH,'-'
                  mov  [DI-1],BH
                  dec  DX
NotOtr4:
                  int  21h
                  sub  AX,AX
                  mov  AH,09h
                  mov  DX,offset @probel
                  int  21h
                  sub  AX,AX
                  mov     ah,0ch
                  mov     al,01h
                  int     21h
EndPrg:           
;konec
                  mov  AX,4C00h
                  int  21h
                  ret
Begin            endp
CodeSg           ends
                  end Begin

PM MAIL   Вверх
MAKCim
Дата 1.12.2007, 10:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Воін дZэна
****


Профиль
Группа: Экс. модератор
Сообщений: 5644
Регистрация: 10.12.2005
Где: Менск, РБ

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



Для домашних заданий, курсовых, существует "Центр Помощи".

Тема перенесена! 


--------------------
Ах, у елі, ах, у ёлкі, ах, у елі злыя волкі ©

PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Центр помощи"

ВНИМАНИЕ! Прежде чем создавать темы, или писать сообщения в данный раздел, ознакомьтесь, пожалуйста, с Правилами форума и конкретно этого раздела.
Несоблюдение правил может повлечь за собой самые строгие меры от закрытия/удаления темы до бана пользователя!


  • Название темы должно отражать её суть! (Не следует добавлять туда слова "помогите", "срочно" и т.п.)
  • При создании темы, первым делом в квадратных скобках укажите область, из которой исходит вопрос (язык, дисциплина, диплом). Пример: [C++].
  • В названии темы не нужно указывать происхождение задачи (например "школьная задача", "задача из учебника" и т.п.), не нужно указывать ее сложность ("простая задача", "легкий вопрос" и т.п.). Все это можно писать в тексте самой задачи.
  • Если Вы ошиблись при вводе названия темы, отправьте письмо любому из модераторов раздела (через личные сообщения или report).
  • Для подсветки кода пользуйтесь тегами [code][/code] (выделяйте код и нажимаете на кнопку "Код"). Не забывайте выбирать при этом соответствующий язык.
  • Помните: один топик - один вопрос!
  • В данном разделе запрещено поднимать темы, т.е. при отсутствии ответов на Ваш вопрос добавлять новые ответы к теме, тем самым поднимая тему на верх списка.
  • Если вы хотите, чтобы вашу проблему решили при помощи определенного алгоритма, то не забудьте описать его!
  • Если вопрос решён, то воспользуйтесь ссылкой "Пометить как решённый", которая находится под кнопками создания темы или специальным флажком при ответе.

Более подробно с правилами данного раздела Вы можете ознакомится в этой теме.

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

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


 




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


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

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