Pereiti prie turinio

Asembleris: Keičia iš ASCII į 16-ainę


Rekomenduojami pranešimai

Atsiskaitinėsiu rytoj asemblerio programą. Ir nujaučiu, kad manęs paprašys padaryt, kad keistų ne į 16-ainę o į 8-ainę pvž, gal nutuokiat kur čia ką pakeist? <_<

 

;Programa, kuri įveda simbolių eilutę ir atspausdina jos simbolių ASCII kodus šešioliktainiu pavidalu.

.MODEL small
.STACK 100h
.DATA
msgIvesk	DB 'Iveskite eilute: $'
msgIsvesk	  DB 'Isvestis:$'
msgtuscia	  DB 13, 10, '$'
msgklaida	  DB 'Jus nieko neivedet$'
buf	DB 255, 255 DUP(?)
.CODE
Start:
mov ax, @data
mov ds, ax

mov ah, 09h	   ; ant ekrano ismetame eilute
lea dx, msgIvesk
int 21h

mov ah, 0Ah		; nuskaitom eilute
mov dx, offset buf
int 21h

mov ah, 09h	   ;new line
lea dx, msgtuscia
	int 21h
				  ; isvedam ats eilutes pradzia
mov ah, 09h
lea dx, msgIsvesk
int 21h   

mov ah, 09h	   ; new line
lea dx, msgtuscia
int 21h

mov si, offset buf+1	 ;si = ivestos eilutes ilgis
xor cx, cx
lodsb				   ;is SI perkrauna i AL jei baitais AX jei 2 baitai
cmp al, 0			   ; lyginam ar eilute tuscia
je klaida			   ; jei tuscia sokam i label klaida
xor ah, ah			  ;isvalom ah
mov cx, ax			  ;isvalom cx

call i16taine		   ;iskvieciam procedura kuri vercia raide i ascii

mov ah, 09h			 ;new line i ekrana
lea dx, msgtuscia
	int 21h

mov ax, 04c00h		  ;korektiskai baigti darba
int 21h
						; cia jei eilute tuscia
klaida:
mov ah, 09h
lea dx, msgklaida
int 21h

mov ax, 04c00h		  ;baigti darba
int 21h

i16taine PROC			   ;  procedura kuri vercia i ascii
push ax				 ; i steka ikeliam ax reiksme
push bx				 ; i steka ikeliam bx reiksme
push cx				 ; i steka ikeliam cx reiksme
push dx				 ; i steka ikeliam dx reiksme

mov cl, al			  ; cl = al

ciklas:
xor ax, ax			 ;isvalomas ax

lodsb				  ;AL = SI 

push ax				; ax ikeliam i steka

rol al, 1
rol al, 1
rol al, 1
rol al, 1			  ; rolinam viena bita i kaire 1001 = 0011
and al, 0fh			;
mov dl, al			 ; dl = al
cmp dl, 9h			 ; jei dl == 9h
jbe ne16_1			 ; soka i ne16_1
add dl, 'A'			;prie dl reiksmes prideda 'A'
sub dl, 10			 ;is dl atimti 10
jmp spausd_1		   ;soka i spaudinima

ne16_1:
add dl,'0'

spausd_1:
mov ah, 02h			 ;spausdina po viena skaiciu
int 21h

pop ax
						;viskas kartojas kaip ir auksciau tik ner rolinimo
and al, 0fh
mov dl, al
cmp dl, 9h
jbe ne16_2
add dl, 'A'
sub dl, 10
jmp spausd_2

ne16_2:
add dl,'0'

spausd_2:
mov ah, 02h
int 21h

mov dl, ' '
mov ah, 02h
int 21h

dec cx
jnz ciklas

pop dx				 ;viska istraukiam is steko
pop cx
pop bx
pop ax
ret					; griztam is proceduros
i16taine endp

END Start

Nuoroda į pranešimą
Dalintis kituose puslapiuose

Prisijunkite prie diskusijos

Jūs galite rašyti dabar, o registruotis vėliau. Jeigu turite paskyrą, prisijunkite dabar, kad rašytumėte iš savo paskyros.

Svečias
Parašykite atsakymą...

×   Įdėta kaip raiškusis tekstas.   Atkurti formatavimą

  Only 75 emoji are allowed.

×   Nuorodos turinys įdėtas automatiškai.   Rodyti kaip įprastą nuorodą

×   Jūsų anksčiau įrašytas turinys buvo atkurtas.   Išvalyti redaktorių

×   You cannot paste images directly. Upload or insert images from URL.

Įkraunama...
  • Dabar naršo   0 narių

    Nei vienas registruotas narys šiuo metu nežiūri šio puslapio.

  • Prisijunk prie bendruomenės dabar!

    Uždarbis.lt nariai domisi verslo, IT ir asmeninio tobulėjimo temomis, kartu sprendžia problemas, dalinasi žiniomis ir idėjomis, sutinka būsimus verslo partnerius ir dalyvauja gyvuose susitikimuose.

    Užsiregistruok dabar ir galėsi:

    ✔️ Dalyvauti diskusijose;

    ✔️ Kurti naujas temas;

    ✔️ Rašyti atsakymus;

    ✔️ Vertinti kitų žmonių pranešimus;

    ✔️ Susisiekti su bet kuriuo nariu asmeniškai;

    ✔️ Naudotis tamsia dizaino versija;

    ir dar daugiau.

    Registracija trunka ~30 sek. ir yra visiškai nemokama.

  • Naujausios temos

  • Karštos temos

×
×
  • Pasirinkite naujai kuriamo turinio tipą...