В то время как другие ответы дают вам прямое решение вашей проблемы, я хотел бы написать кое-что о теории, потому что я думаю, что она поможет вам в следующий раз:
Как вы уже написали,десятичное число 1234 записывается как 4D2 в шестнадцатеричной системе, а 4321 записывается как 10E1.
Это означает, что операция «обращение числа» приводит к различным результатам в разных системах счисления:
в десятичном видеСистема «Возврат» 1234 приводит к 4321. В шестнадцатеричной системе «Возврат» 4D2 приводит к 2D4.Используя фиксированную длину из 4 шестнадцатеричных цифр (16-битных регистров!), Однако «возврат» 04D2 приведет к 2D40 ...
Если какая-то операция работает только в определенной базе (*), вы должны учитыватьследующее:
Используя компьютер, работающий с байтами, вы можете легко выполнять операции в base-256: xchg bh,bl
"вернет" две цифры числа в системе base-256.
Выполнение операций с базой 2 ^ N (например, двоичной, восьмеричной или шестнадцатеричной) возможно с использованием сдвига и поворота.
Однако для операций с другими базами (например, десятичной) вам потребуется вычислить однозначные числа, выполнитьи вычислите (двоичное) число из цифр.
Для возврата десятичного числа может работать следующий псевдокод:
A = input (here: 1234)
B = 0
mainLoop:
digit = A mod 10 (get the right digit of A)
A = A/10 (remove the right digit from A)
B = 10*B + digit (append the digit to B)
if A>0: jump to mainLoop
В ассемблере код может выглядеть следующим образом:
mov ax,1234 ; ax = "A" in the pseudo-code
mov cx,0 ; cx = "B" in the pseudo-code
mov bx,10 ; The base we are working in
mainLoop:
xchg ax,cx ; "mul" can only work with ax
mul bx ; Results: ax = "10*B"
; dx = overflow (typically 0)
xchg ax,cx ; Change ax and cx back: cx="10*B"
mov dx,0 ; Prepare dx for "div"
div bx ; Perform division and modulo
; Result:
; ax = "A/10"
; dx = "A MOD 10" = "digit"
add cx,dx ; "B = 10*B+digit"
cmp ax,0
ja mainLoop
; Here cx will contain the "reverted" number
(*) Операция, которую вы хотите выполнить, заключается не в «возврате числа», а в «возврате десятичного числа».