Перевод числа в разные системы счисления - 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(?)

Объяснение кода листинга программы

  1. Переменная dblong объявлена как двойное слово (double word), что обычно означает 4 байта или 8 байт в 64-битной системе. В данном случае, это 8 байт. Тип данных - dq. Значение переменной не определено, обозначено как ?
  2. Переменная dbTemp также объявлена как двойное слово, также с типом данных dq. Значение переменной также не определено, обозначено как ? Однако, без продолжения кода, невозможно точно сказать, что происходит дальше.

Оцени полезность:

10   голосов , оценка 3.8 из 5
Похожие ответы