|
|
| Посл.отвђт | Сообщенiе |
|
|
Дата: Июл 19, 2003 08:56:21 · Поправил: Безпощадный даос Я написал программу, которая переводит числа из одной системы исчисления в другую. Вот её код. В чем ошибка? Помогите.
data segment
xtable db '0123456789ABCDEF'
string db 10 dup(0)
len_string=$-string
string_e db "Integer is big$",13,10
ent db 13,10,'$'
buffer db 16 dup(' ')
bufferEnd label byte
data ends
st1 segment stack
db 200 dup(0)
st1 ends
code segment
beg:
assume cs:code, ss:st1, ds:data
mov ax,data
mov ds,ax
mov ax,st1
mov ss,ax
xor bx,bx
lea dx,string
mov cx,len_string
mov ah,3fh
int 21h
mov cx,ax
sub cx,2
jcxz exit
dec cx
lea si,string
xor ax,ax
jcxz L2
mov bx,10
L1:
xor dx,dx
mov dl,[si]
and dl,0Fh
add ax,dx
mul bx
jc exit_e
inc si
loop L1
push ax
M1:
mov ah,0
int 16h
cmp al,'b'
jz bin
cmp al,'h'
jz hex
cmp al,'o'
jz oct
cmp al,'d'
jz dec3
jmp M1
exit:
mov ah,4Ch
int 21h
exit_e:
mov ah,9
lea dx,string_e
int 21h
jmp exit
L2:
mov dl,[si]
and dl,0fh
add ax,dx
jc exit
push ax
jmp M1
dec3:
jmp dec2
bin:
call ent1
pop ax
xor cx,cx
lea di,bufferEnd
mov bx,2
B1:
xor dx,dx
div bx
xchg ax,dx
push bx
lea bx,xtable
xlat
pop bx
dec di
mov [di],al
xchg ax,dx
inc cx
or ax,ax
jz vivod
jmp B1
dec2:
jmp dec1
hex:
call ent1
pop ax
xor cx,cx
mov bx,16
lea di,bufferEnd
H1:
xor dx,dx
div bx
xchg ax,dx
push bx
lea bx,xtable
xlat
pop bx
dec di
mov [di],al
xchg ax,dx
inc cx
or ax,ax
jz vivod
jmp H1
oct:
call ent1
pop ax
xor cx,cx
mov bx,8
lea di,bufferEnd
O1:
xor dx,dx
div bx
xchg ax,dx
push bx
lea bx,xtable
xlat
pop bx
dec di
mov [di],al
xchg ax,dx
inc cx
or ax,ax
jz vivod
jmp O1
dec1:
call ent1
pop ax
xor cx,cx
mov bx,10
lea di,bufferEnd
D1:
xor dx,dx
div bx
xchg ax,dx
push bx
lea bx,xtable
xlat
pop bx
dec di
mov [di],al
xchg ax,dx
inc cx
or ax,ax
jz vivod
jmp D1
vivod:
mov ah,2
mov dl,[di]
int 21h
inc di
loop vivod
jmp exit
ent1 proc
mov ah,2
mov dl,al
int 21h
mov ah,9
lea dx,ent
int 21h
ret
ent1 endp
code ends
end beg
|
|
|
Дата: Июл 20, 2003 01:57:17 ruslan20031 Ты бы хоть комментариев добавил, что ли |
|
|
Дата: Июл 21, 2003 04:30:33 ruslan20031 1) Вначале программы не инициализируется регистр SP; 2) Операцию чтения со стандартного потока ввода (int21h AH=3Fh) надо проверять на JC; 3) В первоначальном преобразовании из строки в число программа не преобразовывает последний символ, например, ввел 123, в результате преобразования получил 120, что дальше приводит к операциям с неверным числом. PS зачем бессмысленный jmp dec3 -> jmp dec2 -> jmp dec1. |
|
Powered by miniBB 1.6 © 2001-2002
Время загрузки страницы (сек.): 0.084 |