;Assignment No. : 2
;Assignment Name: Write X86/64 ALP to accept a string and to display its length.
;---------------------------------------------------------------------
section .data
msg db 10,10,"Enter the string: "
msg_len equ $-msg
smsg db 10,10,"The length of string is: "
smsg_len equ $-smsg
;---------------------------------------------------------------------
Section .bss
string resb 50
stringl equ $-string
count resb 1
char_ans resb 2
;---------------------------------------------------------------------
%macro Print 2
mov rax, 1
mov rdi, 1
mov rsi, %1
mov rdx, %2
syscall
%endmacro
%macro Read 2
mov rax, 0
mov rdi, 0
mov rsi, %1
mov rdx, %2
syscall
%endmacro
%macro Exit 0
mov rax, 60
mov rdi, 0
syscall
%endmacro
;---------------------------------------------------------------------
section .text
global _start
_start:
Print msg, msg_len
Read string, stringl
mov [count], rax
Print smsg, smsg_len
mov rax, [count]
call Display
Exit
;--------------------------------------------------------------------
Display:
mov rbx,16 ; divisor=16 for hex
mov rcx,2 ; number of digits
mov rsi,char_ans+1 ; load last byte address of char_ans buffer in rsi
cnt
: mov rdx
,0 ; make rdx
=0 (as in
div instruction rdx
:rax
/rbx
)
cmp dl, 09h ; check for remainder in rdx
jbe add30
add dl, 07h
add30:
add dl,30h ; calculate ASCII code
mov [rsi],dl ; store it in buffer
dec rsi ; point to one byte back
dec rcx ; decrement count
jnz cnt ; if not zero repeat
Print char_ans,2 ; display result on screen
ret
;----------------------------------------------------------------
O0Fzc2lnbm1lbnQgTm8uCTogMgo7QXNzaWdubWVudCBOYW1lOiBXcml0ZSBYODYvNjQgQUxQIHRvIGFjY2VwdCBhIHN0cmluZyBhbmQgdG8gZGlzcGxheSBpdHMgbGVuZ3RoLgo7LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCnNlY3Rpb24gICAgLmRhdGEKCgltc2cJCWRiCTEwLDEwLCJFbnRlciB0aGUgc3RyaW5nOgkiCgltc2dfbGVuCWVxdQkkLW1zZwoKCXNtc2cJCWRiCTEwLDEwLCJUaGUgbGVuZ3RoIG9mIHN0cmluZyBpczoJIgoJc21zZ19sZW4JZXF1CSQtc21zZwoKOy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpTZWN0aW9uICAgLmJzcwoJCiAgICBzdHJpbmcgcmVzYiA1MAogICAgc3RyaW5nbCBlcXUgJC1zdHJpbmcKICAgIGNvdW50IHJlc2IgMQoJY2hhcl9hbnMJcmVzYgkyCjstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KJW1hY3JvICBQcmludCAgIDIKCW1vdiAgIHJheCwgMQoJbW92ICAgcmRpLCAxCgltb3YgICByc2ksICUxCgltb3YgICByZHgsICUyCglzeXNjYWxsCiVlbmRtYWNybwoKJW1hY3JvICBSZWFkICAgMgoJbW92ICAgcmF4LCAwCgltb3YgICByZGksIDAKCW1vdiAgIHJzaSwgJTEKCW1vdiAgIHJkeCwgJTIKCXN5c2NhbGwKJWVuZG1hY3JvCgolbWFjcm8JRXhpdAkwCgltb3YgIHJheCwgNjAKCW1vdiAgcmRpLCAwCglzeXNjYWxsCiVlbmRtYWNybwoKOy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpzZWN0aW9uICAgIC50ZXh0CglnbG9iYWwgICBfc3RhcnQKX3N0YXJ0OgoJUHJpbnQJbXNnLCBtc2dfbGVuCglSZWFkIHN0cmluZywgc3RyaW5nbAoJbW92IFtjb3VudF0sIHJheAoKICAgIFByaW50IHNtc2csIHNtc2dfbGVuCiAgICBtb3YgcmF4LCBbY291bnRdCiAgICBjYWxsIERpc3BsYXkKCUV4aXQKOy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCQpEaXNwbGF5OgoJbW92IAkJcmJ4LDE2CQkJOyBkaXZpc29yPTE2IGZvciBoZXgKCW1vdiAJCXJjeCwyCQkJOyBudW1iZXIgb2YgZGlnaXRzIAoJbW92IAkJcnNpLGNoYXJfYW5zKzEJCTsgbG9hZCBsYXN0IGJ5dGUgYWRkcmVzcyBvZiBjaGFyX2FucyBidWZmZXIgaW4gcnNpCgpjbnQ6CW1vdiAJCXJkeCwwCQkJOyBtYWtlIHJkeD0wIChhcyBpbiBkaXYgaW5zdHJ1Y3Rpb24gcmR4OnJheC9yYngpCglkaXYgCQlyYngKCgljbXAgCQlkbCwgMDloCQkJOyBjaGVjayBmb3IgcmVtYWluZGVyIGluIHJkeAoJamJlICAJYWRkMzAKCWFkZCAgCWRsLCAwN2ggCmFkZDMwOgoJYWRkIAkJZGwsMzBoCQkJOyBjYWxjdWxhdGUgQVNDSUkgY29kZQoJbW92IAkJW3JzaV0sZGwJCQk7IHN0b3JlIGl0IGluIGJ1ZmZlcgoJZGVjIAkJcnNpCQkJCTsgcG9pbnQgdG8gb25lIGJ5dGUgYmFjawoKCWRlYyAJCXJjeAkJCQk7IGRlY3JlbWVudCBjb3VudAoJam56IAkJY250CQkJCTsgaWYgbm90IHplcm8gcmVwZWF0CgkKCVByaW50IAljaGFyX2FucywyCQk7IGRpc3BsYXkgcmVzdWx0IG9uIHNjcmVlbgpyZXQKOy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0=