Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Низкоуровневое программирование > Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 20.11.2009, 15:55   #1
Masha))
 
Регистрация: 20.11.2009
Сообщений: 3
По умолчанию Прога на подсчет значений функции: не разрешает в некоторых местах использование jo!!

Считает правильно, но только до некоторого порога значений переменных, а потом должно выдавать ошибку ввода. НО при вводе чисел <0 после ввода последнего допустимого числа не разрешает использование флага переполнения и не выдает ошибку, а считает что попало.Пробовала использовать ea, ebx, но не разобралась до конца,что там и как)))

model small
.stack 100h
.data
welcome1 db 'enter x : $'
welcome2 db 'enter y : $'
answer db 'Calculated $'
errormsg db ' ---- Wrong input. Try again ----- $'
input_num db 6 dup(?)
znak db (?)
SecondMinus db (?)
i dw (?)
damn db 1
damn2 db 0
x dw (?)
y dw (?)
.code
assume cs:@code, ds:@data, ss: @stack

; (15x-1) / y(x-y) якщо 0 <=x <= 10
; 35x2+8x якщо x < 0
; (10-x)2 якщо x > 10, y = -5


output proc far

mov al, 0Dh
int 29h
mov al, 0Ah
int 29h

mov ah, 09h
lea dx, answer
int 21h
or bx, bx
jns m1
mov al, '-'
int 29h
neg bx
m1:
mov ax, bx
xor cx, cx
mov bx, 10
m2:
xor dx, dx
div bx
add dl, '0'
push dx
inc cx
test ax, ax
jnz m2
m3:
pop ax
int 29h
loop m3

ret

output endp

input proc
xor ax, ax
mov znak, 0
mov SecondMinus, 0
xor bx, bx
mov damn2, 0
l_input:
mov ah, 8
int 21h
cmp al, 13
je l_end
mov damn2, al
cmp al, 1Bh
je l_escape
jmp l_doNext
l_escape:
jmp finish
l_doNext:
je l_end
int 29h
cmp al, '-'
je l_sign1
mov SecondMinus, 1
cmp al,'0'
jb l_error
cmp al,'9'
ja l_error
cmp znak, 1
je l_sign
sub al, '0'
xor ah, ah
mov i, ax
mov ax, 10
imul bx
jo l_error
mov bx, ax
add bx, i
jo l_error
cmp bx, 32767
jg l_error
jmp l_input

l_sign:
cmp al, '-'
je l_error
sub al, '0'
xor ah, ah
neg ax
mov i, ax
mov ax, 10
imul bx
jo l_error
mov bx, ax
add bx, i
jo l_error
cmp bx, -32768
jl l_error
jmp l_input
l_end:
cmp damn2, 0
je l_error
ret

l_sign1:
mov znak, 1
cmp SecondMinus, 1
je l_error
jmp l_input
l_error:
lea dx, errormsg
mov ah, 9
int 21h
mov al, 0Dh
int 29h
mov al, 0Ah
int 29h
XOR ax, ax
xor bx, bx
jmp main

input endp

calc proc
cmp y,-5
je n1
cmp x, 10
jg l_error
cmp x, 0
jge r_1
jmp r_2

n1:
cmp x, 10
jg r_3
cmp x, 0
jge r_1
jmp r_2


r_3:
mov bx, x
sub bx, 10
jo l_error
;imul bx
;mov ax, bx
;mov bx, ax

mov ax, bx
imul ax
jo l_error

mov bx, ax
jmp l_endCalc

r_1:
mov ax, x ;(15x-1) / y(x-y)
mov bx, y
sub bx,ax

mov ax,y
imul bx
jo l_error
mov bx, ax
cmp bx, 0
je l_error
push bx
mov ax,15
mov bx, x
imul bx
jo l_error
mov bx, ax
mov ax, 1
sub ax, bx
jo l_error
mov ax, bx
pop bx
neg bx
idiv bx
mov bx, ax
jmp l_endCalc

