📄 mofang.asm
字号:
getdata macro row,col;to al
push bx
mov ax,row
mov bx,jie
mul bl
add ax,col
add ax,offset data
mov bx,ax
mov al,[bx]
pop bx
endm
setdata macro row,col,d
push ax
push bx
mov ax,row
mov bx,jie
mul bl
add ax,col
add ax,offset data
mov bx,ax
mov byte ptr[bx],d
pop bx
pop ax
endm
putcharn macro char,n
local l1
push ax
push cx
push dx
mov cx,n
mov ah,2
l1:
mov dl,char
int 21h
loop l1
pop dx
pop cx
pop ax
endm
dataseg segment
data db 9*9 dup(0)
jie dw 3
msg db 'Please input the steps(1,3,5,7,9,q to Exit):$'
nextline db 13,10,'$'
dataseg ends
code segment
assume cs:code,ds:dataseg
main proc far
start:
mov ax,dataseg
mov ds,ax
mov es,ax
mov al,0
mov bh,7
mov ch,0
mov cl,0
mov dh,24
mov dl,79
mov ah,6
int 21h
next_time:
lea dx,msg
mov ah,9
int 21h
next_ch:
mov ah,7
int 21h
cmp al,'q'
jz exit2
cmp al,'9'
jg next_ch
cmp al,'1'
jl next_ch
mov bl,al
shr bl,1
jnc next_ch
mov dl,al
mov ah,2
int 21h
sub al,'0'
mov ah,0
mov jie,ax
lea dx,nextline
mov ah,9
int 21h
int 21h
call mofang
call printmofang
mov al,0
mov cx,9*9
lea di,data
rep stosb
jmp next_time
exit2:
mov ax,4c00h
int 21h
main endp
mofang proc near
IRP X,<AX,BX,CX,DX,SI,DI>
push X
endm
mov ax,jie
shr ax,1
mov si,ax;col
mov bx,0;row
mov ax,jie
mul al
mov cx,ax
mov dl,1
continue:
cmp dl,cl
jg exit1
cmp bx,0
jnl bxg0
mov bx,jie
dec bx
bxg0:
cmp si,jie
jl siljie
mov si,0
siljie:
getdata bx,si
cmp al,0
jz e0
add bx,2
dec si
jmp continue
e0:
setdata bx,si,dl
inc dl
cmp bx,0
jnz t1
mov di,si
inc di
cmp di,jie
jnz t1
inc bx
jmp continue
t1:
dec bx
inc si
jmp continue
exit1:
IRP X,<DI,SI,DX,CX,BX,AX>
pop X
endm
ret
mofang endp
print proc near;print (ax) as dec
push ax
push bx
push cx
push dx
mov cx,0
mov bl,10
cmp al,0
jnz next
mov dl,'0'
mov ah,2
int 21h
jmp exit
next:
cmp al,0
jz ok
div bl
mov dl,ah
mov dh,0
push dx
inc cx
mov ah,0
jmp next
ok:
cmp cx,0
jle exit
pop ax
dec cx
mov dl,al
add dl,'0'
mov ah,2
int 21h
jmp ok
exit:
pop dx
pop cx
pop bx
pop ax
ret
print endp
printmofang proc near
IRP X,<AX,BX,CX,DX,SI,DI>
push X
endm
mov bx,0
mov si,0
putcharn ' ',15
next1:
getdata bx,si
mov ah,0
call print
cmp ax,10
jl l10
jmp g10
l10:
putcharn ' ',3
jmp next2
g10:
putcharn ' ',2
next2:
inc si
cmp si,jie
jl next1
lea dx,nextline
mov ah,9
int 21h
int 21h
putcharn ' ',15
mov si,0
inc bx
cmp bx,jie
jl next1
mov bh,0
mov ah,3
int 10h
mov dl,0
mov ah,2
int 10h
IRP X,<DI,SI,DX,CX,BX,AX>
pop X
endm
ret
printmofang endp
code ends
end start
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -