Форум программистов, компьютерный форум, киберфорум
Наши страницы
Assembler, MASM, TASM
Войти
Регистрация
Восстановить пароль
 
Elvirin
0 / 0 / 0
Регистрация: 21.12.2015
Сообщений: 6
#1

Что за ошибка: "286 exception interrupt"?

22.01.2016, 01:00. Просмотров 428. Ответов 3
Метки нет (Все метки)

Что значит ошибка "286 exception interrupt"?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
22.01.2016, 01:00
Ответы с готовыми решениями:

Есть строка. Нужно сделать так, чтобы "re" и "not" заменялись на "***".
Есть строка. Нужно сделать так, чтобы "re" и "not" заменялись на "***". Data...

Что означает "Знание архитектуры х86", какие книги почитать, что нужно знать и уметь
Нашёл вакансию junior программиста С++, но нужно знание архитектруы х86. Что...

Изъять слова, которые имеют префикс "re", "not", "be"
Заданы символьная строка. Слова и идентификаторы разделяются хотя бы одним...

Необходимо строку тип ""str1" "str2"",0 преобразовать в строку типа
Необходимо строку тип ""str1" "str2"",0 преобразовать в строку типа "str2",0...

Тип данных "%" в IDA Pro - что это
Начал изучать ассемблер (работаю с ARM процессорами) Однажды понадобилось...

3
R71MT
3214 / 1275 / 284
Регистрация: 29.07.2014
Сообщений: 2,301
Записей в блоге: 5
22.01.2016, 01:14 #2
286-ой проц не знает такую инструкцию, наверное. Где сам код?
0
Elvirin
0 / 0 / 0
Регистрация: 21.12.2015
Сообщений: 6
22.01.2016, 01:17  [ТС] #3
Assembler
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
;1) Написать подпрограмму для вычисления арифметической суммы элементов больших одного, 
;но меньших другого заданного значения некоторого массива слов со знаком. С помощью этой 
;подпрограммы обработать два массива, вычисляя в первом сумму элементов 1000<X<10000, а 
;во втором - (-20000)<X<20000. Для передачи параметров использовать стек.
 
Name Program1
.286
    min1 = 3E8h         ; промежуток от 1000 до 10000
    max1 = 2710h
    min2 = 0B1E0h       ; промежуток от -20000 до 20000
    max2 = 4E20h
 
;Описание  переменных
Data SEGMENT
    Arr1 DW 4B10h, 8520h, 3E5Dh, 7D61h, 3834h, 6801h 
    End1 label word
    Len1 = (offset End1 - offset Arr1)/type Arr1
    Sum1 DD (0)  
    
    Arr2 DW 8300h, 1F64h, 0F448h, 13ECh, 0EC14h, 0D05h  
    End2 label word
    Len2 = (offset End2 - offset Arr2)/type Arr2
    Sum2 DD (0) 
          
Data ends
 
STK SEGMENT STACK
    DW 32 dup(?)
    StkTop LABEL  word
STK ends
 
Code SEGMENT
    ASSUME CS: Code, DS: Data, SS: Stk
    
Summa   PROC
    PUSH BP
    MOV BP, SP
    MOV SI, [BP+4]  ;загружаем адрес исходного массива              
    MOV DI, [BP+6]  ;загружаем адрес суммы
    MOV CX, [BP+8]  ;загружаем счетчик элементов
    MOV BX, [BP+10] ;загружаем минимум
    MOV DX, [BP+12] ;загружаем максимум
    MOV AX, 0       ;обнуляем 
    MOV [DI], AX    ;сумму через аккумулятор 
 
        
M1: MOV AX, [SI]    ; чтение элемента 
    CMP AX, BX      ; сравниваем (bx - минимум) 
    JLE M2          ; если меньше или равно то идем на M2 
    CMP AX, DX      ; сравниваем
    JGE M2          ; если больше или равно идем на M2                     
    PUSH DX         ; сохраняем значение DX в стеке
    CWD             ; расширение числа
    ADD [DI], AX    ; сложение числа 
    ADC [DI+2], DX  ; с накопителем
    POP DX          ; восстановление значение DX из стека
    
