Помощь - Поиск - Пользователи - Календарь
Полная версия: Преобразование символьных чисел в ЧФТ, их вычитание ...
Форум «Всё о Паскале» > Современный Паскаль и другие языки > Ассемблер
RussoTuristo
Текст задачи: "Ввод символьных 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

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

Подскажите пожалуйста по поводу вопросов, просто без разъяснений стоящих (хотя бы по 1 и 3 вопросу, не думаю, что для знающих людей они сложные) сложно что-то сварганить работоспособное ...
volvo
Цитата(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
Спасибо, завтра утром попробую написать эту программу, игра сборной на подвиги сегодня не воодушевляет ....
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.