第一题 加减乘除
assume ds:data,cs:code,ss:stack
data segment
number db 0dh,0ah,"Please write down your number:",0dh,0ah,0dh,0ah,"$"
write db 50
db ?
db 50 dup(?)
nu1 db 0,0,0,0,0
nu2 db 0,0,0,0,0
nu3 db 0,0,0,0,0
nu4 db 0,0,0,0,0
prt db 0dh,0ah,0dh,0ah,0,0,0,0,0,0
data ends
stack segment stack
db 50 dup(0)
stack ends
code segment
start:
mov ax,data
mov ds,ax
lea dx,number
mov ah,9h
int 21h
lea dx,write
mov ah,0ah
int 21h
lea si,write
lea di,nu1
@1_11:
cmp byte ptr [si+2],30h
jb @1_1
mov bl,byte ptr [si+2]
mov byte ptr [di],bl
inc di
inc si
jmp @1_11
@1_1:
push si
lea si,nu1
lea di,nu2
call @16ZH
lea di,nu3
pop si
push si
@1_2:
cmp byte ptr [si+3],0dh
je @1_21
mov bl,byte ptr [si+3]
mov byte ptr [di],bl
inc di
inc si
jmp @1_2
@1_21:
lea si,nu3
lea di,nu4
call @16ZH
pop si
lea di,nu2
mov ax,word ptr [di]
lea di,nu4
mov bx,word ptr [di]
cmp byte ptr [si+2],2bh
jne @t1
add ax,bx
push ax
jmp @go
@t1:
cmp byte ptr [si+2],2dh
jne @t2
sub ax,bx
push ax
jmp @go
@t2:
cmp byte ptr [si+2],2ah
jne @t3
mul bx
push ax
jmp @go
@t3:
div bx
push ax
@go:
lea ax,prt+4
mov di,ax
mov ax,stack
mov ss,ax
pop ax
call @ZH16
mov ax,4c00h
int 21h
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
@16ZH:
push ax
push bx
push cx
push si
push di
xor cx,cx
xor bx,bx
@a1_1:
cmp byte ptr [bx+si],0
je @a1
inc bx
jmp @a1_1
@a1:
mov cx,bx
add si,bx
mov ax,1
mov bx,16
@a2_1:
push bx
push ax
cmp byte ptr [si-1],50h
ja @a2
sub byte ptr [si-1],30h
mov bl,byte ptr [si-1]
@a2_31:
xor bh,bh
mul bx
add ds:[di],ax
pop ax
pop bx
mul bx
dec si
loop @a2_1
jmp exit
@a2:
sub byte ptr [si-1],60h
mov bl,byte ptr [si-1]
add bl,9
jmp @a2_31
exit:
pop di
pop si
pop cx
pop bx
pop ax
ret
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
@ZH16:
push ax
push bx
push cx
push dx
push di
push si
mov si,0
mov bx,10h
xor cx,cx
@3_21:
xor dx,dx
div bx
cmp dl,9
ja @3_1
add dl,30h
@3_11:
mov byte ptr ss:[si],dl
inc si
inc cx
cmp ax,0
je @3_2
jmp @3_21
@3_1:
sub dl,9
add dl,60h
jmp @3_11
@3_2:
mov dl,byte ptr ss:[si-1]
mov byte ptr [di],dl
dec si
inc di
loop @3_2
mov byte ptr [di],"$"
lea dx,prt
mov ah,9h
int 21h
pop si
pop di
pop dx
pop cx
pop bx
pop ax
ret
code ends
end start