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

Низкоуровневое программирование портов, микроконтроллеров и т.д.

Модератор: Andy

Ответить
kr0nix
Сообщения: 8
Зарегистрирован: 04 май 2007, 16:13

Есть программа, выводящая результат деления двух чисел: -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). Помогите, плиз.
Аватара пользователя
somewhere
Сообщения: 1858
Зарегистрирован: 31 авг 2006, 17:14
Откуда: 71 RUS
Контактная информация:

после команды idiv b остаток от деления находится в регистре AH
It's a long way to the top if you wanna rock'n'roll
kr0nix
Сообщения: 8
Зарегистрирован: 04 май 2007, 16:13

Да, я знаю. Только вот не знаю какой будет блок вывода для AH (cbw - mov ah,4ch)...
Аватара пользователя
somewhere
Сообщения: 1858
Зарегистрирован: 31 авг 2006, 17:14
Откуда: 71 RUS
Контактная информация:

никто не мешает сохранить AH в другом свободном регистре. Для вывода чисел можно использовать вызов процедуры, в которой все регистры сохраняются, а число передается в AL например
It's a long way to the top if you wanna rock'n'roll
Аватара пользователя
roman_alexeev
Сообщения: 6
Зарегистрирован: 10 янв 2008, 01:59
Контактная информация:

А как вообще выводить на экран содержимое регистра(под дос х86)?
А то из сегмента данных вывести легко, а если результат работы сохранен в регистре и надо циферку на экран - не получается..
Что делать?
.NET Software Developer
airyashov
Сообщения: 441
Зарегистрирован: 02 ноя 2007, 10:31

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

.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
Ответить