Как это работает с [si] и всякими ds:bx?
Например у меня стоит задача превратить число в текст:
; in: ax - number
; out: ds:bx - text
; cx - number of digits
itoa proc
...
itoa endp
Именно с такой спецификацией.
Допустим number of digits я уже правильно посчитал.
Я делаю так:
itoa proc
push ax
push bx
push dx
mov si, cx ; index to the end
mov bx, 10 ; dividing by 0
mov [si], 0 ; 0 to the end
dec si
get_digit:
xor dx, dx ; zero dx before dividing
div bx
add dl, 48 ; digit -> char
dec si
mov [si], dl
or ax, ax
jnz get_digit
pop dx
pop bx
pop ax
ret
itoa endp
И что теперь мне с этим [si] делать? Где вообще это [si]?
Если я буду иметь char[] в виде:
.data
text1 db 512 dup(?)
То если:
mov ax, @data
mov ds, ax
mov dx, offset text1
То это я могу понять. Теперь под ds:dx мой text1. Но какое это имеет
отношение к [si]? Как [si] относится к text1 и к ds:dx? Как все это в памяти соотносится?
И как скопировать содержимое [si] в text1? А как в ds:bx?
И верно ли что я делаю так:
mov si, cx ; index to the end
где cx = number of digits?
Или я вообще где-то совсем не прав?
>>>