用汇编语言编写一个矩阵
矩阵图形如下:0123456123456023456013456012456012356012346012345...
矩阵图形如下:
0 1 2 3 4 5 6
1 2 3 4 5 6 0
2 3 4 5 6 0 1
3 4 5 6 0 1 2
4 5 6 0 1 2 3
5 6 0 1 2 3 4
6 0 1 2 3 4 5 展开
0 1 2 3 4 5 6
1 2 3 4 5 6 0
2 3 4 5 6 0 1
3 4 5 6 0 1 2
4 5 6 0 1 2 3
5 6 0 1 2 3 4
6 0 1 2 3 4 5 展开
2个回答
展开全部
CODE SEGMENT
ASSUME CS:CODE,DS:CODE
START:
push cs
pop ds
mov ax,3
int 10h ;文本模式才有效
mov ax,0b800h
mov es,ax ;指向显存段址
mov bx,7 ;共7行
mov dx,2030h
mov di,(5*80+32)*2 ;起始位置5行32列
again:
mov ax,dx
mov cx,7 ;共7字
nx1:
mov es:[di],ah ;输出空格
inc di
inc di ;指向下一位置
stosb ;输出一个字符
inc di
inc al
cmp al,'7' ;逢7归0
jnz nx2
mov al,'0'
nx2:
loop nx1
dec bx
jz quit
add di,(80-14)*2 ;转下一行
inc dl
jmp again
quit:
mov ah,1
int 21h ;暂停
mov ah,4ch
int 21h ;返回DOS
CODE ENDS
END START
ASSUME CS:CODE,DS:CODE
START:
push cs
pop ds
mov ax,3
int 10h ;文本模式才有效
mov ax,0b800h
mov es,ax ;指向显存段址
mov bx,7 ;共7行
mov dx,2030h
mov di,(5*80+32)*2 ;起始位置5行32列
again:
mov ax,dx
mov cx,7 ;共7字
nx1:
mov es:[di],ah ;输出空格
inc di
inc di ;指向下一位置
stosb ;输出一个字符
inc di
inc al
cmp al,'7' ;逢7归0
jnz nx2
mov al,'0'
nx2:
loop nx1
dec bx
jz quit
add di,(80-14)*2 ;转下一行
inc dl
jmp again
quit:
mov ah,1
int 21h ;暂停
mov ah,4ch
int 21h ;返回DOS
CODE ENDS
END START
展开全部
;------矩阵输出-------
;----0 1 2 3 4 5 6----
;----1 2 3 4 5 6 0----
;----2 3 4 5 6 0 1----
;----3 4 5 6 0 1 2----
;----4 5 6 0 1 2 3----
;----5 6 0 1 2 3 4----
;----6 0 1 2 3 4 5----
;---------------------
data segment
str db "0123456$"
temp db ?
data ends
code segment
assume cs:code,ds:data
start:
push ds
sub ax,ax
push ax
mov ax,data
mov ds,ax
;输出第一行
call output
call crlf;回车换行
;循环输出后六行
;基本思想
;针对将要输出的一行,将该行的第一个数存于temp,然后从第二个数开始依次前移一位
;再将temp放到最后的位置,此时再将该行输出
;然后再对第二行做同样的变化、输出
;循环六次就可以输出后六行
mov bl,6;控制输出六次
loop2:
mov al,str[0];将第一个数存于temp
mov temp,al
mov cx,6
mov si,0
loop3:
mov al,str[si+1];循环前移
mov str[si],al
add si,1
loop loop3
mov al,temp
mov str[6],al;再将temp(即第一个数)存于最后位置
call output;将该行输出
call crlf;回车换行
sub bl,1
cmp bl,0
jg loop2
mov ah,4ch
int 21h
space proc near;空格输出子程序
mov dl,20h
mov ah,02h
int 21h
ret
space endp
crlf proc near ;回车换行子程序
mov dl,0ah
mov ah,02h
int 21h
mov dl,0dh
mov ah,02h
int 21h
ret
crlf endp
output proc near;输出字符串的子程序
mov cx,7
mov si,0
loop1:
mov dl,str[si]
mov ah,02h
int 21h
call space;控制空格输出
add si,1
loop loop1
ret
output endp
code ends
end start
;----0 1 2 3 4 5 6----
;----1 2 3 4 5 6 0----
;----2 3 4 5 6 0 1----
;----3 4 5 6 0 1 2----
;----4 5 6 0 1 2 3----
;----5 6 0 1 2 3 4----
;----6 0 1 2 3 4 5----
;---------------------
data segment
str db "0123456$"
temp db ?
data ends
code segment
assume cs:code,ds:data
start:
push ds
sub ax,ax
push ax
mov ax,data
mov ds,ax
;输出第一行
call output
call crlf;回车换行
;循环输出后六行
;基本思想
;针对将要输出的一行,将该行的第一个数存于temp,然后从第二个数开始依次前移一位
;再将temp放到最后的位置,此时再将该行输出
;然后再对第二行做同样的变化、输出
;循环六次就可以输出后六行
mov bl,6;控制输出六次
loop2:
mov al,str[0];将第一个数存于temp
mov temp,al
mov cx,6
mov si,0
loop3:
mov al,str[si+1];循环前移
mov str[si],al
add si,1
loop loop3
mov al,temp
mov str[6],al;再将temp(即第一个数)存于最后位置
call output;将该行输出
call crlf;回车换行
sub bl,1
cmp bl,0
jg loop2
mov ah,4ch
int 21h
space proc near;空格输出子程序
mov dl,20h
mov ah,02h
int 21h
ret
space endp
crlf proc near ;回车换行子程序
mov dl,0ah
mov ah,02h
int 21h
mov dl,0dh
mov ah,02h
int 21h
ret
crlf endp
output proc near;输出字符串的子程序
mov cx,7
mov si,0
loop1:
mov dl,str[si]
mov ah,02h
int 21h
call space;控制空格输出
add si,1
loop loop1
ret
output endp
code ends
end start
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询