Witam. Dostałem za zadanie napisać program w assemblerze, który zamienia podane przez użytkownika liczby w linii poleceń na 16-bitowy system szesnastkowy (U2). Miałem dopiero 3 zajęcia z assemblera i tak średnio to ogarniam... Oczywiście dostałem jakieś tam przykładowy program, który zamienia podaną już z góry liczbę w systemie dziesiętnym na 8-bitowy system binarny.
I właśnie chciałem od tego przykładu sobie powoli zacząć projekt, który muszę zrobić. Jednak już na samym początku pojawił się problem, z którym nie potrafię sobie poradzić...
Otóż na samym początku chciałem ten przykładowy program przerobić tak, aby zamiast przeliczać podaną już wcześniej w zmiennej stałą liczbę, program pobierał ją od użytkownika, a następnie zamieniał.
Tak też zrobiłem, pobrałem znak, który zapisał się w rejestrze al, potem przerzuciłem tą liczbę to rejestru bl, ale niestety wyniki nie są poprawne...
Poniżej znajduje się cały kod z programu. Póki co jest możliwość wprowadzenia tylko liczby jednocyfrowej i nie ma sprawdzenia czy mieści się w przedziale itd..
Jeśli zamiast mov bl,al pojawi się tam **mov bl,[zm1] **to oczywiście wszystko działa jak należy. Jeśli ktoś potrafi mi pomóc to bardzo bym prosił i odpowiedź.
sts segment stack 'stack'
db 512 dup(0)
sts ends
dane segment
txt1 db 'wartosc BIN: $'
;zm1 db 7
dane ends
include macros.asm
prog segment
assume cs:prog,ds:dane,ss:sts
P486N
start:
mov ax,seg dane
mov ds,ax
wysw_bin:
wyswietl txt1
pob_znak
ety0:
;mov bl, [zm1]
mov bl,al
mov cx,8
ety1:
push cx
rcl bl,1
jc ety2
mov dl,'0'
jmp ety3
ety2:
mov dl,'1'
ety3:
mov ah,2
int 21h
pop cx
loop ety1
prog ends
end start