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

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

  1. t00x

    t00x New Member

    Публикаций:
    0
    Регистрация:
    15 фев 2007
    Сообщения:
    1.921
    terry
    SCASW - Compare AX with Word
    а у тебя строка БАЙТОВ, надо использовать SCASB
     
  2. terry

    terry New Member

    Публикаций:
    0
    Регистрация:
    2 июл 2007
    Сообщения:
    7
    ок. спасибо
     
  3. terry

    terry New Member

    Публикаций:
    0
    Регистрация:
    2 июл 2007
    Сообщения:
    7
    сделал так:
    Код (Text):
    1. ;Поиск буквы в предложении:
    2. ;               -----------------------
    3. F10SCAS PROC
    4.          cld
    5.   N1:  mov al, [si]
    6.         lea    di, string
    7.         mov    cx, 30
    8.         mov bl, byte ptr [string2]
    9.         mov dl, byte ptr [string3]
    10.         repne scasb  
    11.         je  P1
    12.         inc di
    13.         dec cx
    14.         jnz N1
    15.         jmp  V1
    16. P1: xchg [di], dl
    17. v1: retn
    18. F10SCAS ENDP
    19. end kurs
    ааааа совсем перестал сканировать... :'(
    еще не получается вывод результата
    Ребят, пожалуйста, помогите разобраться с написанием этой проги.
     
  4. censored

    censored New Member

    Публикаций:
    0
    Регистрация:
    5 июл 2005
    Сообщения:
    1.615
    Адрес:
    деревня "Анонимные Прокси"
    terry
    Код (Text):
    1. ; %tasm%tasm /t /x dos.asm      
    2. ; %tasm%tlink /t dos.obj
    3.  
    4.         .model  tiny
    5.         .386
    6.         locals  __
    7.  
    8.         .code
    9.  
    10.         org 100h
    11.  
    12. start:      mov ah, 09h
    13.         mov dx, offset str1
    14.         int 21h
    15.  
    16.         mov dx, offset strbeg
    17.         mov ah, 0Ah
    18.         int 21h
    19.  
    20.         mov ah, 09h
    21.         mov dx, offset str2
    22.         int 21h
    23.  
    24.                 mov ax, 0C07h
    25.                 int 21h
    26.                 mov     byte ptr [ch1], al
    27.                 xchg    al, dl
    28.                 mov ah, 02h
    29.                 int 21h
    30.  
    31.                 mov ah, 09h
    32.                 mov dx, offset str3
    33.                 int 21h
    34.  
    35.                 mov ax, 0C07h
    36.                 int 21h
    37.                 mov     byte ptr [ch2], al
    38.                 xchg    al, dl
    39.                 mov ah, 02h
    40.                 int 21h
    41.  
    42.         mov al, byte ptr [ch1]
    43.         mov bl, byte ptr [ch2]
    44.         mov di, offset string
    45.         movzx   cx, byte ptr [strlen]
    46.         cld
    47. repne       scasb
    48.                 jecxz   __hooy
    49.         dec di
    50.         xchg    byte ptr [di], bl
    51.  
    52. __hooy:     mov ah, 09h
    53.         mov dx, offset newline
    54.         int 21h
    55.  
    56.         movzx   bx, byte ptr [strlen]
    57.         mov di, offset string
    58.         mov byte ptr [di+bx], '$'
    59.         mov ah, 09h
    60.         mov dx, di
    61.         int 21h
    62.  
    63.         ret
    64.  
    65. str1        db  10, 13, 'enter text: $'
    66. str2        db  10, 13, 'enter char to find: $'
    67. str3        db  10, 13, 'enter char to xchg: $'
    68. newline     db  10, 13, '$'
    69.  
    70.  
    71. strbeg      db  100
    72. strlen      db  ?
    73. string      db  100 dup (?)
    74.  
    75. ch1     db  ?
    76. ch2     db  ?
    77.  
    78.         end start
    из любви к исскуству таки сказать ж)
     
  5. terry

    terry New Member

    Публикаций:
    0
    Регистрация:
    2 июл 2007
    Сообщения:
    7
    пару вопросиков :) :
    locals - не понятно, что туда надо написать....
    0C07h - что это?)

    censored, за помощь, огромнейшее тебе спасибо! ты мастер своего искусства!
     
  6. censored

    censored New Member

    Публикаций:
    0
    Регистрация:
    5 июл 2005
    Сообщения:
    1.615
    Адрес:
    деревня "Анонимные Прокси"
    директива-"разделитель" меток на локальные и глобальные, можно выкинуть -- будет работать и так :)
    http://www.codenet.ru/progr/dos/dos_0020.php
    писалось все по этому справочнику, я уж и не помню номера всех сервисов ;)
     
  7. terry

    terry New Member

    Публикаций:
    0
    Регистрация:
    2 июл 2007
    Сообщения:
    7
    гуд, еще раз спасибо! ;)
     
  8. Fernando_da_Costa

    Fernando_da_Costa Fernando_de_Santos

    Публикаций:
    0
    Регистрация:
    12 авг 2007
    Сообщения:
    2
    Адрес:
    Earth
    Доброго времени суток. Плиз. Подскажите..
    eax 0x0000ABCD
    нужно сделать так чтоб было
    eax 0x0A0B0C0D
    желательно на сразу на Fasm
    зарание спасибо..
     
  9. Quantum

    Quantum Паладин дзена

    Публикаций:
    0
    Регистрация:
    6 янв 2003
    Сообщения:
    3.143
    Адрес:
    Ukraine
    Fernando_da_Costa
    ror eax,8
    aam 10h
    rol eax,10h
    xchg ah,al
    aam 10h
     
  10. Fernando_da_Costa

    Fernando_da_Costa Fernando_de_Santos

    Публикаций:
    0
    Регистрация:
    12 авг 2007
    Сообщения:
    2
    Адрес:
    Earth
    примного благодарен.. В долгу не останусь:)
     
  11. a9d

    a9d New Member

    Публикаций:
    0
    Регистрация:
    26 апр 2006
    Сообщения:
    234
    Адрес:
    Zimbabwe
    Нород возникла проблема при подготавливании лабы. В ней нужно расписать полностью файлы *.lst & *.map (тобиш обьяснить писменно ВСЕ ихнее содержание). А как аказалось это не так-то просто. В нете понахадил лиш только отрывестые описания. Вполне возможно не там искал.
     
  12. TerMed

    TerMed New Member

    Публикаций:
    0
    Регистрация:
    9 сен 2007
    Сообщения:
    2
    Шифрование
    Нужно зашифровать файл неограниченного размера в 16-битной системе. Программа - 50-100 строк. Заранее благодарен. Можно хотя бы функцию открытия файла и просмотра его по блокам.
     
  13. Freeman

    Freeman New Member

    Публикаций:
    0
    Регистрация:
    10 фев 2005
    Сообщения:
    1.385
    Адрес:
    Ukraine
    http://www.wotsit.org/list.asp?al=M

    TerMed, на бейсеке под ДОС?
     
  14. TerMed

    TerMed New Member

    Публикаций:
    0
    Регистрация:
    9 сен 2007
    Сообщения:
    2
    На асме
     
  15. Vov4ick

    Vov4ick Владимир

    Публикаций:
    0
    Регистрация:
    8 окт 2006
    Сообщения:
    581
    Адрес:
    МО
    Код (Text):
    1. makefile:       ; Создание файла
    2.                 mov     ah,3ch
    3.                 mov     cx,00h  ; Атрибуты
    4.                 mov     dx,offset filename ; DS:DX
    5.                 int     21h
    6.                 jc      error      ; AX=errorCode 03h,04h,05h
    7.                 mov     [handle],ax
    8.                 ret
    9.  
    10. crearefile:     ;Create file. >>>> Дает ошибку если файл существует! <<<<
    11.                 mov     ah,5bh
    12.                 mov     cx,00h      ; Атрибуты
    13.                 mov     dx,offset filename ; DS:DX
    14.                 int     21h
    15.                 jc      error          ; AX=ErrCode (03h,04h,05h,50h)
    16.                 mov     [handle],ax
    17.                 ret
    18.  
    19.  
    20. openfile:       ; Открытие файла
    21.                 mov     ax,3d00h+00h     ; Режим открытия
    22.                 mov     dx,offset filename          ; DS:DX
    23.                 int     21h
    24.                 jc      error    ; AX=ErrCode (01h,02h,03h,04h,05h,0Ch,56h)
    25.                 mov     [handle],ax
    26.                 ret
    27.  
    28. closefile:      ; Закрытие файла
    29.                 mov     ah,3eh
    30.                 mov     bx,[handle]
    31.                 int     21h
    32.                 jc      error    ; AX=ErrCode (06h)
    33.                 ret
    34.  
    35. readfile:       ; Чтение файла
    36.                 mov     ah,3fh
    37.                 mov     bx,[handle]
    38.                 mov     cx,1024      ; Длина записи
    39.                 mov     dx,offset input    ; DS:DX
    40.                 int     21h
    41.                 jc      error          ; AX=ErrCode (05h,06h)
    42.                 ret             ; AX=прочитано байт
    43.  
    44. writefile:      ; Запись файла
    45.                 mov     ah,40h
    46.                 mov     bx,[handle]
    47.                 mov     cx,1024      ; Длина записи
    48.                 mov     dx,offset write  ; DS:DX
    49.                 int     21h
    50.                 jc      error        ; AX=ErrCode (05h,06h)
    51.                 ret           ; AX = Записано байт
    52. error:
    53.                 Вывод сообщения об ошибке и выход
    54. ;--------------------------------------------------------------
    55. handle dw ?
    56. filename db "SOMEFILE.DAT",0
    57. input db 1024 dup (?)
    58. write db 1024 dup (?)
    Кусок моей библиотеки. Думаю всё должно быть понятно.
     
  16. amisd

    amisd New Member

    Публикаций:
    0
    Регистрация:
    16 сен 2007
    Сообщения:
    17
    приветствую. проблема с делением, результат получается в любом случае 0. при делении по описанию целочисленная часть записывается в регистр al, но я не могу приравнять ax или любую переменную к al, компиль говорит разные типы-(
    код вот
    Код (Text):
    1. ;zadanie3
    2. A3 dw 2438h
    3. del1 dw 100h
    4. del2 dw 10h
    5. zadanie3 dw ?
    6.  
    7. ;zadanie3
    8. mov ax,A3;ax=2438
    9. mov bx,ax;bx=ax=2438
    10. and ax,0f000h;ax=2000
    11. div del1; dx=ax/100
    12. mov ax,dx;ax=dx=2
    13. mov zadanie3,ax;zadanie3=ax=2
     
  17. KeSqueer

    KeSqueer Сергей

    Публикаций:
    0
    Регистрация:
    19 июл 2007
    Сообщения:
    1.183
    Адрес:
    Москва
    Код (Text):
    1. If source operand is a word
    2.         value, then DX:AX is divided by "src" and the quotient is stored in AX
    3.         and the remainder in DX.
    Т.о. на del1 делится регистровая пара dx:ax (т.к. del1 - двухбайтовая переменная), соответственно в dx перед делением должен быть 0 (xor dx, dx например). Потом результат деления будет в ax, а остаток в dx. Командой mov ax, dx Вы перетираете частное остатком, который равен нулю. Если в zadanie3 нужно частное деления, то просто mov zadanie3, ax после div del1.
     
  18. amisd

    amisd New Member

    Публикаций:
    0
    Регистрация:
    16 сен 2007
    Сообщения:
    17
    KeSqueer
    спасибо) я просто запутался, у меня при выделении числа 2 после операции обнуления чисел числа получается 2000, после деления на 1000 в дебаггере в ах 0000:dntknw:
     
  19. rcarlos

    rcarlos New Member

    Публикаций:
    0
    Регистрация:
    25 сен 2007
    Сообщения:
    3
    Люди если кто знает, подскажите по поводу такой задачки......с портами не умею работать ВАЩЕ. Заранее спасибо!!


    Тема: Состав и структура системы ввода-вывода современного ПК.
    Тема лабораторной работы: Программирование основных режимов обмена интерфейса IEEE-488 (канал общего пользования).

    Контроллер, управляющий обменом по шине IEEE488, использует три порта ввода-вывода процессора.

    - порт 0200h, определяющий режим работы контроллера "говорящий" - "слушающий". Нулевое значение записываемого в порт байта означает режим "говорящий"; ненулевое - режим "слушающий".
    - порт 0202h обеспечивает управление линиями синхронизации и управления либо прием сигналов по этим линиям в соответствии с таблицей 1.

    Табл.1.
    Номер бита 7 6 5 4 3 2 1 0
    Линия УП СД ГП ДП ЗО ДУ ОИ КП

    - порт 0204h обеспечивает установление байта данных на линиях данных.


    Задание для выполнения лабораторной работы:

    1 Разработать алгоритмы и соответствующие программные процедуры на языке высокого уровня информационного обмена по шине IEEE488:
    - вывода байта данных;
    - ввода байта данных;
    - вывода байта команды.

    Вот мои попытки того, что я пытался сделать(обьясните мне как надо делать)(это 3 маленьких програмки)

    Код (Text):
    1. ;          ВВОД БАЙТА ДАННЫХ
    2. ;          
    3. ;ВЫПОЛНИЛ: студент группы 4-СKC-76 Бессмельцкв Андрей
    4.  
    5.  
    6. ;-------Сегмент данных-------------------------------------
    7. DATASG      SEGMENT PARA    'Data'
    8.  
    9.  
    10. DATASG      ENDS               
    11. ;-----------Конец сегмента данных--------------------------
    12.  
    13. ;--------------------Сегмент стека-------------------------
    14. STK     SEGMENT STACK
    15. DB      256 DUP ('?')
    16. STK         ENDS               
    17. ;---------------Конец сегмента стека-----------------------
    18.  
    19. ;------------------------Сегмент кода---------------------
    20. CODE        SEGMENT PARA    PUBLIC  'CODE'
    21. MAIN    PROC FAR
    22. ASSUME  CS:CODE, DS:DATASG, ES:DATASG, SS:STK
    23.  
    24. XOR AL,AL     ; устанавливаем на адаптере 0,
    25. MOV DX,0200h      ; показываем, что контроллер cлушатель
    26. MOV DX,0204h
    27. IN  AL,DX     ;вводим  байт
    28.          
    29.  
    30.  
    31. CODE ENDS
    32. MAIN ENDP
    33. END  MAIN
    34.  
    35.  
    36.  
    37.  
    38. ;          ВЫВОД БАЙТА ДАННЫХ
    39. ;          
    40. ;ВЫПОЛНИЛ: студент группы 4-СKC-76 Бессмельцкв Андрей
    41.  
    42.  
    43. ;-------Сегмент данных-------------------------------------
    44. DATASG      SEGMENT PARA    'Data'
    45.  
    46.  
    47. DATASG      ENDS               
    48. ;-----------Конец сегмента данных--------------------------
    49.  
    50. ;--------------------Сегмент стека-------------------------
    51. STK     SEGMENT STACK
    52. DB      256 DUP ('?')
    53. STK         ENDS               
    54. ;---------------Конец сегмента стека-----------------------
    55.  
    56. ;------------------------Сегмент кода---------------------
    57. CODE        SEGMENT PARA    PUBLIC  'CODE'
    58. MAIN    PROC FAR
    59. ASSUME  CS:CODE, DS:DATASG, ES:DATASG, SS:STK
    60.  
    61. XOR AL,AL    ; устанавливаем на адаптере 0,
    62. MOV DX,0200h     ; показываем, что контроллер говорящий
    63. MOV AL,10010101b  ; заносим байт данных
    64. MOV DX,0204h
    65. OUT DX,AL    ; байт данных на шине
    66.          
    67.  
    68.  
    69. CODE ENDS
    70. MAIN ENDP
    71. END  MAIN
    72.  
    73.  
    74.  
    75.  
    76. ;          ВЫВОД БАЙТА  КОМАНДЫ
    77. ;          
    78. ;ВЫПОЛНИЛ: студент группы 4-СKC-76 Бессмельцкв Андрей
    79.  
    80.  
    81. ;-------Сегмент данных-------------------------------------
    82. DATASG      SEGMENT PARA    'Data'
    83.  
    84.  
    85. DATASG      ENDS               
    86. ;-----------Конец сегмента данных--------------------------
    87.  
    88. ;--------------------Сегмент стека-------------------------
    89. STK     SEGMENT STACK
    90. DB      256 DUP ('?')
    91. STK         ENDS               
    92. ;---------------Конец сегмента стека-----------------------
    93.  
    94. ;------------------------Сегмент кода---------------------
    95. CODE        SEGMENT PARA    PUBLIC  'CODE'
    96. MAIN    PROC FAR
    97. ASSUME  CS:CODE, DS:DATASG, ES:DATASG, SS:STK
    98.  
    99. XOR AL,AL     ; устанавливаем  0,
    100. MOV DX,0202h     
    101. IN  AL,DX
    102. AND AL,7Fh
    103. OUT DX,AL     ;выыодим  байт
    104. XOR AL,AL
    105. MOV DX,0204h
    106. MOV AL,10110101b
    107. IN  AL,DX
    108.          
    109.  
    110.  
    111. CODE ENDS
    112. MAIN ENDP
    113. END  MAIN
     
  20. Hanter

    Hanter New Member

    Публикаций:
    0
    Регистрация:
    14 окт 2007
    Сообщения:
    2
    Приветствую всех! Надо написать прогу, которая сдвигала бы определенным образом пиксели на рабочем столе. Можно получить к ним доступ на асме?