IPB
ЛогинПароль:

> ПРАВИЛА РАЗДЕЛА!!!

1. Заголовок или название темы должно быть информативным
2. Все тексты программ должны помещаться в теги [CODE=asm] [/CODE]
3. Прежде чем задавать вопрос, см. "FAQ",если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно, такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Ассемблера. Исключение только с согласия модератора.
5. НЕ используйте форум для личного общения! Все, что не относиться к обсуждению темы - на PM!
6. Проверяйте программы перед тем, как выложить их на форум!!

 
 Ответить  Открыть новую тему 
> Преобразование символьных чисел в ЧФТ, их вычитание ..., Лаба
RussoTuristo
сообщение 1.04.2009 15:34
Сообщение #1


Пионер
**

Группа: Пользователи
Сообщений: 80
Пол: Мужской

Репутация: -  0  +


Текст задачи: "Ввод символьных 5-разрядных целых 16-чных чисел, преобразование их в ЧФТ, их вычитание, преобразование результата в символьный вид и вывод его на экран"

раньше с ассемблером не сталкивался, и препод щас шизанутый, писал на доске похожую прогу, но часто ошибается в коде .... я переделал собственно немного, только чтоб вычитание было ... Но многое непонятно и до конца сделать не могу, помогите пожалуйста:
1)Что значит 5 разрядные целые 16-чные числа? Например АВ95F т.е. пять 16-чных символов, без точек? или может быть число FE.37D? Или вообще после запятой 5 символов?
2)Подпрограммы cursor(установка курсора) и cleare(очистка экрана) препод тоже не дал, сказал в интернете найдете ))) Где искать ... ? Может кто знает, видел или есть у кого?
3) и наверное пока самый важный вопрос: Данная программа работала для десятичных чисел .. насколько я разобрался. Будет ли она работать с 16-чным кодом или надо писать подпрограмму перевода 16-чное->2-чное->10-чное число?

Там где стоят ??? это я не знаю, так написал препод, но данные строки вызывают сомнения!


PsubSN segment
	Assume cs:PsubSN, ds: PsubSN
	dxw dw 0
	a1 dw 0
	a2 dw 0
	a3 dw 0
	a db 8
	db 0
	as db 8 dup (‘ ’)
	s1 db ‘Введите первое число’
	s2 db ‘Введите второе число’
	s3 db ‘Сумма равна $’
	s7 db ‘XXXXX $’
	E22 db ‘ошибка $’

proc1 proc
	push cs
	pop ds
;очистка экрана
	call cleare
;Установка курсора в левый верхний угол экрана
	xor dx
	mov dxw, dx
	push dx
	call cursor 
	pop dx
;Ввод первого числа
	mov dx,dxw
	inc dh                           ?????
	call cursor
	pop ax
	mov dxw,dx
	mov ah, 0AH
	lea dx,a
	int 21H
;Анализ первого символьного числа
	xor ax,ax
	push ax
	lea dx,as
	call analys
	pop ax
	pop ax
	cmp ax,0	
	je L1
;Ошибка
	mov dx,dxw
	inc ah
	mov dxw,dx
	push dx
	call cursor
	pop ax
	mov ah,9
	lea dx,E22
	int 21H
	jmp EOJ
L1: 
;Перевод первого символьного числа в ЧФТ
	xor ax,ax
	push ax
	lea dx,a
	push dx
	call cw
	poop ax
	pop ax
	mov a1,ax
;Перевод второго символьного числа в ЧФТ
	xor ax,ax
	lea dx,a
	push dx
	call cw
	pop ax
	pop ax
	mov a2,ax
;Вычитание 2-х ЧФТ
	sub ax,a1
	mov a3,ax
;Перевод ЧФТ в СЧ
	lea dx,s4
	push dx
	push a3
	call FC
	pop ax
	pop ax
;Вывод результата
	mov dx,dxw
	inc ah
	mov dxw,dx
	push dx
	call cursor
	pop ax
	mov ah,9
	lea dx,13                                ??????????
	int 21H
	lea dx,s4
	mov ah,9
	int 21H

EOJ:
	mov ah,4CH
	int 21H
proc1 endp

CF.proc
	push bp
	mov bp,sp
	push ax
	push cx
	push dx
	push bx
	push si
	push di

a db 8
   db 0
as db 8 dup(‘ ‘)
cw segment
assume cs:cw, ds:cw
	push bp 
	mov bp,sp
	push ax
	push cx
	push bx
	push dx
	push di
	push si
	mov si,1
	mov di,10
	mov bx[bx+1]                    ??????????
	mov cx,byteptr[bx+1]
	dec cx
	add bx,cx
	inc cx

