Студентам с вопросами о лабораторных работах сюда

Тема в разделе "WASM.BEGINNERS", создана пользователем IceStudent, 11 ноя 2006.

  1. max7C4

    max7C4 New Member

    Публикаций:
    0
    Регистрация:
    17 мар 2008
    Сообщения:
    1.203
    BVS
    Вот именно, что эта программа ни как не взаимодействует с внешним миром
    Хотите, чтобы что-то было то попробуйте что-то типа этого
    Код (Text):
    1. stck segment stack
    2.  dw 128 dup (?)
    3. stck ends
    4. data segment
    5. b db 1,2,3,4,5,6,7,8,9,10
    6. sum dw ?
    7. m0 db 'Program running',13,10,'$'
    8. m1 db 'The sum of even elements of the array ($'
    9. m2 db ', $'
    10. m3 db ') is $'
    11. data ends
    12. code segment
    13. start:
    14. mov ax,data
    15. mov ds,ax
    16. mov dx, offset m0
    17. call print
    18. lea bx,b
    19. xor cx,cx
    20. mov cl,10
    21. xor ax,ax
    22. cik:
    23. mov al,[bx]
    24. test al,1b
    25. jnz nech
    26. add sum,ax
    27. nech:
    28. inc bx
    29. loop cik
    30. mov dx, offset m1
    31. call print
    32. lea bx, b
    33. mov cx, 10
    34. xor ax, ax
    35. mov al, [bx]
    36. call printint
    37. lea dx, offset m2
    38. call print
    39. inc bx
    40. loop lp2
    41. mov dx, offset m3
    42. call print
    43. mov ax, sum
    44. call printint
    45. mov ah, 8
    46. int 21h
    47. mov ax,4c00h
    48. int 21h
    49. print:
    50. mov ah, 9
    51. int 21h
    52. retn
    53. printint:
    54. push ds
    55. push bp
    56. push cx
    57. push dx
    58. push ax
    59. push ss
    60. pop ds
    61. mov bp, sp
    62. sub sp, 8
    63. dec bp
    64. mov byte ptt [bp], '$'
    65. mov cx, 10
    66. lp:
    67. xor dx, dx
    68. div cx
    69. add dl, 48
    70. dec bp
    71. mov byte ptr [bp], dl
    72. test ax, ax
    73. jz lp
    74. mov dx, bp
    75. call print
    76. add sp, 8
    77. pop ax
    78. pop dx
    79. pop cx
    80. pop bp
    81. pop ds
    82. retn
    83. code ends
    84. end start
    Но могу поспорить вы это не сдадите
     
  2. BVS

    BVS Vladimir

    Публикаций:
    0
    Регистрация:
    25 июн 2010
    Сообщения:
    10
    Адрес:
    Taganrog
    Мне вообще нужно как:
    -ввести эл. в массив с клавиатуры или вручную (сделать выбор при старте тип 1-ручной, 0-рандом)
    -вывести матрицу на экран
    -вывести на экран четные эл. и их сумму

    Но это в идеале...

    А так устроит ручной ввод и вывод суммы на экран)))

    А та прога, которую ты мне дал.... в ней при трансляции 15 ошибок найдено(((
     
  3. max7C4

    max7C4 New Member

    Публикаций:
    0
    Регистрация:
    17 мар 2008
    Сообщения:
    1.203
    ну набирал я ее в браузере и на ошибки не проверял (могут быть опечатки)
    - добавь после
    Код (Text):
    1. code segment
    строчку
    Код (Text):
    1. assume cs:code,ds:data
    после этого должно остаться 4 ошибки
    - в команде
    Код (Text):
    1. lea dx, offset m2
    (после добавления к оригинальному тексту 1 строки это строка номер 38) исправь lea на mov (останется 3 ошибки)
    - в получившемся тексте не хватает метки lp2, которую надо вставить между 34 и 35 строками (это строки
    Код (Text):
    1. mov cx, 10
    и
    Код (Text):
    1. xor ax, ax
    , для достоверности) (останется 2 ошибки)
    - обе оставшиеся ошибки устраняются путем исправления опечатки в строке номер 65
    Код (Text):
    1. mov byte ptt [bp], '$'
    , а именно в слове ptr, вместо которого написано ptt
     
  4. max7C4

    max7C4 New Member

    Публикаций:
    0
    Регистрация:
    17 мар 2008
    Сообщения:
    1.203
    и пара логических ошибок
    - в коде
    Код (Text):
    1. xor ax, ax
    2. mov al, [bx]
    3. call printint
    4. lea dx, offset m2
    5. call print
    6. inc bx
    7. loop lp2
    исправляем форматирование массива
    Код (Text):
    1. xor ax, ax
    2. mov al, [bx]
    3. call printint
    4. cmp cx, 1
    5. jz eoa
    6. lea dx, offset m2
    7. call print
    8. inc bx
    9. eoa:
    10. loop lp2
    - в коде (хотя это скорее просто опечатка)
    Код (Text):
    1. lp:
    2. xor dx, dx
    3. div cx
    4. add dl, 48
    5. dec bp
    6. mov byte ptr [bp], dl
    7. test ax, ax
    8. jz lp
    исправляем условие выхода из цикла
    Код (Text):
    1. lp:
    2. xor dx, dx
    3. div cx
    4. add dl, 48
    5. dec bp
    6. mov byte ptr [bp], dl
    7. test ax, ax
    8. jnz lp
     
  5. max7C4

    max7C4 New Member

    Публикаций:
    0
    Регистрация:
    17 мар 2008
    Сообщения:
    1.203
    программа выводит
    1. приветствие в виде строки m0
    2. сам массив, как часть строк m1, m2, m3 (в скобках)
    3. сумму после всех строк

    до вашего идеала остается
    1) реализовать ввод типа массива (ввод с клавиатуры или генерация случайного)
    2) реализовать ввод числа элементов массива
    3) реализовать ввод чисел массива (в случае выбора ввода с клавиатуры)
    4) генерацию случайных чисел (в случае выбора генерации случайного массива)
    5) вывод четных элементов
     
  6. BVS

    BVS Vladimir

    Публикаций:
    0
    Регистрация:
    25 июн 2010
    Сообщения:
    10
    Адрес:
    Taganrog
    Ухх))) Спасибо))) Все отлично робит)) щас буду построчно разбирать и лепить к этому алгоритм....
    Даже не знаю как Вас отблагодарить))) Спасиб))

    P.S. Еще ошибочка была в 41 строке
    Код (Text):
    1. lea dx, offset m2
     
  7. max7C4

    max7C4 New Member

    Публикаций:
    0
    Регистрация:
    17 мар 2008
    Сообщения:
    1.203
    BVS
    у меня она получилась 38-ой строкой
     
  8. BVS

    BVS Vladimir

    Публикаций:
    0
    Регистрация:
    25 июн 2010
    Сообщения:
    10
    Адрес:
    Taganrog
    max7C4
    ну я там просто отступы делал, поэтому....
     
  9. BVS

    BVS Vladimir

    Публикаций:
    0
    Регистрация:
    25 июн 2010
    Сообщения:
    10
    Адрес:
    Taganrog
    max7C4, ты не сможешь в 2 словах объяснить вывод как ты реализуешь, а то я никак не пойму((((

    p.s. с первого раза я сдать лабу так и не смог(( оказывается, нам нельзя использовать регистровую адресацию(( пришлось менять на индексную....
     
  10. wsd

    wsd New Member

    Публикаций:
    0
    Регистрация:
    8 авг 2007
    Сообщения:
    2.824
    во преподы извращенцы)))
     
  11. BVS

    BVS Vladimir

    Публикаций:
    0
    Регистрация:
    25 июн 2010
    Сообщения:
    10
    Адрес:
    Taganrog
    возможно)) еще он нам запрещал использовать
    Код (Text):
    1. go to
    в Паскале.....
     
  12. skomarov

    skomarov New Member

    Публикаций:
    0
    Регистрация:
    14 май 2008
    Сообщения:
    389
    BVS
    > еще он нам запрещал использовать "go to" в Паскале.....
    Это нормально. Ограничения способствуют усвоению предмета. Как вариант обратной задачи: попробуйте на Паскале написать программу, используя только операторы присваивания и перехода "goto". (Оказалось, что компилятор Borland Pascal 7.0 не позволяет оперировать метками на уровне генерируемого кода. Поэтому оператор "goto" не имеет смысла без оператора ветвления "if ... then". Таким образом, выше описанная задача сводится к использованию только оператора присваивания, а это уже не является противоположной задачей запрещения использования "go to". Но даже в таком виде это могло бы быть некоторой исследовательской работой для студента.)
     
  13. BVS

    BVS Vladimir

    Публикаций:
    0
    Регистрация:
    25 июн 2010
    Сообщения:
    10
    Адрес:
    Taganrog
    skomarov
    из всех преподов за 2 семестра он единственный, кто хоть чему-то найчил)

    ну с ассемблером он немножко не успел((
     
  14. max7C4

    max7C4 New Member

    Публикаций:
    0
    Регистрация:
    17 мар 2008
    Сообщения:
    1.203
    BVS
    тогда пришлите в личку ваш вариант проги
    Не понимаю преподавателей. Если это можно написать так, и именно так будет проще, зачем извращаться. Для процесса обучения это минус т.к. в этом случае многие просто не научатся реализовывать простейший вариант. Программу надо писать не для человека, а для компьютера. Именно компьютер будет ее выполнять. Это равнозначно написанию
    Код (Text):
    1. mov cx, 4
    2. xor dx, dx
    3. div cx
    вместо
    Код (Text):
    1. shr ax, 2
    . Если вы везде все это поменяли, то присылайте будем исправлять. Не все так просто, но и с индексной адресацией тоже может работать.
     
  15. BVS

    BVS Vladimir

    Публикаций:
    0
    Регистрация:
    25 июн 2010
    Сообщения:
    10
    Адрес:
    Taganrog
    max7C4
    Все!! я сдал!!)) Спасибо огромное))

    Вчера весь вечер посидел и доработал ее до конфетки))
    Теперь остался только экзамен))
     
  16. kamax70

    kamax70 New Member

    Публикаций:
    0
    Регистрация:
    31 мар 2010
    Сообщения:
    36
    Вопрос такой:
    Пусть в памяти есть
    Код (Text):
    1. 10000000   D9EA
    2. 10000002   DEC9
    3. 10000004   D9C0
    При выполнении проги, работающей с данной областью памяти, процессор будет последовательно считывать данные, т.е. сначала D9EA, потом DEC9.... Если бы по адресу
    10000000 была записана команда перехода на адрес 10000004, то данные по адресу 10000002 были бы пропущены.

    Сам вопрос у меня такой : Можно ли каким либо образом считать заставить процессор выполнить переход на какой-либо адрес памяти без использования команды вроде jmp?
    Например чтобы после прочитывания информации по адресу 100000004, переходить на адрес 1000000A, но не записывая в адрес 10000005 команду перехода...
    Знаю, что излогаю свои мысли очень криво, надеюсь вы поняли!
     
  17. wsd

    wsd New Member

    Публикаций:
    0
    Регистрация:
    8 авг 2007
    Сообщения:
    2.824
    kamax70
    бред студент)
    код пропущен, данные не пропускаются
     
  18. kamax70

    kamax70 New Member

    Публикаций:
    0
    Регистрация:
    31 мар 2010
    Сообщения:
    36
    wsd
    Извиняюсь.
    Суть моего вопроса в том, что мне нужно выполнить перечень команд, записанных где-то в памяти (я знаю адрес начала и знаю, что они занимают 10 байт). Их нужно выполнить без копирования в какие-либо другие адреса. После этого продолжить выполнение моей проги.
    Можете подсказать, как это сделать?
     
  19. wsd

    wsd New Member

    Публикаций:
    0
    Регистрация:
    8 авг 2007
    Сообщения:
    2.824
    псевдо код
    Код (Text):
    1. твой код:
    2. call где-то записанные команды
    3. .. здесь остальной код
    4. ...
    5. ...
    6. где-то записанные комманды:
    7. здесь сам напишеш
    8. ret
    изучи минимально мат часть
     
  20. kamax70

    kamax70 New Member

    Публикаций:
    0
    Регистрация:
    31 мар 2010
    Сообщения:
    36
    То, что ты написал, понятно, но вопрос в другом.
    По заданию я этот код писать руками и копировать не должен. Мне нужно его как бы выполнить в той памяти, в которой он записан.