[asm]wprowadzanie z klawiatury , dzialania na koprocesorze

0

Witam,mogl by mi ktos pomoc z programem podac jakis kod , nie potrafie zrobic wprowadzania z klawiatury 2 liczby hex osmioznakowe , programktoy wkleilem ponizej odejmuje 2 liczby single i wyswietla wynik lecz sa one juz wczsniej zadeklarowane....:)
problem w tym ze dzialanie jest na koprocesorze

dane segment

text0 db 'L1-L2 = $'

licz1 dd 41200000h ;to jest 10 )
licz2 dd 40400000h ;to jest 3 )
wyn dd 00000000h

dane ends

stosik segment stack
db 256 dup(?)
stosik ends

program segment
ASSUME ds:dane,ss:stosik,cs:program

start:
mov ax, seg dane
mov ds, ax

mov ah,9
lea dx,text0
int 21h

finit
fld licz1
fld licz2
fsub
fst wyn 
push wyn
pop ax
pop bx
push ax
push bx
xor dx,dx
mov cl,2
petla1:
pop ax
push cx
mov cl,4
petla2:
push cx 
clc
mov cl,4
petla3:
rcl ax,1
rcl dx,1
loop petla3
cmp dl,10
jge literka
add dl,48
jmp ascii
literka:
add dl,55
ascii: push ax
mov ah,02h
int 21h
pop ax
xor dx,dx
pop cx
loop petla2 
pop cx
loop petla1 

mov dl,32 ; kod literki '_'
mov ah,02h
int 21h 

mov dl,104 ; kod literki 'h'
mov ah,02h
int 21h 

mov dl,101 ; kod literki 'e'
mov ah,02h
int 21h 

mov dl,120 ; kod literki 'x'
mov ah,02h
int 21h 


mov ah,4ch
int 21h
program ends
end start


0

Tak jak było na wykładzie :P

  1. Pobierasz sobie funkcją 10 przerwania 21h tekst w postaci szesnastkowej
  2. Odejmujesz od znaków takie wartości, żeby zostały ci liczby 0-15
  3. Orujesz i przesuwasz w lewo tak, żeby upakować to na 4 bajtach

I teraz coś, czego na wykładzie nie było. Jak już masz wartość liczbową w jakichś rejestrach lub w pamięci, to możesz zrobić coś takiego:

lea bx, licz1
add bx, 3
mov byte ptr [bx], 40h
mov byte ptr [bx-1], 30h
mov byte ptr [bx-2], 0
mov byte ptr [bx-3], 0

Wartości nie muszą być podane na stałe, jeśli masz liczbę np. w rejestrach ax:cx, to możesz dać:

lea bx, licz1
add bx, 3
mov byte ptr [bx], ah
mov byte ptr [bx-1], al
mov byte ptr [bx-2], ch
mov byte ptr [bx-3], cl

1 użytkowników online, w tym zalogowanych: 0, gości: 1