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

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

  1. FatMoon

    FatMoon New Member

    Публикаций:
    0
    Регистрация:
    28 ноя 2002
    Сообщения:
    954
    Адрес:
    Russia
    не вижу проблемы.

    for i=2 to m
    ...
    if i=n print y
    next
    print x

    не?
     
  2. vistar

    vistar New Member

    Публикаций:
    0
    Регистрация:
    15 окт 2011
    Сообщения:
    1
    В лабораторной такие задания:
    a) Содержимое приемо/передатчика поместить в 7-й РОН 3-го банка.
    b) Организовать под стек регистры банка 3 и поместить в стек А, РSW, PO, P1.
    c) По адресу 0BH в ВПД находится таблица 3х8 , первые 3 элемента последней строки поместить в ВПД, начиная с адреса 0АВСН.
    Программирование под мк51.
    на счет пункта а) сделал так: MOV 1fh, sbuf
    Подскажите как во втором пункте организовать регистры. Подозреваю что там надо в какой то регистр записать адрес начала 3-го банка.
    А на счет 3-го пункта не знаю как получить эти 3 первые элемента.
    Заранее благодарен за помощь.
     
  3. Ahito

    Ahito New Member

    Публикаций:
    0
    Регистрация:
    25 окт 2011
    Сообщения:
    7
    Доброго времени суток!
    Не понимаю сути задания, объясните что почитать и как побыстрее разобраться?
    хочу именно разобраться в предмете.

    Сформировать из приведенной ниже заготовки фрагмент программы на языке Ассемблера IBM PC, заменив обозначения N1-N5 символами, указанными в таблице вариантов задания.

    mov N1,N2
    mov cx,0003
    l1: N3 N1,1
    mov N4,N1
    xor N4,N5
    mov N1,N4
    loop l1

    Описать объектный код полученной программы и последовательность состояний регистров, задействованных в ее выполнении.

    Варианты задания
    ┌──────┬────┬────────┬─────┬──────┬────┐
    │ N1 │ N2 │ N3 │ N4 │ N5│
    │ ax │ 2b5dH │ rcr │ dx │ 20│


    обозначения N1-N5 заменил символами, указанными в таблице вариантов задания. получился такой код

    вопрос что он делает? как писать объектный код полученной программы и последовательность состояний регистров, задействованных в ее выполнении?

    mov ax,2b5dH
    mov cx,0003
    l1: rcr ax,1
    mov dx,ax
    xor dx,20
    mov ax,dx
    loop l1

    Всем спасибо!
     
  4. DEEP

    DEEP Андрей

    Публикаций:
    0
    Регистрация:
    27 апр 2008
    Сообщения:
    491
    Адрес:
    г. Владимир
    Насколько понимаю, имеется в виду машинный код.
    Т.е. Вам предлагают поработать транслятором, и оттранслировать данный кодес в нули и единицы.
    Тут уж я Вам не помощник, т.к. это, во-первых, делается не единственным образом (например, метку можно сделать базозависимой или независимой), а во-вторых, можно просто скомпилять .COM-файл и открыть его в дебагере / HEX-редакторе.

    Здесь задействованы 5 регистров: AX (аккумулятор), CX (счётчик), DX (данные), FL (флаги) и IP (инструкция).
    Ну и ещё неявно задействован CS (кодовый сегмент), но он не изменяется при исполнении данного кода.

    Сначала (первые 2 команды) в AX помещается число, в битовом представлении имеющее вид 0010 1011 0101 1101, а в CX — количество итераций последующего цикла (3 штуки).
    Далее идёт цикл.
    Первая команда делит AX на два и помещает остаток деления во флаг C (младший бит регистра FL).
    Вторая копирует в DX содержимое AX.
    Третья инвертирует в DX второй и четвёртый биты, нумерация с нуля: 20 = 14h = 0001 0100 (далее, чтобы не лажать на сдаче лабы, советую проследовать вот сюда).
    Четвёртая копирует содержимое DX в AX.
    Ну и пятая отнимает от CX единицу, сравнивает результат с нулём, и если ещё не нуль, то переходит на метку L1.

    Что насчёт регистра IP — он изменяется после выполнения каждой команды, изменяясь на адрес следующей команды на выполнение.
    IP базозависим. Стандартная база .COM`овской программы — 100h. Так, до выполнения первой инструкции, IP = 100h. После её выполнения, он становится равен адресу второй команды (103h). Особое внимание советую обратить на переход по метке — там IP изменяется или на адрес команды RCR, или же (при CX == 0) на адрес следующей за LOOP команды.
     
  5. Ahito

    Ahito New Member

    Публикаций:
    0
    Регистрация:
    25 окт 2011
    Сообщения:
    7
    Спасибо вам большое, начало уже в голове что-то проясняться. Читаю Абеля.

    я опечатался, не "как писать объектный код" а "как Описать объектный код".

    Чуть почитаю ещё и через денек задам вопросы, спасибо!
     
  6. DEEP

    DEEP Андрей

    Публикаций:
    0
    Регистрация:
    27 апр 2008
    Сообщения:
    491
    Адрес:
    г. Владимир
    Ahito,
    И, кстати, забыл описать одну тонкость: RCR не просто делит операнд на 2, а ещё и заносит в старший бит предыдущее значение флага C.
    Однако, это может иметь какой-то вес только на первой итерации, т.к. в дальнейшем, бит C очищается при выполнении команды XOR.

    И, да — не C единым: так, RCR меняет ещё и флаг O (11й бит FL, нумерация как всегда с нуля), а XOR меняет, помимо C, ещё и P, A, Z, S и O.
    Причём, что важно — флаг A после XOR вообще имеет неопределённое значение (т.е. мало зависящее от входного операнда).

    Для справки, вот полная структура EFL (это 32-разрядное расширение FL; сейчас для Вашей задачи важны только биты с 0 по 15).
    Также для справки, вот отличный справочник по командам X86`ой арихтектуры — всячески рекомендую.
     
  7. Sholar

    Sholar New Member

    Публикаций:
    0
    Регистрация:
    16 окт 2011
    Сообщения:
    189
    Можно ли gcc заставить создать чистый бинарный файл?
     
  8. Ahito

    Ahito New Member

    Публикаций:
    0
    Регистрация:
    25 окт 2011
    Сообщения:
    7
    Ув. форумчане нужно помочь с контрольной, так получилось что совсем нет времени разобраться, а сдавать очень скоро.
    кто может помочь (естественно не бесплатно) напишите.
    Задание - http://ifolder.ru/26773968 вариант седьмой
     
  9. valterg

    valterg Active Member

    Публикаций:
    0
    Регистрация:
    19 авг 2004
    Сообщения:
    2.105
    Для этого тут раздел Commerce !
     
  10. Sholar

    Sholar New Member

    Публикаций:
    0
    Регистрация:
    16 окт 2011
    Сообщения:
    189
    Как в фасме поместить в стек адресс локальной структуры?
    Код (Text):
    1. local Struct:SomeStruct
    2. push Struct
    выдает ошибку
     
  11. Ezrah

    Ezrah Member

    Публикаций:
    0
    Регистрация:
    22 мар 2011
    Сообщения:
    411
    lea eax, [Struct]
    push eax
     
  12. l_inc

    l_inc New Member

    Публикаций:
    0
    Регистрация:
    29 сен 2005
    Сообщения:
    2.566
    Sholar
    ld может поддерживать --oformat binary. Имеет смысл вдобавок пострипать символы ключиком -s. Для x86/x64 не пробовал, но для тех архитектур, где мне надо было, чистые бинарники получались.
     
  13. Grenzwert

    Grenzwert New Member

    Публикаций:
    0
    Регистрация:
    8 ноя 2011
    Сообщения:
    1
    помогите до конца разобраться в коде и объяснить как составлять алгоритм
    проверьте пожалуйста комментарии и подскажите, для чего команды, помеченные "?"
    так же нужно ещё составить алгоритм программы в виде блок-схемы. в принципе думаю что справлюсь и сам, если всё-таки пойму до конца все комманды
    первая лабораторная, делали наспех, многое упустил.
    сделал с помощью преподавателя
    вот задание:
    Программа пересылки массива из 16h байтов памяти из внешнего ОЗУ с адресом 0Аh во внешнее ОЗУ с адресом 200h.
    Для микропроцессора AT89C51

    вот текст программы
    Код (Text):
    1. addr1 equ 0Ah                   ; начальный адрес ОЗУ 1
    2. lngequ 16h                          ; длина массива
    3. addr2 equ 200h                 ; конечный адрес ОЗУ 2
    4. constequ 0bch                    ; константа заполнения
    5. jmpstart                ; условный переход
    6. org 1000h                            ; ?
    7. db 1,10,4,11,9                     ; случайный набор чисел, для заполнения памяти
    8.  
    9.  
    10. org 30h   ; ?
    11. start:
    12. movA, #const                     ; загрузка константы в регистр-аккумулятор
    13. movdptr, #addr1              ; задаем регистру dptr начальный адрес
    14. movr2, #lng    ; загрузка длины в регистр r2
    15.  
    16. loop:
    17. movx @dptr,A         ; пересылка данных из аккумулятора в dptr
    18. incdptr                                  ; увеличиваем содержимое регистра dptr на 1
    19. djnzr2, loop                         ; вычитаем 1 из содержимого регистра r2
    20.  
    21. movr1, #addr1                  ; задаем регистру r1 начальный адрес
    22. movr3, #0   ; записываем в регистр r3  0
    23. movr4, #1   ; записываем в регистр r4  1
    24. movdptr, #addr2 ; задаем регистру dptr адресaddr2
    25. movr2, #lng    ; загрузка длины в регистр r2
    26.  
    27. loop1:
    28. movdpl, r1  ; ? неизвестные мне команды.как я понял мы переносили по        разрядам. dpl младший разряд? и как здесь правильно описать
    29. movdph, #0                       ; ? старший разряд
    30. movx A,@dptr    ; пересылка данных в аккумулятор из addr2
    31. movdpl, r3  ; ?
    32. movdph, r4  ; ?
    33. movx @dptr,A    ; пересылка данных из аккумулятора в dptr
    34. incr1   ; увеличиваем содержимое регистра r1 на 1
    35. incr3   ; увеличиваем содержимое регистра r3 на 1
    36. djnz r2, loop1  ; вычитаем 1 из содержимого регистра r2
    37.  
    38. end
    заранее спасибо
     
  14. valterg

    valterg Active Member

    Публикаций:
    0
    Регистрация:
    19 авг 2004
    Сообщения:
    2.105
    Ключ --oformat действительно работает, но тянет в бинарник лишнюю секцию .eh_frame
    Гораздо проще воспользоваться утилитой objcopy.

    objcopy -O binary -j.text test.o test

    вытаскивает только секцию кодов
     
  15. dessaber

    dessaber New Member

    Публикаций:
    0
    Регистрация:
    20 ноя 2011
    Сообщения:
    26
    Нарисовать эллипс
    Здравствуйте, дорогие люди. Дали задание - нарисовать эллипс. Придумал я рисовать так - вспомнил уравнение эллипса; возьму Y, к примеру, за -B; Х - за -A; буду наращивать Х до тех пор, пока ((X^2)/(A^2))+((Y^2)/B^2)) не равно 1; как только равно - нарисовал четыре точки: (Х, Y), (-X,Y), (-X,-Y), (X,-Y); скинул Х, нарастил Y и т.д. Вот до куда дошел:

    Код:

    Код (Text):
    1. .model  small
    2. .stack  100h
    3. .data
    4. message1 db  0ah,0dh,'Enter A :  $'      
    5. message2 db  0ah,0dh,'Enter B :  $'
    6. message3 db  0ah,0dh,'Press <R> to repeat...$'
    7. x db 0
    8. y db 0
    9. a db 0
    10. b db 0
    11. form db 0            ;((x^2)/(a^2))+((y^2)/(b^2))
    12. .code
    13. mov     ax,@data
    14. mov     ds,ax
    15. xor     ax,ax                    
    16. ;----------------------A-INPUTIN-------------------------
    17. mov ah,9                               ;function for a string inputin
    18. mov dx, offset message1                ;sendin the string to dx
    19. int 21h                                ;callin an interception
    20. mov ah, 1                              ;function for a symbol inputin
    21. int 21h  
    22. sub al,30h        
    23. mov a,al
    24. ;---------------------B-INPUTIN--------------------------
    25. xor al,al
    26. mov ah,9                              
    27. mov dx, offset message2                
    28. int 21h                                  
    29. mov ah, 1        
    30. int 21h      
    31. sub al,30h  
    32. mov b,al
    33. ;---------------------------------------------------------------
    34. mov cl,a                               ;sendin A to CL
    35. mov x,cl                               ;sendin CL to X
    36. neg x                                  ;makin X equal to -A
    37. xor cl,cl
    38.  
    39. mov cl,b                    
    40. mov y,cl
    41. neg y                                  ;makin Y equal to -B
    42. xor cl,cl
    43. computin:          
    44. mov al,x                               ;sendin X to AL
    45. mul x                                  ;makin AХ equal to X^2
    46. div a
    47.  
    48.  
    49.  
    50. xor ax,ax
    51. mov ax,4c00h
    52. int 21h
    53. END
    После ввода числа B окошко закрывается сразу. По регистрам прогнал - divide by zero. По переменным прогнал - вроде все на месте,у А конкретное значение, нe нуль. В чем косяк?
     
  16. Mikl___

    Mikl___ Супермодератор Команда форума

    Публикаций:
    14
    Регистрация:
    25 июн 2008
    Сообщения:
    3.797
    dessaber
    Для начала научись рисовать эллипс с уже известными А и В -- научишься, следующим шагом будет вывод с заданными пользователем А и В.
     
  17. Rin

    Rin New Member

    Публикаций:
    0
    Регистрация:
    22 ноя 2010
    Сообщения:
    6
    Здравствуйте, чатлане WASM'a.
    Задача была такова: Сравнить 2 текст. файла и вывести рез-ты сравнения в третий, созданный мной файл.Сравнивать , он сравнивает. Это проверено. А теперь...
    Убейте меня пожалуйста. Меня уже заканала проблема с записью в файл.
    Как кажется, в hehdlerOut не сохраняется или сбивается дескриптор на файл вывода. Ибо пытался перед вызовом функции 40h (запись) просмотреть, что хранится в hendlerOut.
    Как только не пытался, чтобы эта функция грёбаная запахала. Ничего не получилось. Бьюсь уже 4 день подряд, просматривая книги и лазая в инете.
    Прошу, исправьте мой идуский код. Спасибо, если кто-то поможет.
    Код (Text):
    1. .model small
    2. .stack
    3. .data
    4.     noCmpSym db "-" ;
    5.     okCmpSym db "+" ;
    6.  
    7.     msgEnterFName db "Enter #x file name: $"
    8.  
    9.  
    10.     msgError   db "Error!",10,13,"$"
    11.    
    12.     msgErrorAccess db "Error access to output file!",10,13,"$"
    13.     msgErrorIdent  db "Error ident of output file!",10,13,"$"
    14.    
    15.     msgErrorFileWrite  db "Error file write!$"
    16.     msgErrorFileRead   db "Error file read!$"
    17.     msgErrorFileOpen   db "Error file open!$"
    18.  
    19.    
    20.     msgNoEr1 db "first in file open",10,13,"$"
    21.     msgNoEr2 db "second in file open",10,13,"$"
    22.     msgNoEr3 db "output file created",10,13,"$"
    23.    
    24.     msgComplite db 10,13,"Programm is complited",10,13,"$"
    25.    
    26.    
    27.     fnameout db 'out.txt',0
    28.    
    29.     handlerIn1 dw ?
    30.     handlerIn2 dw ?
    31.     handlerOut dw ?
    32.    
    33.    
    34.    
    35.     fNameAdr db 254         ; макс длинна строки (адрес начала строки)
    36.     fNameLen db 0           ; длинна строки
    37.     db 254 dup (?)          ; строка
    38.    
    39.     fbuf1 db 1 dup (?)
    40.     fbuf2 db 1 dup (?)
    41.    
    42.     flagsEof db 0,0
    43.    
    44. .code
    45. main   proc
    46.    
    47.    mov ax,@data
    48.    mov ds,ax
    49.    xor ax,ax  
    50.  
    51.  
    52. ;;;;; Открытие первого фйала ;;;;;;;;;
    53. ;;;;; Принимаем имя для первого файла ;;;
    54.    
    55.    ;; Подставляем номер файла в приглашение
    56.    mov bx, offset msgEnterFName
    57.    mov byte ptr [bx+7],31H
    58.    
    59.    ;; Выводим приглашение
    60.    mov ah,09h
    61.    mov dx, offset msgEnterFName
    62.    int 21h
    63.    
    64.    ;; Принимаем имя первого файла
    65.    mov ah, 0ah
    66.    mov dx, offset fNameAdr
    67.    int 21h
    68.  
    69.                           ; Обрабатываем введенное значение, приводим его к имени файла
    70.    xor bx,bx
    71.    mov bl,ds:fNameLen     ; bl - длина введенной строки
    72.    add bx,dx              ; получаем смещение к концу строки    
    73.    mov byte ptr [bx+2],0  ; запишем 0 в конец строки
    74.  ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;    
    75.  
    76.   call NewStr ; перевод строки
    77.  
    78.  ;;;; Открываем первый файл ;;;;;;;;;;;
    79.    mov dx, offset fNameAdr
    80.    add dx, 2
    81.    mov ah,3dh         ; Открыть файл
    82.    mov al,0       ; Режим доступа - только чтение
    83.    int 21h            ; открываем первый файл
    84.    
    85.    jc erroFileOpen    ; уходим на ошибку если CF=1
    86.  
    87.    mov handlerIn1, ax ; сохраняем указатель на первый файл
    88. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;  
    89. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
    90.  
    91.  
    92.  
    93.  
    94. ;;;;; Открытие второго фйала ;;;;;;;;;
    95. ;;;;; Принимаем имя для второго файла ;;;
    96.    
    97.    ;; Подставляем номер файла в приглашение
    98.    mov bx, offset msgEnterFName
    99.    mov byte ptr [bx+7],32H
    100.    
    101.    ;; Выводим приглашение
    102.    mov ah,09h
    103.    mov dx, offset msgEnterFName
    104.    int 21h
    105.    
    106.    ;; Принимаем имя второго файла
    107.    mov ah, 0ah
    108.    mov dx, offset fNameAdr
    109.    int 21h
    110.  
    111.    ;; Обрабатываем введенное значение, приводим его к имени файла
    112.    xor bx,bx
    113.    mov bl,ds:fNameLen     ; bl - длинна введенной строки
    114.    add bx,dx              ; получаем смещение к концу строки    
    115.    mov byte ptr [bx+2],0  ; запишем 0 в конец строки
    116.  ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;    
    117.  
    118.   call NewStr ; перевод строки
    119.  
    120.  ;;;; Открываем второй файл ;;;;;;;;;;;
    121.    mov dx, offset fNameAdr
    122.    add dx, 2    
    123.    mov ah,3dh       ; открыть файл
    124.    mov al,0     ; режим доступа - только чтение
    125.    int 21h              ; открываем второй файл
    126.    
    127.    jc erroFileOpen    ; уходим на ошибку если CF=1
    128.  
    129.    mov handlerIn2, ax ; сохраняем указатель на второй файл
    130. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;  
    131. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
    132.    
    133. ;;;;;; Создаем третий файл для вывода ;;;;;;;;;;;
    134.    mov ah,3ch           ; создать файл
    135.    mov cx,0         ; атрибуты - обычный файл
    136.    mov dx, offset fnameout  ; имя файла
    137.    int 21h  
    138.    
    139.    jc  erroFileOpen
    140.  
    141.    mov handlerOut,ax
    142.    
    143.    mov   ah,09h         ; вывод сообщения на экран
    144.    mov   dx, offset msgNoEr3    ; это выводим
    145.    int   21h  
    146.    
    147. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
    148. ;;;;;;;;;;;;;Логика;;;;;;;;;;;;;;;;;
    149. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
    150.    
    151.    
    152. ;;;; Читаем файлы ;;;;
    153. readFiles:
    154.  
    155.       ;; обнуляем флаги окончания файлов
    156.       mov [flagsEof], 0
    157.       mov [flagsEof+1], 0
    158.  
    159.       ;; обнуляем буфер чтения файлов
    160.       mov [fbuf1], 0
    161.       mov [fbuf2], 0  
    162.  
    163.       ;;;;;;;;;;;;;;;;;;считываем из первого;;;;;;;;;;;;;;;;;;;;
    164.       mov ah, 3fh
    165.       mov bx, handlerIn1
    166.       mov dx, offset fbuf1
    167.       mov cx, 1
    168.       int 21h
    169.  
    170.  
    171.      jnc File1NotEof_1 ; если чтение не удалось
    172.       mov [flagsEof], 1
    173.  
    174. File1NotEof_1:
    175.  
    176.       cmp ax,0
    177.       jnz File1NotEof_2 ; если байт не считан
    178.       mov [flagsEof], 1
    179.  
    180. File1NotEof_2:
    181.  
    182.       ;;;;;;;;;;;;;;;;;;считываем из второго ;;;;;;;;;;;;;;;;;;;;;
    183.       mov ah, 3fh
    184.       mov bx, handlerIn2
    185.       mov dx, offset fbuf2
    186.       mov cx, 1
    187.       int 21h  
    188.  
    189.       jnc File1NotEof1 ; если чтение не удалось
    190.       mov [flagsEof+1], 1
    191.  
    192. File1NotEof1:
    193.  
    194.       cmp ax,0
    195.       jnz File1NotEof2 ; если байт не считан
    196.       mov [flagsEof+1], 1
    197.  
    198. File1NotEof2:
    199.  
    200.       ;; Если оба файла кончились, то выходим из цикла
    201.       mov dl, [flagsEof]
    202.       mov bl, [flagsEof+1]
    203.       and dl,bl
    204.       cmp dl,1
    205.       jz FilesWasEof  
    206.  
    207.       mov dl,[fbuf2]
    208.       mov bl,[fbuf1]
    209.       cmp dl,bl
    210.       jz IsCmp
    211. NoCmp:
    212.  
    213.       mov bx, offset handlerOut ;вывод в файл
    214.             ;     mov bx, 1                  ;вывод на экран
    215.       lea dx, offset noCmpSym
    216.       mov cx, 1
    217.           mov ah, 40h
    218.       int 21h  
    219.       jc erroFileWrite
    220.  
    221.       jmp readFiles ;прыгаем на повторное чтение
    222. IsCmp:
    223.  
    224.       mov bx, offset handlerOut ;вывод в файл
    225.             ;     mov bx, 1                  ;вывод на экран
    226.       lea dx, offset okCmpSym
    227.       mov cx, 1
    228.           mov ah, 40h
    229.       int 21h  
    230.       jc erroFileWrite
    231.  
    232.       jmp readFiles ;прыгаем на повторное чтение
    233.  
    234. FilesWasEof:
    235.        
    236.        mov   ah,09h
    237.        mov   dx, offset msgComplite
    238.        int   21h
    239.        jmp Exit ;на выход
    240.    
    241. error:  
    242.        call NewStr
    243.        mov   ah,09h
    244.        mov   dx, offset msgError
    245.        int   21h
    246.        jmp Exit ;на выход
    247.  
    248. erroFileRead:  
    249.        call NewStr
    250.        mov   ah,09h
    251.        mov   dx, offset msgErrorFileRead
    252.        int   21h
    253.        jmp Exit ;на выход
    254.    
    255. erroFileOpen:  
    256.        call NewStr
    257.        mov   ah,09h
    258.        mov   dx, offset msgErrorFileOpen
    259.        int   21h
    260.        jmp Exit ;на выход
    261.  
    262. erroFileWrite:
    263.        cmp ax, 05h
    264.        jz errorAccess
    265.    
    266.        cmp ax, 06h
    267.        jz errorIdent
    268.  
    269.        mov   ah,09h
    270.        mov   dx, offset msgErrorFileWrite
    271.        int   21h
    272.        jmp Exit ;на выход
    273.    
    274.  errorAccess:  
    275.        mov   ah,09h
    276.        mov   dx, offset msgErrorAccess
    277.        int   21h
    278.        jmp Exit ;на выход
    279.  errorIdent:
    280.        mov   ah,09h
    281.        mov   dx, offset msgErrorIdent
    282.        int   21h
    283.        jmp Exit ;на выход
    284.  
    285. Exit:  
    286.        mov ah,0Ah
    287.        int 21h
    288.  
    289.        mov   ax,4c00h
    290.        int   21h  
    291.    
    292.    
    293. main   endp
    294.  
    295. ;***********Процедура перевода строки**********
    296. NewStr proc
    297.     mov dl,13
    298.     mov ah,2
    299.     int 21h
    300.  
    301.     mov dl,10
    302.     mov ah,2
    303.     int 21h
    304.     ret
    305. NewStr endp
    306. ;***********/Процедура перевода строки**********
    307.  
    308. end main
     
  18. l_inc

    l_inc New Member

    Публикаций:
    0
    Регистрация:
    29 сен 2005
    Сообщения:
    2.566
    Rin
    Сохраняется там всё нормально. А вот используется неправильно.
    Код (Text):
    1. NoCmp:
    2.  
    3.       mov bx, offset handlerOut     ;Ошибка. С какой стати offset, если передавать нужно значение дескриптора, а не указатель на дескриптор?
    4.             ;      mov bx, 1
    5.       lea dx, offset noCmpSym      ;Не ошибка, но лучше mov dx,offset noCmpSym. Результат тот же, но на байт короче.
    Аналогично для случая по метке IsCmp.
     
  19. Rin

    Rin New Member

    Публикаций:
    0
    Регистрация:
    22 ноя 2010
    Сообщения:
    6
    Благодарствую, I_inc! Пипец, как выручил.
     
  20. l_inc

    l_inc New Member

    Публикаций:
    0
    Регистрация:
    29 сен 2005
    Сообщения:
    2.566
    Rin
    Ник немного не такой, а так пожалуйста. :) Вопрос поставлен корректно, видно, что сами потрудились, код приведен полностью, неплохо откомментирован, критическая ошибка по сути одна... Так что ответить было только в удовольствие. :)

    Ну разве что враждебный компилятор используете :), но в этом разделе инструмент обычно не по собственному желанию выбирается.