[Logo] Форум DL
  [DL]  На главную страницу 
Индекс форума ->Учебный процесс ГГУ/СШ 27 ->Проектирование цифровых систем 1, 2, 3, 4, 5
Автор Сообщение
Игорь Коршунов

Темы: 7
Сообщений: 2186

Мой профиль


Иван Шматко:

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. 


Между инструкцией условного перехода (jne) и меткой не может быть больше 128 байт. В данной программе это 200 байт (можно увидеть в дизассемблере) и переход выполняется не вперед на 200, а назад на 56 байт.

Для разрешения этой проблемы можно использовать инструкцию безусловного перехода, т.е. вместо jne then вставить:

	jne then_jmp
	jmp not_then
then_jmp:
	jmp then
not_then:

Владимир Кирдянов

Темы: 0
Сообщений: 89

Мой профиль
Лучшие 20 Обсудить задачу в форуме: Экзамен\Индивидуальные задания\Контрольные срезы\Ассемблер\Сам-а1 - "Задача №1" 5593 Илясов Артем

jmp begin
a dw 4
b dw -2
c db -3
d db -1
RES dw 0
begin:
mov ax,a
imul d
mov cx,ax
cmp ax,0
jge met
mov ax,a
cwd
idiv b
mov bx,ax
mov al,c
cbw
add ax,bx
sub ax,cx
mov RES,ax
jmp fin
met:
mov ax,a
cwd
idiv d
mov bx,ax
mov al,c
cbw
add ax,bx
imul b
sub b,ax
mov RES,ax
fin: jmp fin ;$E

Для данных, которые прописаны в программе, правильный ответ -1. Моя программа тоже выдаёт ответ -1, но тесты не проходит.
Владимир Кирдянов

Темы: 0
Сообщений: 89

Мой профиль
Лучшие 20 Обсудить задачу в форуме: Экзамен\Индивидуальные задания\Контрольные срезы\Ассемблер\Сам-а1 - "Задача №1" 5593 Илясов Артем

jmp begin
a dw 9
b dw 4
c db 2
d db 3
RES dw 0
begin:
mov al,d
cbw
imul a
mov cx,ax
cmp ax,0
jge met
mov ax,a
cwd
idiv b
mov bx,ax
mov al,c
cbw
add ax,bx
sub ax,cx
mov RES,ax
jmp fin
met:
mov al,d
cbw
mov bx,ax
mov ax,a
cwd
idiv bx
mov bx,ax
mov al,c
cbw
add ax,bx
imul b
mov bx,ax
mov ax,b
sub ax,bx
mov RES,ax
fin: jmp fin ;$E

Сперва не проходило 1-ый тест, хотя ответ был правильным. Но я исправил те ошибки, которые были допущены в программе:

mov ax,a
imul d - ошибка

mov al,d
cbw
imul a - вот моё исправление.


mov ax,a
cwd
idiv d - ошибка

mov al,d
cbw
mov bx,ax
mov ax,a
cwd
idiv bx - вот моё исправление.


Потом программа не прошла 2-й тест, т.к. там была тоже ошибка, которую я исправил:

sub b,ax - ошибка

mov bx,ax
mov ax,b
sub ax,bx - вот моё исправление.

Теперь программа не проходит 6-й тест, хотя ответ правильный и ошибок я никаких не заметил.

Вышел и зашёл в саму программу Winter - все тесты моя программа прошла.
Михаил Долинский (Online)

Темы: 1984
Сообщений: 47242

Мой профиль


Владимир Кирдянов:

Лучшие 20 Обсудить задачу в форуме: Экзамен\Индивидуальные задания\Контрольные срезы\Ассемблер\Сам-а1 - "Задача №1" 5593 Илясов Артем


Сперва не проходило 1-ый тест, хотя ответ был правильным.  
А в протоколе показывает, что не проходил второй тест:

24.07.2013 12:24:19 24.07.2013 12:24:21 Кирдянов Владимир Архитектура вычислительных систем (М3/ПМ4) - 2013 Сам-а1. Задача №1 0 [test 2]: Тест не прошел: res dec[2]: 0. 1.i86 DelTA3 at NewIT

Владимир Кирдянов

Темы: 0
Сообщений: 89

