ec1 TITLE H2D.ASM ;===== Konverterar ett inmatat HEX-tal till decimal form ;===== samt skriver ut det p† sk„rmen. ;======================================================================== INCLUDE CONV.MAC INCLUDE SCREEN.MAC INCLUDE KEYB.MAC ;------------------------------------------------------------------------ CSEG SEGMENT ASSUME CS:CSEG,DS:CSEG ORG 100h start: jmp begin buffer db 7 dup (?) par_flag db 0 ;----------------------------------------------------------------------- main PROC NEAR call Param_Read jcxz get_going ;;CX <> 0 signalerar Error jmp Quit Get_Going: cmp par_flag,1 jz no_msg Print 'Converts Hexadecimal to Decimal, exits' cr_lf no_msg: cr_lf next_inp: cmp par_flag,1 jz not_empty Print 'HEX value: ' hex4_in ;Get HEX input cmp bx,0000h jnz not_empty jmp Quit not_empty: cmp par_flag,1 jz no_tab tab 25 no_tab: Print 'Decimal value = ' Hex2Dec buffer From_Buf Buffer cmp par_flag,1 jz Quit cr_lf jmp next_inp Quit: cr_lf ret main ENDP ;------------------------------------------------------------------------- Param_Read PROC NEAR xor cx,cx ;;Nollst„ll error-flag cmp byte ptr ds:[80h],0 jnz par_exist jmp ready par_exist: mov par_flag,1 mov di,081h Skip_spaces: ;;Skippa inledande blanksteg Inc di cmp byte ptr[di],020h jz Skip_Spaces xor bx,bx ;;Nollst„ll tecken_r„knare xor dx,dx ;;Nollst„ll DX-register Next_Char: mov al,[di] cmp al,0dh ;; avslutar inmatning jz Ready cmp al,020h ;;Till†t space i slutet av str„ngen jnz no_spc jmp chk_end no_spc: cmp al,'0' ;;Error if lower than '0' jl Error cmp al,'9' jle Save ;;Save if Lower or Equal '9' and al,0dfh ;;gemener -> VERSALER cmp al,'A' ;;Error if lower than 'A' jl Error cmp al,'F' jle Save ;;Save if lower or equal 'F' Error: Print 'Wrong input format, Aborted' mov cx,0ffffh jmp Ready Save: inc bx cmp bx,05h jz Ready sub al,30h ;;ASCII -> HEX cmp al,0ah ;;V„rdet j„mf med 10 dec jc Siffra ;; Hopp om 0-9 sub al,07h ;;eljest minska med 7 Siffra: cbw ;;Byte -> Word push cx ;;Spara error-flagga mov cl,04h ;;F”rbered shift 4 ggr sal dx,cl ;;Skifta 4 ggr pop cx add dx,ax ;;Spara i DX inc di jmp Next_Char ready: ret chk_end: more_spc: inc di cmp byte ptr[di],020h jz more_spc cmp byte ptr[di],0dh jnz Error jmp ready Param_Read ENDP ;------------------------------------------------------------------------- begin: call main ret CSEG ENDS END start . 0