раньше с ассемблером не сталкивался, и препод щас шизанутый, писал на доске похожую прогу, но часто ошибается в коде .... я переделал собственно немного, только чтоб вычитание было ... Но многое непонятно и до конца сделать не могу, помогите пожалуйста:
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
Вроде так ... ?