Codice:
N_INPUT_LEN EQU OFFSET _c_input_end - OFFSET _c_input_start
data segment byte 'DATA'
_char_num:
DB 0h,'$'
_x_pow:
DB 'x^$'
_plus:
DB '+$'
_c_input_start:
DB 1d,2d,3d,4d
_c_input_end:
data ends
.8086
.ALPHA
code segment para use16 'CODE'
assume cs:code
Init proc near
std
mov ax,DATA
mov ds,ax
mov cx,N_INPUT_LEN - 1
mov si,OFFSET _c_input_end - 1
xor ah,ah
loop_write_dt:
lodsb
call Write_Dec_Num
mov dx,OFFSET _x_pow
call Write_DOS_Message
mov al,cl
call Write_Dec_Num
mov dx,OFFSET _plus
call Write_DOS_Message
loop loop_write_dt
lodsb
call Write_Dec_Num
mov ax,4C00h
int 21h
init endp
;#############################################################################
;
; DS:[DX] = Offset write DOS string
;
;#############################################################################
Write_DOS_Message proc near
push ax
push bx
push cx
push dx
push di
push si
push bp
mov ah,9h
int 21h
pop bp
pop si
pop di
pop dx
pop cx
pop bx
pop ax
ret
Write_DOS_Message endp
;#############################################################################
;
; AX = Write number
;
;#############################################################################
Write_Dec_Num proc near
push ax
push cx
push dx
mov cx,100d
loop_div:
div cl
or al,al
jne write_char
or ch,ch
je end_of_div
write_char:
or ch,1h
mov dx,OFFSET _char_num
mov ds: byte ptr [_char_num],al
add ds: byte ptr [_char_num],'0'
call Write_DOS_Message
end_of_div:
mov dl,ah
mov al,cl
xor ah,ah
mov cl,10d
div cl
mov cl,al
mov al,dl
xor ah,ah
or cl,cl
jne loop_div
pop dx
pop cx
pop ax
ret
Write_Dec_Num endp
code ends
end init