M2: ADD SI, 2       ; переходим на следующее число 
    LOOP M1         ; цикл  
    POP BP
    RET 10
Summa EndP
 
; Основная программа
Start:   MOV AX, Data
     MOV DS, AX
     MOV AX, Stk
     MOV SS, AX
     LEA SP, StkTop
            ;передача парам-ов первого массива в стек
            PUSH Max1
            PUSH Min1
            PUSH Len1
            PUSH OFFSET Sum1
            PUSH OFFSET Arr1
            CALL Summa
            ;передача парам-ов второго массива в стек
            PUSH Max2
            PUSH Min2
            PUSH Len2   
            PUSH OFFSET Sum2            
            PUSH OFFSET Arr2
            CALL Summa
            
    MOV AX, 4C00H
    INT 21H
Code Ends
End Start
0
KyberMax
Terminator of naked apes
827 / 134 / 34
Регистрация: 13.02.2015
Сообщений: 328
24.01.2016, 17:59 #4
Уж не сообщение ли это BIOS (из-за сбоя по причине недостаточного размера стека, например? ;о) Кстати о стеке: зойчем его вообще настраивать, если это и так делает загрузчик (тем более, здесь у тебя ошибка: при перенесении стека необходимо запретить прерывания, например ;о)

Даже при взгляде по диагонали видна ещё одна ошибка: ты обнуляешь только младшее слово суммы (на результате не сказывается, т.к там изначально и так 0, например ;о)

И вообще, к чему такая рукопашность: все эти смещения параметров, последовательность загрузки в стек и даже границы и массивы в шестнадцатиричном виде? Всю эту унылую возню с унылым цифриём можно (и нужно ;о) переложить на числогрыз, например:
Assembler
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
;
.286
.MODEL TINY, STDCALL
;
Min1  EQU   1000        ; 3E8h
Max1  EQU   10000       ; 2710h
Min2  EQU   -20000      ; 0B1E0h
Max2  EQU   20000       ; 4E20h
;
PW    TYPEDEF     Ptr Word
PD    TYPEDEF     Ptr Dword
;
rangeSum    PROTO pwArr:PW, wArrLen:Word, wMin:Word, wMax:Word, pdSum:PD
;
.DATA
dwArr1      DW    19216, -1312, 15965, 32097, 26625
; 4B10h, 8520h, 3E5Dh, 7D61h, 3834h, 6801h
dwArr2      DW    -768, 8036, -29768, 5100, -27668, 3333
; 8300h, 1F64h, 0F448h, 13ECh, 0EC14h, 0D05h
;
.DATA?
udSum1      DD    ?
udSum2      DD    ?
;
.CODE
      ORG   100h
START:
      INVOKE rangeSum, Addr dwArr1, LengthOf dwArr1, Min1, Max1, Addr udSum1
      INVOKE rangeSum, Addr dwArr2, LengthOf dwArr2, Min2, Max2, Addr udSum2
      RET
;
rangeSum PROC Uses CX DX BX SI DI pwarr:PW, warrlen:Word, wmin:Word, wmax:Word, pdsum:PD
      MOV   SI, pwarr
      MOV   CX, warrlen
      XOR   BX, BX
      XOR   DI, DI
sumloop:
      LODSW
      CMP   AX, wmin
      JLE   nextitem
      CMP   AX, wmax
      JGE   nextitem
      CWD
      ADD   BX, AX
      ADC   DI, DX
nextitem:
      LOOP  sumloop
      MOV   SI, pdsum
      MOV   [SI], BX
      MOV   [SI + SizeOf Word], DI
      RET
rangeSum ENDP
;
      END   START
;
Как-то так ("это Ассемблер, детка" ©Taatshi ;о)
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
24.01.2016, 17:59

Что можете посоветовать в качестве "задачника" по ассемблеру
Собственно, так получилось, что 28 числа нужно будет пересдавать...

Заменить во вводимом тексте каждое слово "ЭВМ" словом "машина"
Здравствуйте. Поможете разобраться с ниже приведенной задачей: Заменить во...

Дана строка "ababab", из этого слова надо получить "aaa"
Собственно сабж. Дана строка &quot;ababab&quot;, надо удалить буквы &quot;b&quot; и получить слово...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru