| ||||||||||
| Online Judge | Problem Set | Authors | Online Contests | User | ||||||
|---|---|---|---|---|---|---|---|---|---|---|
| Web Board Home Page F.A.Qs Statistical Charts | Current Contest Past Contests Scheduled Contests Award Contest | |||||||||
asm.model large
.stack 64
.data
num1 db 6 dup(' ')
num2 db 6 dup(' ')
num3 db 6 dup(' '),"$"
num dw 0
num11 dw 0
dolar db "$"
msg1 db 13,10,"num1 : $",13,10
msg2 db 13,10,"num2 : $",13,10
msg3 db 13,10,"res : $",13,10
.code
main proc far
mov ax,@data
mov ds,ax
call cls
mov ah,9
lea dx,msg1
int 21h
lea dx,num1
call get_num
mov bx,num
mov num11,bx
mov ah,9
lea dx,msg2
int 21h
lea dx,num2
call get_num
mov bx,num
add bx,num11
mov ax,bx
mov dx,0
mov cx,10
div cx
add dl,30h
lea si,num3
mov [si],dl
mov ah,9
lea dx,msg3
int 21h
mov ah,9
lea dx,num3
int 21h
mov ax,4c00h
int 21h
main endp
cls proc far
push ax
push bx
push dx
pushf
mov ah, 6h ;clear screen
mov al, 25 ;number of rows
mov ch, 0
mov cl, 0
mov dh, 24 ;row
mov dl, 79 ;column
mov bh, 7 ;attribute
int 10h
popf
pop dx
pop bx
pop ax
retf
cls endp
get_num proc far
push bp
mov bp, sp
push si
push bx
push cx
push dx
mov ah, 3fh
mov dx, [bp+06]
mov bx, 0000h
mov cx,8
int 21h
mov si, dx
while_blank: cmp byte ptr [bx], ' ' ; skip leading blank
jne end_while_blank ; exit while
inc bx
jmp while_blank
end_while_blank:
mov bl, 1 ;default sign multiplier
cmp byte ptr [si], '+' ;leadin + ?
je skip_sign ;if so skip over
cmp byte ptr [si], '-' ;leading - ?
jne save_sign ;if not save default +
mov bl, -1 ;-1 for minus sign
skip_sign: inc si ;past sign
save_sign: mov ax, 0 ;number being accumulated
mov bh, 0 ;count of digits so far
while_digit: cmp byte ptr [si], '0' ;compare next car to '0'
jl end_while_digit ;if not a digit exit
cmp byte ptr [si], '9' ;compare to '9'
jg end_while_digit ;not a digit if bigger than '9'
mov cx, 10 ;multiplier
mul cx ;multiply old number by 10
mov cl, [si] ;mov ascii char to bl
and cx, 000fh ;convert to single digit integer
add ax, cx ;add to sum
inc bh ;increment digit count
inc si ;increment character pointer
jmp while_digit ;go next char
end_while_digit:
; imul bl
cmp bl, 1
je exit1
neg ax
exit1:
mov num, ax
pop dx
pop bx
pop cx
pop si
pop bp
retf 2
get_num endp
convert_num_string proc far
push bp
mov bp, sp
push si
push ax
push bx
push cx
push dx
mov ax, word ptr[bp+08]
mov si, word ptr[bp+06]
add si, 5
mov bh, ' '
cmp ax, 0
jge setup ; skip if not negative
mov bh, '-'
neg ax ; now ax > 0
setup: mov cx, 10 ; divisor
divloop: mov dx, 0 ; extend number to double word
div cx ; divide by 10
add dl, 30h ; convert
mov [si], dl
dec si
cmp ax, 0
jne divloop
mov cl, bh ; insert sign to string
mov [si], cl
pop dx
pop bx
pop cx
pop ax
pop si
pop bp
retf 4
convert_num_string endp
end main
Followed by:
Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator