30 decembrie 2010

Conversii hexa <-> zecimal (probleme)

; zecimal cu semn in hexazecimal cu directive simplificate -32768..0..32767

.286
.model small
.DATA
sirin DB CR,LF,"Dati numarul in zecimal:$"
erro DB CR,LF,"EROARE-numar neacceptat$"
zecimal db 7,9 DUP(?)
zece DW 10
CR=10
LF=13
.STACK 64
.CODE

assume DS:@DATA

include cio.h
include ascii.h
include bascii.h

start:
MOV AX,@DATA
MOV DS,AX
main:
outstr sirin

in_str zecimal
co CR
co LF

mov AH,zecimal[2]
cmp AH,'-'
je bit_semn
cmp AH,'+'
je bit_semn
mov AH,zecimal[1]
cmp AH,6
je eroare
mov SI,2
mov CL,zecimal[1]
mov CH,0
jmp conversie
bit_semn:
MOV SI,3
mov CL,zecimal[1]
mov CH,0
dec CL
jmp conversie

eroare:
outstr erro
jmp main

conversie:
mov ax,0
bucla:
mov bh,0
mov BL,zecimal[si]
mov dx,0
sub bl,30h
jb eroare
cmp bl,9
ja eroare
mul zece
add ax,bx
inc si
loop bucla
cmp dx,0
jne eroare
or ax,ax ;seteaza indicatori pt ax
jns preg
mov dx,ax
and dx,7fffh
cmp dx,0
jne eroare
mov ch,zecimal[2]
cmp ch,'-'
jne eroare
mov ax,8000h
jmp afisare
preg: ;pregatire afisare
mov BH, zecimal[2]
cmp BH,'-'
jne afisare
neg ax
afisare:
mov DL,AL
mov AL,AH
call bascii
co AH
co AL
mov AL,DL
call bascii
co AH
co AL
jmp main


END start


; conversie din hexazecimal in zecimal cu semn, cu directive complete, format .com, asciitab, prin stiva

.286

prog segment
assume CS:prog, DS:prog, SS:prog

org 100h
start:
jmp inceput

; date
hexMsg db 0ah, 0dh, 'Hexa:$'
zecMsg db 0ah, 0dh, 'Zecimal:$'
zece dw 10
BUFIN DB 5, 7 DUP (?)
semn db 0
tabela db '0123456789ABCDEF'

; stiva
dw 100 dup(?)
varf label word

include hexa.h
include cio.h
include asciitab.h
include citcuv.h
include bascii.h
inceput:
MOV AX, CS
MOV DS, AX
MOV SS, AX
lea SP, varf
reiahex:
outstr hexMsg
call citcuv
jc reiahex
MOV AX,DX
or AX,AX
outstr zecMsg

jns continua
co '-'
neg AX
continua:
xor CX, CX
conversie_cif:
xor DX, DX
div zece
push DX
inc CX
cmp AX, 0
jne conversie_cif

afisareNr:
pop AX
call ascii
co AL
loop afisareNr
jmp reiahex
prog ends
end start

Niciun comentariu: