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

Вывод остатка от деления двух чисел

Добавлено: 23 дек 2007, 14:48
kr0nix
Есть программа, выводящая результат деления двух чисел: -12 и 3 в дополнительном коде:

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

.model small
.stack 4000h
.data
string_bin_byt label byte
string_bin_word label word
string_bin_dword dq 09ffeh
string_pack dt 0
len_string_pack=$-string_pack
adr_string_pack dd string_pack
string db 20 dup (0)
len_string=$-string
adr_string dd string
a dw -12
b db 3
.code
begin:
mov ax,@data
mov ds,ax
mov es,ax
mov ax,a
idiv b

;Вывод частного:
cbw
mov word ptr string_bin_dword,ax
finit
fild string_bin_dword
fbstp string_pack
lds si,adr_string_pack
add si,len_string_pack-2
les di,adr_string
mov cx,9
cycl:
xor ax,ax
std 
lodsb
shl ax,4
rol al,4
or ax,3030h
xchg ah,al
cld
stosw
loop cycl
mov bx,1
mov cx,len_string
lds dx,adr_string
mov ah,40h
int 21h
mov ah,4ch

xor al,al
int 21h
end begin
Не знаю как вывести остаток от деления (в данном случае 0). Помогите, плиз.

Re: Вывод остатка от деления двух чисел

Добавлено: 23 дек 2007, 18:05
somewhere
после команды idiv b остаток от деления находится в регистре AH

Re: Вывод остатка от деления двух чисел

Добавлено: 23 дек 2007, 18:33
kr0nix
Да, я знаю. Только вот не знаю какой будет блок вывода для AH (cbw - mov ah,4ch)...

Re: Вывод остатка от деления двух чисел

Добавлено: 23 дек 2007, 18:39
somewhere
никто не мешает сохранить AH в другом свободном регистре. Для вывода чисел можно использовать вызов процедуры, в которой все регистры сохраняются, а число передается в AL например

Re: Вывод остатка от деления двух чисел

Добавлено: 10 янв 2008, 18:26
roman_alexeev
А как вообще выводить на экран содержимое регистра(под дос х86)?
А то из сегмента данных вывести легко, а если результат работы сохранен в регистре и надо циферку на экран - не получается..
Что делать?

Re: Вывод остатка от деления двух чисел

Добавлено: 14 янв 2008, 09:54
airyashov

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

.model small
.stack 4000h
.386
.data
string_bin_byt label byte
string_bin_word label word
string_bin_dword dq 09ffeh

string_bin_dword1 dq 0

string_pack dt 0
len_string_pack=$-string_pack
adr_string_pack dd string_pack
string db 20 dup (0)
len_string=$-string
adr_string dd string
a dw -12
b db 3
.code
begin:
mov ax,@data
mov ds,ax
mov es,ax
mov ax,a
idiv b

movsx bx,ah

cbw
mov word ptr string_bin_dword,ax
mov word ptr string_bin_dword1,bx
finit
fild string_bin_dword1
fild string_bin_dword

mov cx,2
cycl1:
	push cx
	
	fbstp string_pack
	lds si,adr_string_pack
	add si,len_string_pack-2
	les di,adr_string
	mov cx,9
	cycl:
	xor ax,ax
	std 
	lodsb
	shl ax,4
	rol al,4
	or ax,3030h
	xchg ah,al
	cld
	stosw
	loop cycl
	mov bx,1
	mov cx,len_string
	lds dx,adr_string
	mov ah,40h
	int 21h

	pop cx
loop cycl1
	
mov ax,4c00h
int 21h
end begin