Перевод числа в разные системы счисления - Assembler
Формулировка задачи:
Здравствуйте. Я недавно наткнулся на программу по переводу числа, представленного в виде квадрослова, в системы счисления 2,8,10,16,17 и не понял принцип ее работы. Может кто-нибудь глянуть и обьяснить ?
model tiny .code org 100h n equ 8 start: lea di,dbLong mov cx,8 xor ax,ax rep stosb mov ah,9 lea dx,dbEnter int 21h mov bl,10 @@1: xor ax,ax int 16h cmp al,13 jz @@2 cmp al,'0' jb @@1 cmp al,'9' ja @@1 push ax and al,0fh call longMul jc @@9 pop ax int 29h jmp @@1 @@2: mov cx,szsys lea si,allSys @@3: mov bl,[si] inc si mov ah,9 mov dx,[si] int 21h add si,2 push cx push si mov cx,n lea si,dbLong lea di,dbTemp rep movsb mov byte ptr count,0 @@4: xor ax,ax mov cx,8 lea si,dbTemp @@5: lodsb or ah,al loop @@5 or ah,ah jz @@7 call longDiv mov al,ah cmp al,9 jbe @@6 add al,7 @@6: add al,'0' push ax inc byte ptr count jmp @@4 @@7: xor cx,cx mov cl,count @@8: pop ax int 29h loop @@8 pop si pop cx loop @@3 @@9: xor ax,ax int 16h ret longMul: mov cx,n lea si,dbLong LM: xchg al,[si] xor ah,ah mul bl add [si],al adc ah,0 xchg al,ah inc si loop LM or al,al jz LMe mov ah,9 lea dx,dbBuff int 21h stc LMe: ret longDiv: push si push cx mov cx,n lea si,dbTemp + n xor ax,ax mov bh,16 LD: dec si mov al,[si] div bl mov [si],al loop LD pop cx pop si ret dbBuff db 10,13,'Error - buffer overflow$' dbEnter db 10,13,'Enter number:$' db2 db 10,13,'in Binary Numeration System(Bin):$' db8 db 10,13,'in Octal Numeration System(Oct):$' db10 db 10,13,'in Decimal Numeration System(Dec):$' db16 db 10,13,'in Hexadecimal Numeration System(Hex):$' db17 db 10,13,'in any decimal Numeration System(Any):$' allsys db 2 dw offset db2 db 8 dw offset db8 db 10 dw offset db10 db 16 dw offset db16 db 17 dw offset db17 szSys equ 5 count db ? dblong dq ? dbTemp dq ? end start
Решение задачи: «Перевод числа в разные системы счисления»
textual
Листинг программы
dblong dq ?;n dup(?) dbTemp dq ?;n dup(?)
Объяснение кода листинга программы
- Переменная
dblong
объявлена как двойное слово (double word), что обычно означает 4 байта или 8 байт в 64-битной системе. В данном случае, это 8 байт. Тип данных -dq
. Значение переменной не определено, обозначено как?
- Переменная
dbTemp
также объявлена как двойное слово, также с типом данныхdq
. Значение переменной также не определено, обозначено как?
Однако, без продолжения кода, невозможно точно сказать, что происходит дальше.