Мой профиль
Очень хотелось бы, чтобы при проверке эталонной программой тестов, которые создаются для отсеивания неверных программ в ветке "Экзамен\Индивидуальные задания\Контрольные срезы\Tестирование\", выдавалось в протоколе не просто сообщение типа "Эталонная программа не смогла пройти тесты", а хотя бы сообщения типа
"Эталонная программа не смогла пройти тесты: [test1]: Не объявлена переменная RES",
"Эталонная программа не смогла пройти тесты: [test1]: Размерность переменной y должна быть 2 байта.",
"Эталонная программа не смогла пройти тесты: [test1]: Тест не прошел: res sgn[2]: 1644.",
или/и сообщение о "переполнении"(тоже с указанием имени теста, который приводит к этому),
т.к. порой приходится по 5 раз перепроверять свои тесты в поисках ошибки в вычислениях, а на самом деле всё оказывается, например, в том, что неправильно написал выходную переменную, или в том, что неправильно указал размерность какой-либо переменной.
Владимир Кирдянов

Темы: 0
Сообщений: 89

Мой профиль
Лучшие 20 Обсудить задачу в форуме: Экзамен\Индивидуальные задания\Контрольные срезы\Ассемблер\Сам-а22 - "Задача №22" 5608 Сосновский Виталий


Мой код:

jmp begin
x dw -5
y db -6
a db 100
c dw -3500
res dw 0

begin:
mov al,y
cbw
imul bx
cmp ax,0
jle next2
jg next

next2:
mov al,a
cbw
mov bx,x
imul bx
push ax
mov al,y
cbw
mov bx,c
imul bx
mov bx,ax
pop ax
add ax,bx
push ax
mov al,a
cbw
mov bx,ax
pop ax
cwd
idiv bx
mov bx,c
sub ax,bx
mov res,ax
jmp ends

next:
mov ax,x
mov bx,c
imul bx
push ax
mov al,y
cbw
mov bx,ax
mov al,a
cbw
imul bx
mov bx,ax
pop ax
sub ax,bx
push ax
mov al,y
cbw
mov bx,x
add ax,bx
mov bx,ax
pop ax
cwd
idiv bx
mov res,ax

ends: jmp ends;$E


И вот написал программу. Решил проверить на тестах её. Прошло пару тестов и выдаёт, что неправильный результат. Я начал проверять тесты в самой программе, просто подставив их значение в сами переменные. Думал, что ошибка у меня в вычислениях выражений, но все результаты совпали. Тогда я и заметил одну странную вещь: порой сравнение (переход) x*y<=0 или x*y>0 программа неправильно проводила. Например, при значениях x=2, y=3 программа могла спокойно пойти по сравнению (переходу) x*y<=0, а не по x*y>0. Но я нашёл ошибку. Всё оказалось просто:

mov al,y
cbw
imul bx
cmp ax,0
jle next2
jg next

Я забыл просто занести в bx значение переменной x:

mov al,y
cbw
mov bx,x
imul bx
cmp ax,0
jle next2
jg next

А потому в bx могло быть любое число. И именно по этой причине программа неправильно совершала переход, т.к. вычисление происходило не x*y, а const*y, где const - это некоторое число, которое находится в bx и которое не зависит от значения переменной x.

Один раз моя неправильная программа умудрилась пройти все тесты, но в большинстве случаев она срезалась либо на 1-м, либо на 2-м, либо на последнем тесте.

Чтобы избежать такой ошибки, можно просто написать так:

mov al,y
cbw
imul x
cmp ax,0
jle next2
jg next

Т.е. производить умножение сразу на x.


Тесты взял из протокола, т.к. я её уже сдавал, но её обнулило, когда я неправильное решение отослал. А потому решил её добить.
Игорь Коршунов

Темы: 7
Сообщений: 2186

Мой профиль


Владимир Кирдянов:

