北京大学10月30日及11月2日模拟练习题
作者名:不详 来源:网友提供 06年6月8日
输入一个数(0~255)
1)输入输出提示
2)若能除以15,则yes,否no
3)以十进制输出商
4)以二进制输出余数
data segment
message1 db 'please input one dec number(0~255):',0dh,0ah,'$'
message2 db 'the output1 is:',0dh,0ah,'$'
message3 db 'Yes',0dh,0ah,'$'
message4 db 'No',0dh,0ah,'$'
message5 db 'the output2 is:',0dh,0ah,'$'
message6 db 'the output3 is:',0dh,0ah,'$'
num1 dw 0
num2 dw ?
num3 dw ?
nonzero db 0
data ends
code segment
assume cs:code,ds:data
start:
mov dx,data
mov ds,dx
mov ah,9
lea dx,message1 ;please input one number:
int 21h
call getdec
mov num1,bx
call ctrl
mov ah,9
lea dx,message2 ;the output1 is
int 21h
call pro1
mov ah,9
lea dx,message5 ;the output2 is
int 21h
mov bx,num2
mov bh,0
call putdec
call ctrl
mov ah,9
lea dx,message6 ;the output3 is
int 21h
call putbin
mov ah,4ch
int 21h
ctrl proc near
mov ah,2
mov dl,0dh
int 21h
mov ah,2
mov dl,0ah
int 21h
ret
ctrl endp
getdec proc near
push cx
mov bx,0
getdecnewchar:
mov ah,1
int 21h
cmp al,0dh
je getdecexit
sub al,30h
mov ah,0
xchg ax,bx
mov cx,10
mul cx
xchg ax,bx
add bx,ax
jmp getdecnewchar
getdecexit:
pop cx
ret
getdec endp
pro1 proc near
mov ax,0
mov ax,num1
mov cl,15
div cl
mov num2,ax
cmp ah,0
je L1
mov ah,9
lea dx,message4 ;No
int 21h
jmp L2
L1: mov ah,9
lea dx,message3 ;Yes
int 21h
L2: ret
pro1 endp
putdec proc near
push cx
mov nonzero,0
mov cx,100
call dec_div
mov cx,10
call dec_div
mov cx,1
call dec_div
cmp nonzero,0
jne putdecexit
mov ah,2
mov dl,30h
int 21h
putdecexit:
pop cx
ret
dec_div proc near
mov ax,bx
mov dx,0
div cx
mov bx,dx
mov dl,al
add dl,30h
cmp dl,30h
jne dec_divprint
jmp dec_divexit
dec_divprint:
mov nonzero,1
mov ah,2
int 21h
dec_divexit:
ret
dec_div endp
putdec endp
putbin proc near
mov bx,num2
mov bl,0
mov ch,8
mov cl,1
L3: rol bx,cl
mov al,bl
and al,01h
add al,30h
mov ah,2
mov dl,al
int 21h
dec ch
jnz L3
ret
putbin endp
code ends
end start
输入两个数(0~255)
1)以十进制输出和
2)若和为偶数,则yes,否no
3)以二进制输出两个数中大者
data segment
message1 db 'please input two dec number(0~255):',0dh,0ah,'$'
message2 db 'the input1 is:',0dh,0ah,'$'
message3 db 'the input2 is:',0dh,0ah,'$'
message4 db 'the input3 is:',0dh,0ah,'$'
message5 db 'Yes',0dh,0ah,'$'
message6 db 'No',0dh,0ah,'$'
num1 dw ?
num2 dw ?
num3 dw ?
nonzero db 0
data ends
code segment
assume cs:code,ds:data
start:
mov dx,data
mov ds,dx
mov ah,9
lea dx,message1
int 21h
call getdec
mov num1,bx
call ctrl
call getdec
mov num2,bx
call ctrl
mov ah,9
lea dx,message2
int 21h
call pro1
call putdec
call ctrl
mov ah,9
lea dx,message3
int 21h
call pro2
mov ah,9
lea dx,message4
int 21h
call pro3
mov ah,4ch
int 21h
ctrl proc near
mov ah,2
mov dl,0dh
int 21h
mov ah,2
mov dl,0ah
int 21h
ret
ctrl endp
getdec proc near
push cx
mov bx,0
getdecnewchar:
mov ah,1
int 21h
cmp al,0dh
je getdecexit
sub al,30h
mov ah,0
xchg ax,bx
mov cx,10
mul cx
xchg ax,bx
add bx,ax
jmp getdecnewchar
getdecexit:
pop cx
ret
getdec endp
pro1 proc near
mov ax,num1
add ax,num2
mov num3,ax
mov bx,ax
ret
pro1 endp
putdec proc near
push cx
mov cx,100
call dec_div
mov cx,10
call dec_div
mov cx,1
call dec_div
cmp nonzero,0
jne putdecexit
mov ah,2
mov dl,30h
int 21h
putdecexit:
pop cx
ret
dec_div proc near
mov ax,bx
mov dx,0
div cx
mov bx,dx
mov dl,al
add dl,30h
cmp dl,30h
jne dec_divprint
jmp dec_divexit
dec_divprint:
mov nonzero,1
mov ah,2
int 21h
dec_divexit:
ret
dec_div endp
putdec endp
pro2 proc near
mov bx,0
mov bx,num3
and bx,01h
cmp bx,0
je L1
mov ah,9
lea dx,message6 ;jishu
int 21h
jmp L2
L1: mov ah,9
lea dx,message5 ;oushu
int 21h
L2: ret
pro2 endp
pro3 proc near
mov ax,0
mov ax,num1
mov ch,8
cmp ax,num2
jb L3
mov bx,0
mov bx,ax
mov cl,8
rol bx,cl
jmp L4
L3: mov bx,num2
mov cl,8
rol bx,cl
L4: mov cl,1
rol bx,cl
mov al,bl
and al,01h
add al,30h
mov ah,2
mov dl,al
int 21h
dec ch
cmp ch,0
jne L4
ret
pro3 endp
code ends
end start
|
|