⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 mofang.asm

📁 使用汇编语言打印输出三阶魔方阵。此程序的功能是:可以输出1、3、5、7、9阶魔方阵。
💻 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 + -