Очень хотелось бы, чтобы при проверке эталонной программой тестов, которые создаются для отсеивания неверных программ в ветке "Экзамен\Индивидуальные задания\Контрольные срезы\Tестирование\", выдавалось в протоколе не просто сообщение типа "Эталонная программа не смогла пройти тесты", а хотя бы сообщения типа
"Эталонная программа не смогла пройти тесты: [test1]: Не объявлена переменная RES",
"Эталонная программа не смогла пройти тесты: [test1]: Размерность переменной y должна быть 2 байта.",
"Эталонная программа не смогла пройти тесты: [test1]: Тест не прошел: res sgn[2]: 1644.",
или/и сообщение о "переполнении"(тоже с указанием имени теста, который приводит к этому),
т.к. порой приходится по 5 раз перепроверять свои тесты в поисках ошибки в вычислениях, а на самом деле всё оказывается, например, в том, что неправильно написал выходную переменную, или в том, что неправильно указал размерность какой-либо переменной. 

Сделано.
Евгений Калейников

Темы: 0
Сообщений: 142

Мой профиль
Здравствуйте, такая проблема. При компиляции кода пишет ошибку "1.esi Ошибка компилятора", но не указывает где эта ошибка была найдена. После перезахода с винтера все пошло отлично! Вот исходник:
jmp begin
	a dw 0
	b dw 0
	c db 0
	d db 0
	res dw 0
begin:
	cmp b,0
	jg met1
	cmp c,0
	jg met1
	mov al,d
	cbw
	mov bx,ax
	mov al,c
	cbw
	mov cx,ax
	mov ax,a
	imul b
	add ax,cx
	imul bx
	mov cx,ax
	mov al,d
	cbw
	imul a
	add ax,b
	imul c
	cwd
	idiv b
	sub cx,ax
	mov ax,cx
	cwd
	idiv b
	jmp result
met1:
	mov al,c
	cbw
	mov cx,ax
	mov ax,a
	cwd
	idiv b
	cwd
	idiv cx
	mov cx,ax
	mov al,d
	imul c
	mov bx,ax
	mov al,d
	cbw
	cwd
	idiv b
	sub bx,ax
	mov ax,a
	imul bx
	add cx,ax
	mov ax,cx
	jmp result

result:
	mov res,ax

halt:
	jmp halt

Игорь Коршунов

Темы: 7
Сообщений: 2186

Мой профиль
Почему при тестировании на DL не проходит тест, который проходит при ручной проверке?
	JMP	Begin
x	DW	4
y	DW	2
res	DW	0
begin:
	mov ax,x
	cmp ax,3
	je met1
	jl met2
	mov ax,x
	imul y
	add ax,x
	add ax,y
	jmp fin
met1:
	mov ax,x
	imul y
	mov bx,ax
	imul ax
	add ax,bx
met2:
	mov ax,x
	imul y
	imul ax
	add ax,ax
fin:	mov res,ax    ;$e

Точка останова установлена на последнюю исполнимую инструкцию, из-за чего при тестировании программа останавливается прежде, чем выполнит эту инструкцию. Правильно заканчивать программу так:
	...
	mov res,ax
	jmp 0 ;$e

Владислав Булгаков

Темы: 0
Сообщений: 26

Мой профиль
http://dl.gsu.by/task.jsp?nid=1300795&cid=927 при решение задачи при ручной проверке выдает ошибку на 2м тесте, а DL проходит.

jmp begin
a dw 3
b dw -2
c db 3
d db 100
res dw 1
begin:
mov ax,b
cmp ax,0
jg l
jmp m

m:
mov bl,c
cmp bl,0
jle m1
jmp l
m1:
mov ax,a
mov bx,b
imul bx
mov bx,ax
mov al,c
cbw
add ax,bx
mov bx,ax
mov al,d
cbw
imul bx
mov si,ax
mov al,d
cbw
imul a
add ax,b
mov bx,ax
mov al,c
cbw
imul bx
idiv b
sub si,ax
mov res,si
jmp fin

l:
mov ax,a
cwd
idiv b
cwd
mov bx,ax
mov al,c
cbw
xchg ax,bx
idiv bx
mov si,ax
mov al,d
imul c
mov cx,ax
mov al,d
cbw
cwd
idiv b
sub cx,ax
mov ax,cx
imul a
add ax,si
mov res,ax

fin:
jmp fin ;$e
Владислав Булгаков

Темы: 0
Сообщений: 26

Мой профиль
http://dl.gsu.by/task.jsp?nid=1300795&cid=927 при решение задачи при ручной проверке выдает ошибку на 2,3,4 тесте, а DL проходит.

jmp begin
a dw 3
b dw -2
c db 3
d db 100
res dw 1
begin:
mov ax,b
cmp ax,0
jg l
jmp m

m:
mov bl,c
cmp bl,0
jle m1
jmp l
m1:
mov ax,a
mov bx,b
imul bx
mov bx,ax
mov al,c
cbw
add ax,bx
mov bx,ax
mov al,d
cbw
imul bx
mov si,ax
mov al,d
cbw
imul a
add ax,b
mov bx,ax
mov al,c
cbw
imul bx
idiv b
sub si,ax
mov res,si
jmp fin

l:
mov ax,a
cwd
idiv b
cwd
mov bx,ax
mov al,c
cbw
xchg ax,bx
idiv bx
mov si,ax
mov al,d
imul c
mov cx,ax
mov al,d
cbw
cwd
idiv b
sub cx,ax
mov ax,cx
imul a
add ax,si
mov res,ax

fin:
jmp fin ;$e
Владислав Булгаков

Темы: 0
Сообщений: 26

Мой профиль
25.11 15:27 ПР. Меньше 0 / 1 Все тесты пройдены (основной + секретный). DelTA3 at NIT5 Winter i86

http://dl.gsu.by/task.jsp?nid=1300802&cid=927

что-то странное.
jmp begin
a db 5
b db 6
y db 1
begin:
mov al,a
cmp al,b
jl n
mov y,5
jmp fin
n:
mov y,10

fin:
jmp fin ;$e
Виктория Закревская

Темы: 0
Сообщений: 53

Мой профиль
Непонятная ошибка. Буква Е везде английская, я проверила.

23.3 17:19 11. глАснОсть 0 / 300 [1]: Ошибка компиляции (i86): Неверный символ E(69) (строка 41): HALT: JMP HALT ;$E. DelTA3 at DLServer Winter i86

JMP BEGIN
IN_STR DB 'ABCDEAAAreeea aO#'
RES DW 0
DB 0DH,0AH
BEGIN:
LEA BX,IN_STR
MOV CX,0
MOV BP,0
MOV AL,'#'
CMP AL,[BX]
JE FIN
DEC BX

LEN: INC BX
INC CX
CMP AL,[BX]
JNE LEN

DEC CX
DEC BX
CIKL: MOV AL,[BX]
CMP AL,'A'
JE INCA
CMP AL,'O'
JE INCA
CMP AL,'E'
JE INCA
CMP AL,'I'
JE INCA
CMP AL,'U'
JE INCA
DEC BX
LOOP CIKL
JMP FIN
INCA: INC BP
DEC BX
JMP CIKL

FIN: MOV RES,BP

HALT: JMP HALT ;$E
Виктория Закревская

Темы: 0
Сообщений: 53

Мой профиль
IN_STR DB 'ABCDEAAAreeea aO# '

При добавлении пробелов после # проблема исчезла.
Игорь Коршунов

Темы: 7
Сообщений: 2186

Мой профиль


Виктория Закревская:

Непонятная ошибка. Буква Е везде английская, я проверила.

23.3 17:19 11. глАснОсть 0 / 300 [1]: Ошибка компиляции (i86): Неверный символ E(69) (строка 41): HALT: JMP HALT ;$E. DelTA3 at DLServer Winter i86

JMP BEGIN
IN_STR DB 'ABCDEAAAreeea aO#'
RES DW 0
DB 0DH,0AH
BEGIN:
LEA BX,IN_STR
MOV CX,0
MOV BP,0
MOV AL,'#'
CMP AL,[BX]
JE FIN
DEC BX

LEN: INC BX
INC CX
CMP AL,[BX]
JNE LEN

DEC CX
DEC BX
CIKL: MOV AL,[BX]
CMP AL,'A'
JE INCA
CMP AL,'O'
JE INCA
CMP AL,'E'
JE INCA
CMP AL,'I'
JE INCA
CMP AL,'U'
JE INCA
DEC BX
LOOP CIKL
JMP FIN
INCA: INC BP
DEC BX
JMP CIKL

FIN: MOV RES,BP

HALT: JMP HALT ;$E 

В строке объявления IN_STR не было закрывающей кавычки.
 
Индекс форума ->Учебный процесс ГГУ/СШ 27 ->Проектирование цифровых систем 1, 2, 3, 4, 5
Time:0,047