Как можно число разделить на разрядность на ассемблере?

Мне надо перевести арабские числа в римские. Я так понял через

  InBuff    label  byte
   MaxSymb   Db  6
    RealSymb  Db  ?
  StringT db 1 dup ('$')
  

и при

xor ax,ax
mov dx, offset InBuff
mov ah, 0ah
int 21h
xor dx,dx

мы записываем в StringT массив строки из символов '1','2','3'а не само число 123 если ввели с клавиатуры. Тогда я думал можно будет вписать в si этот символ, я отнял 30h (т.к. '1' = 31h) и сохранил значение в si умножить его на 6 из-за того что у меня 6 байт разница между римскими числами и вывести на экран.

roman2 db '$$$$$$-I-$$$-II-$$-III-$-IV-$$-V-$$$-VI-$$-VII-$-VIII-$-IX-$$'  
;6-8 = I, 12- = II, 18- = III, 24 = IV, 30 = V, 
;36 = VI, 42= VII, 48 = VIII,56 = IX

Сложности появились когда почему-то

mov dx, offset roman2[12h]
mov ah,9
int 21h
xor dx,dx

и

mov dx, offset roman2[si]
mov ah,9
int 21h
xor dx,dx

оказались не равны, хотя в турбо дебагере значение 12h у si. Cейчас мне кажется значение 12h у si воспринимается только как символ аски, а как просто шестнадцатеричное значение не хочет восприниматься. Переменные нельзя использовать внутри roman2[var] пишет что-то про cant add relative quantities, как выйти из данной ситуации? Весь код https://pastebin.com/6iAFhR02


Ответы (0 шт):