r_2:
mov ax, x
imul ax
;cmp ax, 32767
;jg l_error
;вот здесь не разрешает следующую строку:
;jo l_error
mov bx, ax
;xor ax,ax
mov ax, 35
imul bx
;и здесь:
;jo l_error
mov bx, ax

push bx
mov ax, 8
mov bx, x

imul bx
;и здесь:
;jo l_error
pop bx
add ax, bx
mov bx, ax
jmp l_endCalc

l_endCalc:
ret
calc endp

main:
mov ax, @data ;ініціалізація ds
mov ds,ax

mov al, 0Dh
int 29h
mov al, 0Ah
int 29h

lea dx, welcome1
XOR ax, ax
XOR bx, bx
mov ah, 9
int 21h
XOR ax, ax
mov znak, 0
xor si, si
call input
mov x, bx
mov al, 0Dh
int 29h
mov al, 0Ah
int 29h
lea dx, welcome2
XOR ax, ax
XOR bx, bx
mov ah, 9
int 21h
call input
mov y, bx
call calc
mov al, 0Dh
int 29h
mov al, 0Ah
int 29h
call output

mov ah, 8
int 21h
finish:
mov ax, 4c00h
int 21h
cseg ends

end main

Последний раз редактировалось Masha)); 20.11.2009 в 15:58.
Masha)) вне форума Ответить с цитированием
Старый 20.11.2009, 19:25   #2
Goodwin98
equ asm
Участник клуба
 
Аватар для Goodwin98
 
Регистрация: 02.05.2009
Сообщений: 1,605
По умолчанию

Как понять фразу ?
Цитата:
не разрешает использование флага переполнения
А
Цитата:
Пробовала использовать ea, ebx, но не разобралась до конца,что там и как)))
Непонятно вдвойне
Какой вопрос - такой ответ. Не забываем пользоваться поиском, гуглом.
Помощь в выполнении работ по ассемблеру ICQ:2725322O4
Goodwin98 вне форума Ответить с цитированием
Старый 20.11.2009, 19:52   #3
Masha))
 
Регистрация: 20.11.2009
Сообщений: 3
По умолчанию

Прошу прощения за корявость, я начинающий. Имелось ввиду, что при снятии комментов с обозначенных строк в листинге выводилась ошибка вроде "Relative jump out of range by 0012h bytes". Хотелось бы расширить диапазон вводимых значений, но здесь, по идее, надо использовать еах и еbx, но я не знаю, как. Все, что я об этом поняла, это то, что нужно вписать .386 и поизменять названия регистров в определенных участках кода, но ведь это же не все?
Примерно это я и хотела сказать))
Masha)) вне форума Ответить с цитированием
Старый 20.11.2009, 20:15   #4
Goodwin98
equ asm
Участник клуба
 
Аватар для Goodwin98
 
Регистрация: 02.05.2009
Сообщений: 1,605
По умолчанию

Это значит, что условный переход не может быть длиннее 128 байт.
замените эти jo jo l_error на примерно такую конструкцию

Код:
  jno l1
  jmp l_error
l1:
; дальнейший код
Какой вопрос - такой ответ. Не забываем пользоваться поиском, гуглом.
Помощь в выполнении работ по ассемблеру ICQ:2725322O4
Goodwin98 вне форума Ответить с цитированием
Старый 20.11.2009, 20:24   #5
Masha))
 
Регистрация: 20.11.2009
Сообщений: 3
По умолчанию

Goodwin98, спасибо большое!!
Masha)) вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Подсчет кол-ва значений в строке new_user БД в Delphi 1 03.06.2009 09:18
Подсчет повторяющихся значений поля JSilver БД в Delphi 9 04.03.2009 10:34
20 значений функции. ByFly Паскаль, Turbo Pascal, PascalABC.NET 3 13.01.2009 12:56
подсчет значений, удовлетворяющих интервалам treim Microsoft Office Excel 2 22.11.2008 13:37
подсчет различных значений zetrix Microsoft Office Excel 0 31.10.2006 07:28