какие нить идеи как это делать?
пока умею hexa to dec,hexa to binary,hexa to octal
Другие языки программирования и технологии

я должен написать прогу на ассемблере для перевода числа из восьмеричной системы в десятичную
Идея такая: вводить числа в восьмеричной системе, а выводить в десятичной.
Если писать для Windows или Linux, то это очень просто. Особенно, если не проверять корректность ввода.
Windows:
from msvcrt.dll
import printf
import scanf_s
import _getch
import _exit
section "code" class_code
section "data" class_data
section "idata" class_imports
.data
Prompt db "Введите число в восьмеричной системе: ", 10, 0
Result db "Число в десятичной системе: ", 10, "%d", 10, 10
db "Для завершения работы нажмите любую клавишу... ", 0
Format db "%o", 0
X rd 1
.code
.entry N169555874
N169555874:
cinvoke printf, Prompt
cinvoke scanf_s, Format, X
cinvoke printf, Result, [X]
invoke _getch
cinvoke _exit, 0
Linux:
extern printf
extern scanf
extern exit
section .data
Prompt db "Введите число в восьмеричной системе: ", 10, 0
Result db "Число в десятичной системе: ", 10, "%d", 10, 0
Format db "%o", 0
section .bss
X resd 1
section .text
global main
main:
push Prompt
call printf
push X
push Format
call scanf
push dword [X]
push Result
call printf
add esp, 20
call exit
Для MS DOS немного сложнее:
format MZ
entry code:N169555874
segment code
N169555874:
mov cx, data_seg
mov ds, cx
mov dx, Prompt
mov ah, 9
int 21h
call ReadOct
push eax
mov ah, 9
mov dx, Result
int 21h
pop eax
call WriteDec
mov ah, 9
mov dx, WaitMsg
int 21h
mov ax, 0C08h
int 21h
mov ax, 4C00h
int 21h
ReadOct:
xor ebx, ebx
mov cx, bx
mov edx, ebx
mov esi, ebx
RepRead:
mov ah, 8
int 21h
test al, al
jnz @F
int 21h
jmp RepRead
@@:
mov bl, al
jcxz ReadSign
cmp al, 0Dh
jne @F
cmp cx, 1
jne ReadQuit
test bh, bh
jnz RepRead
jmp ReadQuit
@@:
cmp al, 8
jne ReadDig
cmp cx, 1
jne @F
xor esi, esi
mov ebx, esi
@@:
int 29h
mov al, 20h
int 29h
mov al, 8
int 29h
shr edx, 3
dec cx
jmp RepRead
ReadSign:
cmp al, 2Dh
jne @F
not esi
jmp SetSign
@@:
cmp al, 2Bh
jne ReadDig
SetSign:
mov bh, 1
jmp ReadNext
ReadDig:
sub al, 30h
cmp al, 8
jae RepRead
test edx, 0F0000000h
jnz RepRead
shl edx, 3
or dl, al
ReadNext:
inc cx
mov al, bl
int 29h
jmp RepRead
ReadQuit:
mov al, 0Dh
int 29h
mov al, 0Ah
int 29h
mov eax, edx
xor eax, esi
sub eax, esi
ret
WriteDec:
push dx
test eax, eax
jns @F
push eax
mov al, 2Dh
int 29h
pop eax
neg eax
@@:
xor edx, edx
mov ebx, 10
div ebx
or dl, 30h
test eax, eax
jz @F
call WriteDec
@@:
mov al, dl
int 29h
pop dx
ret
segment data_seg
Prompt db "Введите число в восьмеричной системе: ", 13, 10, 36
Result db "Число в десятичной системе: ", 13, 10, 36
WaitMsg db 13, 10, 10, "Для завершения работы нажмите любую клавишу... $"

Разбирайтесь.
Если писать для Windows или Linux, то это очень просто. Особенно, если не проверять корректность ввода.
Windows:
from msvcrt.dll
import printf
import scanf_s
import _getch
import _exit
section "code" class_code
section "data" class_data
section "idata" class_imports
.data
Prompt db "Введите число в восьмеричной системе: ", 10, 0
Result db "Число в десятичной системе: ", 10, "%d", 10, 10
db "Для завершения работы нажмите любую клавишу... ", 0
Format db "%o", 0
X rd 1
.code
.entry N169555874
N169555874:
cinvoke printf, Prompt
cinvoke scanf_s, Format, X
cinvoke printf, Result, [X]
invoke _getch
cinvoke _exit, 0
Linux:
extern printf
extern scanf
extern exit
section .data
Prompt db "Введите число в восьмеричной системе: ", 10, 0
Result db "Число в десятичной системе: ", 10, "%d", 10, 0
Format db "%o", 0
section .bss
X resd 1
section .text
global main
main:
push Prompt
call printf
push X
push Format
call scanf
push dword [X]
push Result
call printf
add esp, 20
call exit
Для MS DOS немного сложнее:
format MZ
entry code:N169555874
segment code
N169555874:
mov cx, data_seg
mov ds, cx
mov dx, Prompt
mov ah, 9
int 21h
call ReadOct
push eax
mov ah, 9
mov dx, Result
int 21h
pop eax
call WriteDec
mov ah, 9
mov dx, WaitMsg
int 21h
mov ax, 0C08h
int 21h
mov ax, 4C00h
int 21h
ReadOct:
xor ebx, ebx
mov cx, bx
mov edx, ebx
mov esi, ebx
RepRead:
mov ah, 8
int 21h
test al, al
jnz @F
int 21h
jmp RepRead
@@:
mov bl, al
jcxz ReadSign
cmp al, 0Dh
jne @F
cmp cx, 1
jne ReadQuit
test bh, bh
jnz RepRead
jmp ReadQuit
@@:
cmp al, 8
jne ReadDig
cmp cx, 1
jne @F
xor esi, esi
mov ebx, esi
@@:
int 29h
mov al, 20h
int 29h
mov al, 8
int 29h
shr edx, 3
dec cx
jmp RepRead
ReadSign:
cmp al, 2Dh
jne @F
not esi
jmp SetSign
@@:
cmp al, 2Bh
jne ReadDig
SetSign:
mov bh, 1
jmp ReadNext
ReadDig:
sub al, 30h
cmp al, 8
jae RepRead
test edx, 0F0000000h
jnz RepRead
shl edx, 3
or dl, al
ReadNext:
inc cx
mov al, bl
int 29h
jmp RepRead
ReadQuit:
mov al, 0Dh
int 29h
mov al, 0Ah
int 29h
mov eax, edx
xor eax, esi
sub eax, esi
ret
WriteDec:
push dx
test eax, eax
jns @F
push eax
mov al, 2Dh
int 29h
pop eax
neg eax
@@:
xor edx, edx
mov ebx, 10
div ebx
or dl, 30h
test eax, eax
jz @F
call WriteDec
@@:
mov al, dl
int 29h
pop dx
ret
segment data_seg
Prompt db "Введите число в восьмеричной системе: ", 13, 10, 36
Result db "Число в десятичной системе: ", 13, 10, 36
WaitMsg db 13, 10, 10, "Для завершения работы нажмите любую клавишу... $"

Разбирайтесь.


http://meatspean.rf/?hax/forum/assembler
Посмотри, тут вроде неплохие исходники попадаются.
Посмотри, тут вроде неплохие исходники попадаются.
Похожие вопросы
- аааа сессия горит!!! помогите написать на си(не с++): перевод числа в двоичную систему
- Как перевести число из восьмеричной системы счисления в двоичную в Ассемблер (tasm) Программа должна быть простой!
- Помогите написать программу перевода чисел из двоичного формата в десятичный на языке C#
- Если парень в 11 классе смог написать программу по переводу чисел из одной системы счисления в другую, то ему смело
- Алгоритмы перевода чисел из одной системы счисления в другую, арифметика в различных системах счисления
- перевод чисел в двоичную,восьмеричную системы счисления
- Как перевести число из двоичной системы счисления в восьмеричную в Ассемблер (tasm) Программа должна быть простой!
- Перевести числа 57 и 13 из десятичной системы счисления в:двоичную, пятеричную, восьмеричную, шестнадцатеричную?
- Как перевести число из троичной системы счисления в десятичную в Ассемблер (tasm)
- как сделать в Паскале задачу/программу по переводу числа из десятичной в римскую систему счисления???