I actually want to print the content of the dx register with nasm. Thereby the content is a 16 bit hex digit such as 0x12AB.
Therefore I've first implemented a function which is able to print a string:
print_string: pusha mov ah, 0xe print_character: mov al, [bx] inc bx or al, al jz print_done int 0x10 jmp print_character print_done: popa ret
You can use this function in this way:
mov bx, MSG call print_string MSG: db 'Test',0
Now i want to have a function, which converts the hex to a string, so that print_string is capable to print it. I was thinking about something like that:
print_hex: pusha mov bx, HEX_OUT ; HEX_OUT is a kind of template string ; now i want to get the hex of dx into this template in order to be able to print it ; However I'm not sure how to manage this call print_string popa ret HEX_OUT: db '0x0000', 0
Unfortunately I'm not sure how I get the hex from dx into bx, respectively the HEX_OUT. Can someone help me or does someone have an idea?
I want to use it at the end like this:
mov dx, 0x12AA call print_hex
Thanks you already in advance!
As mentioned I could achieve the separating and printing like this:
print_hex: pusha mov bx, PREFIX call print_string next_character: mov bx, dx and bx, 0xf000 shr bx, 4 add bh, 0x30 cmp bh, 0x39 jg add_7 print_character_hex: mov al, bh mov ah, 0x0e int 0x10 shl dx, 4 or dx, dx jnz next_character popa ret add_7 add bh, 0x7 jmp print_character_hex PREFIX: db '0x', 0
I tried something like this to print it with my function and the buffer:
print_hex: ;Added this here mov cx, HEX_OUT + 2 print_character_hex: mov [cx], bh
Though I can't assemble this due to "invalid effective address". What do I need to do in order to accomplish this?