[Assembler] арифметические действия

За вознаграждение или нахаляву (если повезёт)

Модераторы: Хыиуду, MOTOCoder, Medved, dr.Jekill

Ответить
yandexer
Сообщения: 1
Зарегистрирован: 25 мар 2008, 23:38

С клавиатуры вводятся числа a,c,x. Программа должна произвести с ними следующие действия: -a/(x-c). Результат нужно вывести на экран.
Подскажите плз... что в моей программе неправильно, она почемуто ответ выдает неправельный.

Код: Выделить всё

include macro.lib
stec segment 'stack'
dw 256 dup(?) 
stec ends
data segment 'data'
a db ?
cc db ?
x db ?
h db ?
p db ?
b db ?
j db ?
mess db 'Zaraniye_1 $'
mess1 db 'Vvedite A $'
mess3 db 'Vvedite C $'
mess4 db 'Vvedite X $'
data ends
code segment 'code'
Begin:
assume ss:stec,ds:data,cs:code
mov ax,data
mov ds,ax 
cls
move_cursor 0,0
mov ah,9
mov dx,offset mess
int 21h
crlf
mov ah,9
mov dx,offset mess1
int 21h
crlf
key_$2bin
crlf
mov a,al
mov ah,9
mov dx,offset mess3
int 21h
crlf
key_$2bin
crlf
mov cc,al
mov ah,9
mov dx,offset mess4
int 21h
crlf
key_$2bin
crlf
mov x,al
mov al,-1
mov p,al;-1 prisvaivaem
mov al,a
imul p;delaem -1
mov h,al;otvet hranim -1
mov al,x
sub al,cc;x-c
mov j,al;otvet x-c
mov al,h
idiv j
print_number
mov ah,10h
int 16h
mov ax,4c00h
int 21h
ret 
code ends
end Begin	
airyashov
Сообщения: 441
Зарегистрирован: 02 ноя 2007, 10:31

и где искать macro.lib
Аватара пользователя
somewhere
Сообщения: 1858
Зарегистрирован: 31 авг 2006, 17:14
Откуда: 71 RUS
Контактная информация:

Подскажите плз... что в моей программе неправильно, она почемуто ответ выдает неправельный.
Возможно, потому что при делении получаются целые числа. Еще после умножения байта на байт получается слово, но потом содержимое AX затирается и хранится в переменной лишь его младшая часть. У меня вообще такое впечатление что вы под кассовый аппарат программу пишите, ибо вы не знаете, что помимо AL и AH есть еще куча регистров для хранения промежуточных вычислений (которые кстати здесь не нужны совсем). Также ошибки могут быть в macro.lib которого не видно.
It's a long way to the top if you wanna rock'n'roll
airyashov
Сообщения: 441
Зарегистрирован: 02 ноя 2007, 10:31

по мне так в целых

Код: Выделить всё

	xor ah,ah
	mov al,a
	mov bl,x
	mov bh,c
	sub bl,bh
	idiv bl
	neg al

;al - целая часть
Аватара пользователя
somewhere
Сообщения: 1858
Зарегистрирован: 31 авг 2006, 17:14
Откуда: 71 RUS
Контактная информация:

Немного неверно, так лучше

Код: Выделить всё

movsx ax, a
mov bl, x
sub bl, c
idiv bl
neg al
inc al
It's a long way to the top if you wanna rock'n'roll
Ответить