![]() |
|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
![]() |
|
Опции темы | Поиск в этой теме |
![]() |
#1 |
Регистрация: 20.11.2009
Сообщений: 3
|
![]()
Считает правильно, но только до некоторого порога значений переменных, а потом должно выдавать ошибку ввода. НО при вводе чисел <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. |
![]() |
![]() |
![]() |
#2 | ||
equ asm
Участник клуба
Регистрация: 02.05.2009
Сообщений: 1,605
|
![]()
Как понять фразу ?
Цитата:
Цитата:
|
||
![]() |
![]() |
![]() |
#3 |
Регистрация: 20.11.2009
Сообщений: 3
|
![]()
Прошу прощения за корявость, я начинающий. Имелось ввиду, что при снятии комментов с обозначенных строк в листинге выводилась ошибка вроде "Relative jump out of range by 0012h bytes". Хотелось бы расширить диапазон вводимых значений, но здесь, по идее, надо использовать еах и еbx, но я не знаю, как. Все, что я об этом поняла, это то, что нужно вписать .386 и поизменять названия регистров в определенных участках кода, но ведь это же не все?
Примерно это я и хотела сказать)) |
![]() |
![]() |
![]() |
#4 |
equ asm
Участник клуба
Регистрация: 02.05.2009
Сообщений: 1,605
|
![]()
Это значит, что условный переход не может быть длиннее 128 байт.
замените эти jo jo l_error на примерно такую конструкцию Код:
|
![]() |
![]() |
![]() |
#5 |
Регистрация: 20.11.2009
Сообщений: 3
|
![]()
Goodwin98, спасибо большое!!
|
![]() |
![]() |
![]() |
![]() |
||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Подсчет кол-ва значений в строке | 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 |