Страница 1 из 1

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

Добавлено: 25 мар 2008, 23:45
yandexer
С клавиатуры вводятся числа 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	

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

Добавлено: 26 мар 2008, 08:19
airyashov
и где искать macro.lib

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

Добавлено: 26 мар 2008, 09:13
somewhere
Подскажите плз... что в моей программе неправильно, она почемуто ответ выдает неправельный.
Возможно, потому что при делении получаются целые числа. Еще после умножения байта на байт получается слово, но потом содержимое AX затирается и хранится в переменной лишь его младшая часть. У меня вообще такое впечатление что вы под кассовый аппарат программу пишите, ибо вы не знаете, что помимо AL и AH есть еще куча регистров для хранения промежуточных вычислений (которые кстати здесь не нужны совсем). Также ошибки могут быть в macro.lib которого не видно.

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

Добавлено: 26 мар 2008, 09:34
airyashov
по мне так в целых

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

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

;al - целая часть

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

Добавлено: 26 мар 2008, 09:46
somewhere
Немного неверно, так лучше

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

movsx ax, a
mov bl, x
sub bl, c
idiv bl
neg al
inc al