L1:
	mov al,byteptr[bx]
	cmp al, 0FH                          ??????
	xor ah,ah
	xor ax,ax
	mul si
	mov dx,axw                             ???????
	add dx,ax
	mox axw,dx                          ???????
	mov ax,si
	mul di
	mov si,ax
	dec bx
	loop L1
	mov ax,axw
	mov [bp+6], ax                        ????????
	jmp L2
	dw 0
L2:
	pop si
	pop di
	pop dx
	pop cx
	pop ax
	pop bp
	ret
CFendp


FC.proc
;Перевод ЧФТ в СЧ еще написать надо ....




Добавлено через 5 мин.
Насколько я понял процедура очистки экрана например такая будет:
cleare.proc
mov ah, 6h
mov al, 0
int 10h
cleare endp

Вроде так ... ?
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
volvo
сообщение 1.04.2009 17:56
Сообщение #2


Гость






Цитата
Там где стоят ??? это я не знаю, так написал препод, но данные строки вызывают сомнения!
А там, где вопросы не стоят, ничего не вызывает подозрений? Скажем, строка:
	; Установка курсора в левый верхний угол экрана
	xor dx
? Вообще-то у XOR 2 операнда, а не один... Ты б лучше сказал, чем компилируешь, и попробовал собственно собрать программу, что компилятор тебе скажет, интересно...
 К началу страницы 
+ Ответить 
RussoTuristo
сообщение 1.04.2009 18:21
Сообщение #3


Пионер
**

Группа: Пользователи
Сообщений: 80
Пол: Мужской

Репутация: -  0  +


Насчет xor - извините, это моя ошибка, опечаточка вышла ... А так ... я пока не пробовал её запускать, половины процедур нету, дай Бог выйдет сообщение Введите числа ... а дальше ...

Подскажите пожалуйста по поводу вопросов, просто без разъяснений стоящих (хотя бы по 1 и 3 вопросу, не думаю, что для знающих людей они сложные) сложно что-то сварганить работоспособное ...
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
volvo
сообщение 1.04.2009 19:09
Сообщение #4


Гость






Цитата(RussoTuristo @ 1.04.2009 14:34) *
1)Что значит 5 разрядные целые 16-чные числа? Например АВ95F т.е. пять 16-чных символов, без точек? или может быть число FE.37D? Или вообще после запятой 5 символов?
Ну какая ж точка в целом числе? На то и целые, чтоб безо всяких точек...

Цитата(RussoTuristo @ 1.04.2009 14:34) *
2)Подпрограммы cursor(установка курсора) и cleare(очистка экрана) препод тоже не дал, сказал в интернете найдете ))) Где искать ... ? Может кто знает, видел или есть у кого?
Вообще-то вот так чистят экран:
ClearScreen proc near
	push ax
	push bx
	push cx
	push dx
	push es
	
	xor ax, ax
	mov es, ax
	
	mov ah, 6
	mov al, 0
	mov bh, 7
	xor cx, cx
	mov DH, es:[484h] ; число строк в текущем режиме (хранится по адресу $0:$0484)
	mov DL, es:[44ah] ; число столбцов в текущем режиме (хранится: $0:$044A)
	dec DL ; по указанному выше адресу хранится на 1 большее значение, чем нужно
	int 10h
	
	pop es
	pop dx
	pop cx
	pop bx
	pop ax
	ret
ClearScreen endp
, а изменение положения курсора - это функция 02 того же 10h прерывания, в DH должен быть номер строки (0 .. 24), а в DL - номер столбца (0 .. 79). Я бы сделал смену положения курсора макросом, а не процедурой.

Цитата(RussoTuristo @ 1.04.2009 14:34) *
3) и наверное пока самый важный вопрос: Данная программа работала для десятичных чисел .. насколько я разобрался. Будет ли она работать с 16-чным кодом или надо писать подпрограмму перевода 16-чное->2-чное->10-чное число?
Если работало с десятичным - будет работать и с 16-ричным, только вместо умножения на 1010, умножать придется на 10h = 1610

А теперь - совет: не пытайся сделать сразу все. Разбей задачу на маленькие подзадачи, и добавляй функциональность по мере того, как предыдущие подзадачи уже решены и работают безошибочно, иначе ты заваришь такую кашу, что потом не расхлебаешь...
 К началу страницы 
+ Ответить 
RussoTuristo
сообщение 1.04.2009 22:29
Сообщение #5


Пионер
**

Группа: Пользователи
Сообщений: 80
Пол: Мужской

Репутация: -  0  +


Спасибо, завтра утром попробую написать эту программу, игра сборной на подвиги сегодня не воодушевляет ....
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

 Ответить  Открыть новую тему 
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 

- Текстовая версия 29.07.2025 2:35
Хостинг предоставлен компанией "Веб Сервис Центр" при поддержке компании "ДокЛаб"