Автор |
Сообщение |
03.04.2012 17:15:56
Тема: Вопросы и ответы по ASM
|
Игорь Коршунов
Темы: 7
Сообщений: 2198
Мой профиль
|
Видео - отладка программы на ассемблере
"Тесты иногда проходят, иногда нет"
1. Не инициализирован регистр, значение из которого используется +1
2. Вторая ветка всегда выполняется
3. Команда IMUL не устанавливает флаги
4. Анализ не того теста
При тестировании выдается сообщение
"Тест не прошел по времени"
Происходит зацикливание программы
1. Неправильно указана метка для перехода
2. Бесконечный цикл
3. Постоянная загрузка входных значений
При тестировании выдается сообщение
"Ошибка исполнения программы: Unknown instruction"
1. В начале программы нет инструкции перехода на исполнимый код.
2. В конце программы нет команды останова.
3. Пропуск конца строки.
4. Переход по неправильному адресу.
5. Неправильное использование индексного регистра.
6. Переход по инструкции условного перехода вне диапазона -128/+127.
При тестировании выдается сообщение
"Ошибка компиляции (i86): Неверный символ E"
1. В строке объявления IN_STR нет закрывающей кавычки
При тестировании на DL не проходит тест, который проходит при ручной проверке
1 (занесение ответа не в ту переменную)
2 (неправильно расположена точка останова ;$e)
3 (знаковое/беззнаковое сравнение)
Разное
Как исследовать проблему
Неправильно работает условный переход
i8086.bat не запускает корректно Winter (на машине отсутствует D:\Olymp) +1
Сохранённые пользовательские настройки интерфейса WINTER
Как увеличить размер шрифта
Как добавить в редактор Ctrl+C, Ctrl+V
Как работать с 32-битным числом +1
Решение не проходит при подключении тестов с DL, но тестировании на DL решение проходит +1 ;$E
Integer overflow
65533 - что за число?
|
03.04.2012 17:27:30
Тема: Re:Ошибка исполнения программы: Unknown instruction
|
Игорь Коршунов
Темы: 7
Сообщений: 2198
Мой профиль
|
В начале программы нет инструкции перехода на исполнимый код.
; здесь должен быть переход на метку begin (jmp begin)
a db 5
b db 6
y db 0
begin:
Mov al,a
Mov bl,b
cmp al,dl
jl met1
Mov y,5
jmp met2
met1:
Mov y,10
met2:
halt:
jmp halt ;$E
|
03.04.2012 17:28:20
Тема: Re:Ошибка исполнения программы: Unknown instruction
|
Игорь Коршунов
Темы: 7
Сообщений: 2198
Мой профиль
|
В конце программы нет команды останова.
JMP BEGIN
ST0 DB "DAGHJUA#"
ST1 DB 100 DUP (?)
ST2 DB "ABCDEFGHIJKLMNOPQRTUVWXYZ#"
BEGIN:
LEA BX,ST0
MOV CL,'#'
CMP [BX],CL
JE FIN
LEA DI,ST1
MOV SP,0
LEA SI,ST2
DEC SI
MET0:
INC SP
INC BX
CMP [BX],CL
JNE MET0
MET1:
CMP SP,0
JE FIN
INC SI
MOV AL,[SI]
LEA BX,ST0
MET2:
CMP [BX],CL
JE MET1
CMP [BX],AL
JE MET3
INC BX
JMP MET2
MET3:
MOV [DI],AL
INC DI
INC BX
DEC SP
JMP MET2
FIN:
END
; здесь должна быть команда останова jmp 0 ;$E
|
03.04.2012 17:28:58
Тема: Re:Ошибка исполнения программы: Unknown instruction
|
Игорь Коршунов
Темы: 7
Сообщений: 2198
Мой профиль
|
При выполнении условия завершения строки (CX == 0) следует переход по той же метке как если бы строка не завершилась. После чего программа выходит за пределы массивов, что приводит к записи случайных чисел в область кода программы.
jmp begin
str_in db 'qwerta#..............................................................................'
str_out db '.....................................................................................'
begin:
lea bx,str_in
mov cx,0
dec bx
mov al,'#'
pisun:
inc bx
inc cx
cmp [bx],al
jne pisun
left:
dec cx
lea bx,str_in
lea di,str_out
jmp cheak
met1:
dec cx
inc bx
mov al,0
cbw
cmp ax,cx
jne cheak
jmp cheak
met2:
dec cx
inc bx
mov al,'o'
mov [di],al
inc di
mov al,0
cbw
cmp ax,cx
je met4
cheak:
mov al,'r'
cmp [bx],al
je met1
mov al,'a'
cmp [bx],al
je met2
mov al,[bx]
mov [di],al
inc bx
inc di
loop cheak
met4:
halt:
jmp halt ;$e
|
03.04.2012 17:29:18
Тема: Re:Ошибка исполнения программы: Unknown instruction
|
Игорь Коршунов
Темы: 7
Сообщений: 2198
Мой профиль
|
Выполняется переход по абсолютному адресу в область данных.
jmp begin
x dw 0
y dw 0ffffh
a db 0f3h
b db 10
r dw 0
begin: mov ax,x
cmp ax,1
jl 1
mov al,b
cbw
mov bx,ax
mov ax,x
add ax,bx
mov bx,ax
mov al,a
cbw
imul y
sub bx,ax
mov al,b
cbw
cwd
idiv x
add bx,ax
mov r,bx
jmp ends
met: mov ax,x
sub ax,1
mov bx,ax
mov al,a
cbw
imul bx
mov bx,ax
mov al,b
cbw
add ax,y
cwd
mov cx,3
idiv cx
add bx,ax
mov r,bx
ends: jmp 0 ;$E
|
03.04.2012 17:30:29
Тема: Re:Ошибка исполнения программы: Unknown instruction
|
Игорь Коршунов
Темы: 7
Сообщений: 2198
Мой профиль
|
BX используется для индексирования входной строки. Инструкция mov bl,[bx] изменяет значение регистра BX. Дальнейшее использование этого регистра ведет к ошибкам т.к. он больше не указывает на входную строку.
jmp begin
str db "abcdabc*"
char db 'т'
str_rez db 20 dup (?)
db 0ah,0dh
begin:
mov al,'*'
lea bx,str
lea si,str_rez
mov ah,char
c:
cmp [bx],al
je endc
cmp [bx],ah
jne m1
inc bx
mov bl,[bx]
mov [si],bl
inc bx
inc si
jmp c
m1:
mov bl,[bx]
mov [si],bl
inc bx
inc si
jmp c
endc:
mov [si],al
ends:
jmp ends
|
27.11.2012 19:18:15
Тема: Re:Ошибка исполнения программы: Unknown instruction
|
Екатерина Марченко
Темы: 0
Сообщений: 13
Мой профиль
|
Оценка\Индивидуальные задания\По выбору\Сконвертированные задания на программирование\Непростая арифметика\4 - "Умножение двух знаковых чисел" 81033
http://dl.gsu.by/task.jsp?nid=990131&cid=835
мое решение:
jmp begin
x dw 1
y dw 1
p dd 0
begin: mov ax,x
imul y
lea bx,p
mov [bx],ax
add bx,2
mov [bx],dx
ends: jmp ends ;$e
выдает ошибку: [test 4]: WInter: программное исключение.
|
30.11.2012 11:45:55
Тема: Re:Ошибка исполнения программы: Unknown instruction
|
Игорь Коршунов
Темы: 7
Сообщений: 2198
Мой профиль
|
Екатерина Марченко:
Оценка\Индивидуальные задания\По выбору\Сконвертированные задания на программирование\Непростая арифметика\4 - "Умножение двух знаковых чисел" 81033
http://dl.gsu.by/task.jsp?nid=990131&cid=835
мое решение:
jmp begin
x dw 1
y dw 1
p dd 0
begin: mov ax,x
imul y
lea bx,p
mov [bx],ax
add bx,2
mov [bx],dx
ends: jmp ends ;$e
выдает ошибку: [test 4]: WInter: программное исключение.
Тесты исправлены, решение перетестировано.
|
22.03.2013 12:17:12
Тема: Re:Ошибка исполнения ASM-программы: Unknown instruction
|
Игорь Коршунов
Темы: 7
Сообщений: 2198
Мой профиль
|
Задача:
Дана строка (не более 50 символов). Удалить из строки все буквы r и заменить все буквы a на o. В конце строки стоит символ #
jmp begin
str_in db 'aaaa#'
str_out db '...................'
begin:
lea bx,str_in
mov cl,'#'
lea di,str_out
dec di
dec bx
met1: inc bx
inc di
cmp [bx],cl
jne met2
jmp otvet
met2:
mov ah,'a'
cmp [bx],al
je me2
cmp [bx],ah
je me3
mov ch,[bx]
mov [di],ch
jmp met1
me2:
inc bx
dec di
jmp met2
me3:
mov ah,'o'
mov[di],ah
jmp met2
otvet:
jmp otvet ;$E
При тестировании выдается сообщение "Тест не прошел по времени".
Программа зацикливается из-за неправильно указаной метки для перехода после замены символа 'a' на 'o'. Вместо правильной met1 указана met2.
|
22.03.2013 12:27:53
Тема: Re:Вопросы и ответы по ASM
|
Игорь Коршунов
Темы: 7
Сообщений: 2198
Мой профиль
|
Тест не прошел по времени
jmp begin
a dw 2
b dw 2
y dw 2
begin:
mov ax,a
mov bx,b
cmp ax,bx
jg met1
jl met2
je met3
met1:
sub ax,bx
mov y,ax
jmp met1
met2: add ax,bx
mov y,ax
jmp met4
met3: mov ax,a
imul b
mov y,ax
met4:
ends: jmp ends ;$E
При переходе на met1 получается бесконечный цикл.
|
22.03.2013 14:31:03
Тема: Re:Вопросы и ответы по ASM
|
Игорь Коршунов
Темы: 7
Сообщений: 2198
Мой профиль
|
jmp begin
a db 60
b db 30
res db 0
begin: mov al,a
mov bl,b
cmp al,bl
jg dim1
jl dim2
jmp vod
dim1: sub al,bl
jmp begin
dim2: sub bl,al
jmp begin
vod: mov res,al
fin:
jmp fin ;$E
Программа зацикливается, т.к. в al и bl постоянно загружаются входные значения затирая промежуточные результаты.
|
28.03.2013 16:51:40
Тема: Re:Вопросы и ответы по ASM
|
Evgeniy Evlampev
Темы: 0
Сообщений: 34
Мой профиль
|
28.3 16:46 1. Задача №1 0 / 100 [test 1]: Тест не прошел: res hex[2]: 0FFFF. 1.i86 DelTA3 at DLServer Winter i86
Я взял тесты, все тесты прошли.
|
28.03.2013 16:56:55
Тема: Re:Вопросы и ответы по ASM
|
Михаил Долинский
(Online)
Темы: 2072
Сообщений: 49883
Мой профиль
|
Добавили ;$e - все равно не прошло
28.03.2013 16:54:54 28.03.2013 16:54:55 ПО-11: Евлампьев, Верхогляд Организация и функционирование ЭВМ (ПО1) - 2013 1. Задача №1 0 [test 1]: Тест не прошел: res hex[2]: 0FFFF. 1.i86 DelTA3 at NewIT
|
29.03.2013 12:46:32
Тема: Re:Вопросы и ответы по ASM
|
Игорь Коршунов
Темы: 7
Сообщений: 2198
Мой профиль
|
Евгений Евлампьев:
28.3 16:46 1. Задача №1 0 / 100 [test 1]: Тест не прошел: res hex[2]: 0FFFF. 1.i86 DelTA3 at DLServer Winter i86
Я взял тесты, все тесты прошли.
Результаты тестирования в WInter:
[test 1]: Тест прошел.
[test 4]: Тест прошел.
[test 10]: Тест прошел.
[test 12]: Тест прошел.
[test 13]: Тест прошел.
[test 15]: Тест прошел.
[test 2]: Тест не прошел: res dec[2]: 0.
[test 3]: Ошибка исполнения программы: Division by zero.
[test 5]: Тест не прошел: res dec[2]: 0.
[test 6]: Тест не прошел: res hex[2]: 0FFF0.
[test 7]: Тест не прошел: res dec[2]: 18.
[test 8]: Тест не прошел: res dec[2]: 38.
[test 9]: Тест не прошел: res dec[2]: 70.
[test 11]: Тест не прошел: res hex[2]: 0FFE8.
[test 14]: Тест не прошел: res sgn[2]: -2190.
mov al,d
cbw
imul a
jl met1
jge met2
Перед использованием инструкции условного перехода нужно установить флаги командой CMP.
Правильно так:
mov al,d
cbw
imul a
cmp ax, 0
jl met1
jge met2
|
05.04.2013 13:25:22
Тема: Re:Вопросы и ответы по ASM
|
Иван Шматко
Темы: 0
Сообщений: 67
Мой профиль
|
http://dl.gsu.by/task.jsp?cid=859&nid=1081790
jmp begin
a dw 175
b dw 75
nod dw 0
begin:
mov ax,a
mov bx,b
cwd
idiv bx
cmp ax,1
jl lol
cmp dx,0
je win
jmp lok
lol: mov bx,a
mov ax,b
cwd
idiv bx
cmp ax,1
jl lok
cmp dx,0
je win2
jmp lok
win: mov ax,b
mov nod,ax
jmp ends
win2 : mov ax,a
mov nod,ax
jmp ends
lok: mov ax,b
mov bx,a
cwd
idiv bx
mov cx,dx
mov ax,a
cwd
idiv cx
cmp dx,0
jne then
mov ax,a
sub ax,b
mov bx,ax
mov ax,a
cwd
idiv bx
mov cx,dx
cmp ax,0
je k1
mov ax,a
sub ax,b
mov bx,ax
mov ax,b
cwd
idiv bx
cmp ax,0
je k1
cmp dx,cx
je var1
k1: mov ax,a
sub ax,b
sub ax,b
mov ax,a
sub ax,b
sub ax,b
mov bx,ax
mov ax,a
cwd
idiv bx
mov cx,dx
mov ax,a
sub ax,b
sub ax,b
mov bx,ax
mov ax,b
cwd
idiv bx
cmp dx,cx
je var2
var1: mov ax,a
sub ax,b
cmp ax,0
jl var1k
jmp del
var1k: mov ax,a
sub ax,b
mov bx,0
sub bx,ax
mov ax,bx
del: mov nod,ax
jmp ends
var2: mov ax,a
sub ax,b
sub ax,b
cmp ax,0
jl var2k
jmp del2
var2k: mov ax,a
sub ax,b
sub ax,b
mov bx,0
sub bx,ax
mov ax,bx
del2: mov nod,ax
jmp ends
then : mov nod,1
jmp ends
ENDS: JMP ENDS;$E
Uncnown Instruction.
|
|
|