NASM - The Netwide Assembler
NASM Forum => Example Code => Topic started by: Jutro on September 01, 2015, 12:13:09 PM
-
Hello,
I have one integer variable. How writing UTF8 char coresponding integer value.
A=41
Print A
Return character number 41 in unicode table.
-
Dunno. My understanding is that UTF8 characters with the high bit clear are the same as ASCII, so 'A' may not be a problem. My understanding is that if the high (sign?) bit is set in the first byte, the number of set bits (not the value) indicates the number of following bytes in the UNICODE encoding (little endian?). There's some info in the Friendly Manual - http://www.nasm.us/doc/nasmdoc3.html#section-3.4.5
- but it does not seem too helpful. I strongly suspect "what OS?" makes a difference... Sorry I can't help you more.
Best,
Frank
-
I need linux code.
I need procedure to covert integer to UTF8
Your link is in situation when i create string.
Look this http://www.fileformat.info/info/unicode/char/2692/index.htm
UTF-16 (decimal) 9 874
UTF-8 (hex) 0xE2 0x9A 0x92 (e29a92)
How covert integer a= 9874 to string UTF8
Im beginer in nasm
-
I need linux code.
I need procedure to covert integer to UTF8
So you want to be spoon-fed code? Google is your friend.
Im beginer in nasm
Nothing wrong with that. Everyone starts out that way. But to gain knowledge and experience requires effort. Show us what you've got and we'll work with you.
-
alle example showing hello word
string not one char
adressing string and register are different.
I need some help.
If this is that easy erite
-
Wikipedia is a good place to start. https://en.wikipedia.org/wiki/UTF-8#Examples (https://en.wikipedia.org/wiki/UTF-8#Examples)
-
Wikipedia is a good place to start. https://en.wikipedia.org/wiki/UTF-8#Examples (https://en.wikipedia.org/wiki/UTF-8#Examples)
Im not have troouble with utf i have troouble with integer.
How print integer data to char data and show ?
Linux
-
Hi Jutro,
Ah, just printing an integer is something I can help you with. For 32-bit Linux, at least...
This is a very simple-minded one I use for debugging purposes, mostly.
;---------------------------------
showeaxd:
push eax
push ebx
push ecx
push edx
push esi
sub esp, 10h
lea ecx, [esp + 12]
mov ebx, 10
xor esi, esi
mov byte [ecx], 0 ; zero-teminated - we don't reall use this
.top:
dec ecx
xor edx, edx
div ebx
add dl, '0'
mov [ecx], dl
inc esi
or eax, eax
jnz .top
mov edx, esi
mov ebx, 1
mov eax, 4
int 80h
add esp, 10h
pop esi
pop edx
pop ecx
pop ebx
pop eax
ret
;---------------------------------
Here's one the late Chuck Crayne showed me. It just puts the characters in a buffer - doesn't print them. (which means it can be used in Windows too) It can do right-justified numbers - looks nice if you're printing a column of numbers...
; from Chuck Crayne - RIP, Chuck.
;convert binary to ascii
;call with eax = signed binary number
; esi = address of output string
; ecx = length of output string
;returns esi = 1st printed digit
; ecx = no of digits printed (includes sign if any)
; other registers preserved
binasc: push edx
push ebx
push edi
push eax
mov edi,esi ;save start of string
ba1: mov byte [esi],' ' ;fill string with blanks
inc esi
loop ba1
mov ebx,10 ;initialize divisor
or eax,eax ;value negative?
jns ba2 ;no problem
neg eax ;make it positive
ba2: xor edx,edx ;clear high part of dividend
div ebx ;divide by 10
add dl,'0' ;convert to ascii digit
dec esi ;step backwards through buffer
mov [esi],dl ;store digit
inc ecx
cmp esi,edi ;out of space
jz ba4 ;yes - quit
or eax,eax ;all digits printed?
jnz ba2 ;no - keep trucking
pop eax ;get original value
or eax,eax ;negative?
jns ba3 ;no - quit
dec esi ;place for sign
mov byte [esi],'-'
inc ecx ;add to char count
ba3: pop edi
pop ebx
pop edx
ret
ba4: pop eax
jmp ba3
;-------------------
There's also "just call printf" which some people prefer...
Here's a routine to get a number (characters) from the user and convert to integer, if you need it.
;--------------------
atoi:
mov edx, [esp + 4] ; pointer to string
xor eax, eax ; clear "result"
.top:
movzx ecx, byte [edx]
inc edx
cmp ecx, byte '0'
jb .done
cmp ecx, byte '9'
ja .done
; we have a valid character - multiply
; result-so-far by 10, subtract '0'
; from the character to convert it to
; a number, and add it to result.
lea eax, [eax + eax * 4]
lea eax, [eax * 2 + ecx - '0']
jmp short .top
.done:
ret
;------------------------
If you have trouble seeing how to use these, just ask. Got hex version, too.
I've been meaning to experiment with UTF-8, too, but haven't gotten around to it yet. Maybe I never will...
Best,
Frank